救命呀各位大佬,一个关于tkinter的问题
本帖最后由 TGgan 于 2023-3-19 09:18 编辑我想实现的效果是,逐字输出我的一大段文本,然后为了有那种自动上翻的效果,我想让文本框大于7行时就自动删除第一行。
现在的问题就是,它并不自动换行,我的一大段在它那才算一行,这是为什么?明明我也设置了宽度呀,求大佬解惑!!!{:10_250:} {:10_266:}
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("""一大段文本""") 先占个楼
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(".")) > 7:
text_widget.delete("1.0", "2.0")
text_widget.insert(tk.END, "\n\n")
root.mainloop()
display_text("""一大段文本""")
@一点沙 白嫖 歌者文明清理员 发表于 2023-3-19 09:22
@一点沙 白嫖
{:10_247:} TGgan 发表于 2023-3-19 09:26
啥意思 isdkz 发表于 2023-3-19 09:19
先占个楼
??????isdkz 在干这事???白嫖求助帖??? 歌者文明清理员 发表于 2023-3-19 09:26
啥意思
你是说我的问题吗,就是自动换行失败了,看着有很多行,但index显示他们还是在同一行。{:10_250:} TGgan 发表于 2023-3-19 09:32
你是说我的问题吗,就是自动换行失败了,看着有很多行,但index显示他们还是在同一行。
你可以先拼接所有内容,然后去掉换行符,每个元素 10 个字符(width=10)放进列表,然后求列表长度
因为中英文的区别,可能会出 Bug 你的代码我试了一下,如果那一大段文本有换行符的话是没有问题的
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() isdkz 发表于 2023-3-19 09:35
你的代码我试了一下,如果那一大段文本有换行符的话是没有问题的
谢谢你,是的,但是我那个文本是从word里面直接复制的,只有段落之间才有换行符,而且内容挺多的,很难加很多换行符进去{:10_266:}{:10_266:}所以才想它能够输出到边界就自动换行。 TGgan 发表于 2023-3-19 09:43
谢谢你,是的,但是我那个文本是从word里面直接复制的,只有段落之间才有换行符,而且内容挺多的,很难加 ...
用Scrollbar试试
你需要:
- 10 鱼币
小甲鱼的教程 歌者文明清理员 发表于 2023-3-19 09:34
你可以先拼接所有内容,然后去掉换行符,每个元素 10 个字符(width=10)放进列表,然后求列表长度
因 ...
谢谢你,我大概明白了,但是因为我有缩进格式和换行,每行不能一定是10个字符{:10_297:} isdkz 发表于 2023-3-19 09:35
你的代码我试了一下,如果那一大段文本有换行符的话是没有问题的
“♡”? 歌者文明清理员 发表于 2023-3-19 09:47
“♡”?
他的代码里面带的 歌者文明清理员 发表于 2023-3-19 09:47
“♡”?
哈哈哈这个就是个闪烁的爱心符号,可能字体不同不支持,复制过来乱码了{:10_281:} TGgan 发表于 2023-3-19 09:48
哈哈哈这个就是个闪烁的爱心符号,可能字体不同不支持,复制过来乱码了
用scrollbar
https://fishc.com.cn/thread-59493-1-1.html 歌者文明清理员 发表于 2023-3-19 09:48
没有啊
{:5_90:}
币 isdkz 发表于 2023-3-19 09:51
不好意思看错了{:10_297:} 歌者文明清理员 发表于 2023-3-19 09:49
用scrollbar
https://fishc.com.cn/thread-59493-1-1.html
手动滚动吗哈哈哈{:10_269:}
页:
[1]
2