我正在尝试使用tkinter导入在新窗口中逐字母打印,但是当我通过终端运行它时,窗口不会弹出

时间:2016-01-25 03:40:52

标签: python tkinter

from Tkinter import *

import time

while True:

    for message in "Hello World":
        time.sleep(.5)

root = Tk()

lb = Listbox(root, height=3)

lb.pack()

lb.insert(END, message)

lb.insert(END,"second entry")

lb.insert(END,"third entry")

root.mainloop()

3 个答案:

答案 0 :(得分:2)

您必须使用root.after来调用添加单个字母的函数,然后使用root.after调用相同的函数来添加下一个字母。

from Tkinter import *

# --- functions ---

def add_letter(text):
    if text: # if text not empty
        # add first letter from text
        lb.insert(END, text[0])
        # call again without first letter
        root.after(500, add_letter, text[1:])

# --- main ---

root = Tk()
lb = Listbox(root, height=15)
lb.pack()

# first call after 500ms 
root.after(500, add_letter, "Hello World")

root.mainloop()

编辑移动文字:)使用Text和反向文字

from Tkinter import *

# --- functions ---

def add_letter(text):
    if text: # if text not empty
        # add first letter from text
        lb.insert('1.0', text[0]) # put at the beginning of line
        # call again without first letter
        root.after(250, add_letter, text[1:])

# --- main ---

root = Tk()
lb = Text(root)
lb.pack()

text = ''.join(reversed("Hello World of Python and Tkinter"))
# first call after 250ms 
root.after(250, add_letter, text)

root.mainloop()

答案 1 :(得分:0)

您的代码永远不会超越while True:循环。因此,不会执行创建窗口和窗口小部件的其余代码,因此不会出现窗口。

尝试删除while循环:

from Tkinter import *
import time

for message in "Hello World":
    time.sleep(.5)

root = Tk()
lb = Listbox(root, height=3)
lb.pack()
lb.insert(END, message)
lb.insert(END,"second entry")
lb.insert(END,"third entry")

root.mainloop()

现在你的代码将遍历字符串中的字符,每个字符睡眠0.5秒。然后将创建并显示窗口和小部件。

答案 2 :(得分:0)

发布的代码将被卡在无限循环(while True)中,在“Hello World”中每个角色一遍又一遍地沉睡.5秒

第一个问题是While和sleep,两者都是不必要的。如果你想要这些字母,那么你就是在正确的轨道上,因为字符串是Python中的char列表

我相信你想要的东西如下:

import Tkinter

root = Tkinter.Tk()
lb = Tkinter.Listbox(root, height=3)
lb.pack()
for message in "Hello World":
    lb.insert(Tkinter.END, message)

lb.insert(Tkinter.END, "second last entry")
lb.insert(Tkinter.END, "THE last entry")
lb.config(height=20)
root.mainloop()

注意配置调整大小,否则我们只能看到超出H e l的元素,如果我们点击列表并使用箭头键滚动。以下内容可以帮助您了解如何让列表框调整大小:)

How to fit Tkinter listbox to contents