鱼C论坛

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

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

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

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

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

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

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

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


你可以先拼接所有内容,然后去掉换行符,每个元素 10 个字符(width=10)放进列表,然后求列表长度
因为中英文的区别,可能会出 Bug
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

回帖奖励 +30 鱼币

先占个楼
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +30 鱼币


  1. import tkinter as tk
  2. from tkinter import font
  3. import time
  4. def display_text(text):
  5.     # 初始化窗口
  6.     root = tk.Tk()
  7.     root.geometry("500x300")
  8.     root.configure(bg="black")
  9.    
  10.     # 设置字体和大小
  11.     custom_font = font.Font(family="楷体", size=16)
  12.    
  13.     # 创建文本框并添加到窗口中
  14.     text_widget = tk.Text(root, width=50, wrap="word", bg="black", fg="white", font=custom_font)
  15.     text_widget.pack(expand=True, fill="both")
  16.    
  17.     # 将文本分割成段落
  18.     paragraphs = text.split("\n")
  19.    
  20.     for paragraph in paragraphs:
  21.         # 分割段落为单个字符
  22.         characters = list(paragraph)
  23.         
  24.         for character in characters:
  25.             text_widget.insert(tk.END, character)
  26.             text_widget.update()
  27.             time.sleep(0.1)
  28.             
  29.             text_widget.delete("end-2c", tk.END)
  30.             
  31.             if int(text_widget.index("end").split(".")[0]) > 7:
  32.                 text_widget.delete("1.0", "2.0")
  33.                
  34.         text_widget.insert(tk.END, "\n\n")
  35.         
  36.     root.mainloop()
  37.    
  38. display_text("""一大段文本""")
复制代码

@一点沙 白嫖
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-3-19 09:26:19 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 09:26:31 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

??????isdkz 在干这事???白嫖求助帖???
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

你是说我的问题吗,就是自动换行失败了,看着有很多行,但index显示他们还是在同一行。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


你可以先拼接所有内容,然后去掉换行符,每个元素 10 个字符(width=10)放进列表,然后求列表长度
因为中英文的区别,可能会出 Bug
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

  1. import tkinter as tk
  2. from tkinter import font
  3. import time

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

  7.     root.geometry("500x300")
  8.     root.configure(bg="black")
  9.    
  10.     # 设置字体和大小
  11.     custom_font = font.Font(family="楷体", size=16)
  12.    
  13.     # 创建文本框并添加到窗口中
  14.     text_widget = tk.Text(root, width = 10,wrap = "char",bg="black", fg="white", font=custom_font)
  15.     text_widget.pack(expand=True, fill="both")
  16.    
  17.     # 将文本分割成段落
  18.     paragraphs = text.split("\n")
  19.    
  20.     for paragraph in paragraphs:
  21.         # 分割段落为单个字符
  22.         characters = list(paragraph)
  23.         
  24.         for character in characters:
  25.             text_widget.insert(tk.END, "♡")
  26.             text_widget.update()
  27.             time.sleep(0.1)
  28.             
  29.             text_widget.delete("end-2c", tk.END)
  30.             
  31.             text_widget.insert(tk.END, character)
  32.             text_widget.update()
  33.             
  34.             time.sleep(0.1)
  35.             
  36.             if float(text_widget.index("end")) > 7.0:
  37.                 text_widget.delete("1.0", "2.0")
  38.         text_widget.insert(tk.END, "    \n")
  39.         text_widget.insert(tk.END, "    \n")
  40. display_text("""一大段文本\n""" * 18)                                                                         # 注意这里
  41. root.mainloop()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

使用道具 举报

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


用Scrollbar试试
你需要:
- 10 鱼币
小甲鱼的教程
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢你,我大概明白了,但是因为我有缩进格式和换行,每行不能一定是10个字符
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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


“♡”?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

他的代码里面带的
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

哈哈哈这个就是个闪烁的爱心符号,可能字体不同不支持,复制过来乱码了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

用scrollbar
https://fishc.com.cn/thread-59493-1-1.html
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-3-19 09:51:17 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

回帖奖励 +30 鱼币

小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

不好意思看错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

手动滚动吗哈哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-24 21:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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