TGgan 发表于 2023-3-19 09:17:33

救命呀各位大佬,一个关于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("""一大段文本""")

isdkz 发表于 2023-3-19 09:19:16

先占个楼

歌者文明清理员 发表于 2023-3-19 09:22:50


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("""一大段文本""")
@一点沙 白嫖

TGgan 发表于 2023-3-19 09:26:19

歌者文明清理员 发表于 2023-3-19 09:22
@一点沙 白嫖

{:10_247:}

歌者文明清理员 发表于 2023-3-19 09:26:31

TGgan 发表于 2023-3-19 09:26


啥意思

歌者文明清理员 发表于 2023-3-19 09:27:15

isdkz 发表于 2023-3-19 09:19
先占个楼

??????isdkz 在干这事???白嫖求助帖???

TGgan 发表于 2023-3-19 09:32:47

歌者文明清理员 发表于 2023-3-19 09:26
啥意思

你是说我的问题吗,就是自动换行失败了,看着有很多行,但index显示他们还是在同一行。{:10_250:}

歌者文明清理员 发表于 2023-3-19 09:34:43

TGgan 发表于 2023-3-19 09:32
你是说我的问题吗,就是自动换行失败了,看着有很多行,但index显示他们还是在同一行。

你可以先拼接所有内容,然后去掉换行符,每个元素 10 个字符(width=10)放进列表,然后求列表长度
因为中英文的区别,可能会出 Bug

isdkz 发表于 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()

TGgan 发表于 2023-3-19 09:43:31

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

谢谢你,是的,但是我那个文本是从word里面直接复制的,只有段落之间才有换行符,而且内容挺多的,很难加很多换行符进去{:10_266:}{:10_266:}所以才想它能够输出到边界就自动换行。

歌者文明清理员 发表于 2023-3-19 09:45:23

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

用Scrollbar试试
你需要:
- 10 鱼币
小甲鱼的教程

TGgan 发表于 2023-3-19 09:46:44

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

谢谢你,我大概明白了,但是因为我有缩进格式和换行,每行不能一定是10个字符{:10_297:}

歌者文明清理员 发表于 2023-3-19 09:47:27

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

“♡”?

isdkz 发表于 2023-3-19 09:48:31

歌者文明清理员 发表于 2023-3-19 09:47
“♡”?

他的代码里面带的

TGgan 发表于 2023-3-19 09:48:56

歌者文明清理员 发表于 2023-3-19 09:47
“♡”?

哈哈哈这个就是个闪烁的爱心符号,可能字体不同不支持,复制过来乱码了{:10_281:}

歌者文明清理员 发表于 2023-3-19 09:49:41

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

用scrollbar
https://fishc.com.cn/thread-59493-1-1.html

isdkz 发表于 2023-3-19 09:51:17

歌者文明清理员 发表于 2023-3-19 09:48
没有啊

{:5_90:}

liuhongrun2022 发表于 2023-3-19 09:51:17

歌者文明清理员 发表于 2023-3-19 09:52:02

isdkz 发表于 2023-3-19 09:51


不好意思看错了{:10_297:}

TGgan 发表于 2023-3-19 09:54:21

歌者文明清理员 发表于 2023-3-19 09:49
用scrollbar
https://fishc.com.cn/thread-59493-1-1.html

手动滚动吗哈哈哈{:10_269:}
页: [1] 2
查看完整版本: 救命呀各位大佬,一个关于tkinter的问题