【问题标题】:Window does not appear using tkinter GUI for Python使用 Python 的 tkinter GUI 不会出现窗口
【发布时间】:2017-07-18 16:57:08
【问题描述】:

所以我有一个简单的问题,但我不知道出了什么问题,所以看看:

from tkinter import *
from time import sleep
root = Tk()
l1 = Label(root, text="Ok")
l1.pack()
sleep(5)
l2 = Label(root, text="Great")
l2.pack()
sleep(10)
l3 = Label(root, text="Nice")
l3.pack()
root.mainloop()

我想做的就是制作一个窗口,然后一个接一个地显示这些标签,这样窗口就会弹出 l1,5s 后 l2 也会出现,然后再过 5s l3 应该出现。相反,我在 10 秒内根本看不到这个窗口,然后它同时出现了所有标签。有人可以帮我解决这个问题吗?

【问题讨论】:

  • 在调用主循环之前不会更新主窗口。如果您希望标签一个接一个出现延迟,请了解如何使用root.after()
  • 你能给我举个例子吗?
  • 用谷歌搜索教程怎么样?

标签: python tkinter label


【解决方案1】:

首先,不要使用from tkinter import *

来自answer

from Tkinter import * 将 Tkinter 中的每个暴露对象导入到您当前的命名空间中。 import Tkinter 在你的命名空间中导入“命名空间”Tkinter,import Tkinter as tk 做同样的事情,但在本地将它“重命名”为“tk”以节省你的输入

你只想要一个模块的一个对象,你可以使用from module import objectfrom module import object as whatiwantittocall

不鼓励from module import *,因为您可能会不小心隐藏(“覆盖”)名称,并且可能会丢失属于哪个模块的对象。

现在对于您的问题,您需要使用 root.after(timeInMillisecond, functionToCall) 并在函数中添加标签:

import tkinter as tk
root = tk.Tk()

button = tk.Button(root, text="Quit", command=root.destroy)
button.pack()

l1 = tk.Label(root, text="Ok")
l1.pack()


def add_label():
    l1 = tk.Label(root, text="Ok")
    l1.pack()
    root.after(500, add_label)

root.after(500, add_label)
root.mainloop()

PS : 如果有 1500+ 声望的人可以添加标签“root.after”或类似的东西,这是问题的重点

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-29
    • 2012-02-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-13
    相关资源
    最近更新 更多