鱼C论坛

 找回密码
 立即注册
查看: 3678|回复: 23

[已解决]救命呀各位大佬,一个关于tkinter的问题

[复制链接]
发表于 2023-3-19 09:17:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 TGgan 于 2023-3-19 09:18 编辑

我想实现的效果是,逐字输出我的一大段文本,然后为了有那种自动上翻的效果,我想让文本框大于7行时就自动删除第一行。
现在的问题就是,它并不自动换行,我的一大段在它那才算一行,这是为什么?明明我也设置了宽度呀,求大佬解惑!!!
import tkinter as tk
from tkinter import font
import time

def display_text(text):
    # 初始化窗口
    root = tk.Tk()
    root.geometry("500x300")
    root.configure(bg="black")
    
    # 设置字体和大小
    custom_font = font.Font(family="楷体", size=16)
    
    # 创建文本框并添加到窗口中
    text_widget = tk.Text(root, width = 10,wrap = "char",bg="black", fg="white", font=custom_font)
    text_widget.pack(expand=True, fill="both")
    
    # 将文本分割成段落
    paragraphs = text.split("\n")
    
    for paragraph in paragraphs:
        # 分割段落为单个字符
        characters = list(paragraph)
        
        for character in characters:
            text_widget.insert(tk.END, "♡")
            text_widget.update()
            time.sleep(0.1)
            
            text_widget.delete("end-2c", tk.END)
            
            text_widget.insert(tk.END, character)
            text_widget.update()
            
            time.sleep(0.1)
            
            if float(text_widget.index("end")) > 7.0:
                text_widget.delete("1.0", "2.0")
        text_widget.insert(tk.END, "    \n")
        text_widget.insert(tk.END, "    \n")
display_text("""一大段文本""")
最佳答案
2023-3-19 09:34:43
TGgan 发表于 2023-3-19 09:32
你是说我的问题吗,就是自动换行失败了,看着有很多行,但index显示他们还是在同一行。


你可以先拼接所有内容,然后去掉换行符,每个元素 10 个字符(width=10)放进列表,然后求列表长度
因为中英文的区别,可能会出 Bug
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-19 09:19:16 | 显示全部楼层

回帖奖励 +30 鱼币

先占个楼
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 09:22:50 | 显示全部楼层

回帖奖励 +30 鱼币

import tkinter as tk
from tkinter import font
import time
def display_text(text):
    # 初始化窗口
    root = tk.Tk()
    root.geometry("500x300")
    root.configure(bg="black")
    
    # 设置字体和大小
    custom_font = font.Font(family="楷体", size=16)
    
    # 创建文本框并添加到窗口中
    text_widget = tk.Text(root, width=50, wrap="word", bg="black", fg="white", font=custom_font)
    text_widget.pack(expand=True, fill="both")
    
    # 将文本分割成段落
    paragraphs = text.split("\n")
    
    for paragraph in paragraphs:
        # 分割段落为单个字符
        characters = list(paragraph)
        
        for character in characters:
            text_widget.insert(tk.END, character)
            text_widget.update()
            time.sleep(0.1)
            
            text_widget.delete("end-2c", tk.END)
            
            if int(text_widget.index("end").split(".")[0]) > 7:
                text_widget.delete("1.0", "2.0")
                
        text_widget.insert(tk.END, "\n\n")
        
    root.mainloop()
    
display_text("""一大段文本""")
@一点沙 白嫖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-19 09:26:19 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 09:26:31 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 09:27:15 | 显示全部楼层

??????isdkz 在干这事???白嫖求助帖???
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-19 09:32:47 | 显示全部楼层

你是说我的问题吗,就是自动换行失败了,看着有很多行,但index显示他们还是在同一行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 09:34:43 | 显示全部楼层    本楼为最佳答案   
TGgan 发表于 2023-3-19 09:32
你是说我的问题吗,就是自动换行失败了,看着有很多行,但index显示他们还是在同一行。


你可以先拼接所有内容,然后去掉换行符,每个元素 10 个字符(width=10)放进列表,然后求列表长度
因为中英文的区别,可能会出 Bug
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 09:35:29 | 显示全部楼层
你的代码我试了一下,如果那一大段文本有换行符的话是没有问题的
import tkinter as tk
from tkinter import font
import time

# 初始化窗口
root = tk.Tk()
def display_text(text):

    root.geometry("500x300")
    root.configure(bg="black")
    
    # 设置字体和大小
    custom_font = font.Font(family="楷体", size=16)
    
    # 创建文本框并添加到窗口中
    text_widget = tk.Text(root, width = 10,wrap = "char",bg="black", fg="white", font=custom_font)
    text_widget.pack(expand=True, fill="both")
    
    # 将文本分割成段落
    paragraphs = text.split("\n")
    
    for paragraph in paragraphs:
        # 分割段落为单个字符
        characters = list(paragraph)
        
        for character in characters:
            text_widget.insert(tk.END, "♡")
            text_widget.update()
            time.sleep(0.1)
            
            text_widget.delete("end-2c", tk.END)
            
            text_widget.insert(tk.END, character)
            text_widget.update()
            
            time.sleep(0.1)
            
            if float(text_widget.index("end")) > 7.0:
                text_widget.delete("1.0", "2.0")
        text_widget.insert(tk.END, "    \n")
        text_widget.insert(tk.END, "    \n")
display_text("""一大段文本\n""" * 18)                                                                         # 注意这里
root.mainloop()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-19 09:43:31 | 显示全部楼层
isdkz 发表于 2023-3-19 09:35
你的代码我试了一下,如果那一大段文本有换行符的话是没有问题的

谢谢你,是的,但是我那个文本是从word里面直接复制的,只有段落之间才有换行符,而且内容挺多的,很难加很多换行符进去所以才想它能够输出到边界就自动换行。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 09:45:23 | 显示全部楼层
TGgan 发表于 2023-3-19 09:43
谢谢你,是的,但是我那个文本是从word里面直接复制的,只有段落之间才有换行符,而且内容挺多的,很难加 ...


用Scrollbar试试
你需要:
- 10 鱼币
小甲鱼的教程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-19 09:46:44 | 显示全部楼层
歌者文明清理员 发表于 2023-3-19 09:34
你可以先拼接所有内容,然后去掉换行符,每个元素 10 个字符(width=10)放进列表,然后求列表长度
因 ...

谢谢你,我大概明白了,但是因为我有缩进格式和换行,每行不能一定是10个字符
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 09:47:27 | 显示全部楼层
isdkz 发表于 2023-3-19 09:35
你的代码我试了一下,如果那一大段文本有换行符的话是没有问题的


“♡”?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 09:48:31 | 显示全部楼层

他的代码里面带的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-19 09:48:56 | 显示全部楼层

哈哈哈这个就是个闪烁的爱心符号,可能字体不同不支持,复制过来乱码了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 09:49:41 | 显示全部楼层
TGgan 发表于 2023-3-19 09:48
哈哈哈这个就是个闪烁的爱心符号,可能字体不同不支持,复制过来乱码了

用scrollbar
https://fishc.com.cn/thread-59493-1-1.html
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 09:51:17 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 09:51:17 | 显示全部楼层

回帖奖励 +30 鱼币

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-3-19 09:52:02 | 显示全部楼层

不好意思看错了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-19 09:54:21 | 显示全部楼层
歌者文明清理员 发表于 2023-3-19 09:49
用scrollbar
https://fishc.com.cn/thread-59493-1-1.html

手动滚动吗哈哈哈
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 17:24

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表