【问题标题】:How to insert a loop function into a label in Tkinter (self_updatable)如何将循环函数插入到 Tkinter 中的标签中(self_updatable)
【发布时间】:2021-07-12 18:21:02
【问题描述】:

我有这个循环运行并更改 x,我应该如何将它放入 Tkinter 标签中?提前致谢。

from tkinter import *
import time

root = Tk() 

def x_loop():
    x = 0
    while x <= 100:
        time.sleep(2)
        x = x + 1
        
l = Label(root, text = x_loop).pack(pady = 20)

root.mainloop()

【问题讨论】:

    标签: python-3.x loops tkinter


    【解决方案1】:

    Tkinter 类似于 while 循环,这是因为 while 循环在其完成之前返回到主循环,因此您的应用程序在此期间无法工作。

    Tkinter 为此提供了.after(*ms,*func) 方法并在下面使用。 此外,对于更改 tk.Label 的文本,您可以采用多种方式。我认为最好的方法是使用继承选项 textvariable

    文本变量需要是tk.*Variable,并在设置var 后立即配置tk.Label

    查看下面的工作示例:

    import tkinter as tk
    
    x = 0
    def change_text():
        global x
        var.set(x)
        x +=1
        root.after(100,change_text)#instead of a while loop that block the mainloop
    
    root = tk.Tk()
    var = tk.StringVar()
    lab = tk.Label(root, textvariable=var)
    lab.pack()
    change_text()
    
    root.mainloop()
    

    【讨论】:

    • 只使用lab.config(text=&lt;new text&gt;)就容易多了
    • @MarkasPovilaika ~ 如果正确回答了您的问题,请考虑将其标记为正确答案。点击here了解如何:D
    • @TheLizzard 谢谢。你能用更简单的方法展示一个完整的例子吗?
    • @Atlas435 我正在尝试使用 ax 和 y 变量“lab = tk.Label(root, textvariable = var).pack(x=10,y=10)”来打包实验室,但是我得到了此错误:_tkinter.TclError:错误选项“-x”:必须是 -after、-anchor、-before、-expand、-fill、-in、-ipadx、-ipady、-padx、-pady 或 -side。有解决办法吗?
    • .pack()dosent 使用 xy 坐标,.place() 使用。 Check out, for more
    【解决方案2】:

    您可以使用这种更简单的方法,而不是像 @Atlas435 那样使用 StringVar

    import tkinter as tk
    
    def x_loop():
        global x
        if x <= 100:
            x += 1
            # Update the label
            label.config(text=x)
            # after 2000 ms call `x_loop` again
            root.after(2000, x_loop)
    
    x = 0
    root = tk.Tk()
    
    label = tk.Label(root, text=x)
    label.pack(pady=20)
    
    # STart the loop
    x_loop()
    
    root.mainloop()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-07-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多