如何更新python gui?

如何更新python gui?,python,tkinter,Python,Tkinter,我想每秒钟更新一次我的gui(我其实不在乎时间,但它应该是实时的)。我得到了一个脚本,其中作为int的标签应该增加1并显示出来。但是我没有得到更改,我也想根据根的宽度放置标签,但它不会更新。只有更新是个问题,也许有人可以帮我。(我是个新手) 脚本: from tkinter import * import time c = 0 root = Tk() root.title("Real Time Plot") root.minsize(width = 200, height

我想每秒钟更新一次我的gui(我其实不在乎时间,但它应该是实时的)。我得到了一个脚本,其中作为int的标签应该增加1并显示出来。但是我没有得到更改,我也想根据根的宽度放置标签,但它不会更新。只有更新是个问题,也许有人可以帮我。(我是个新手)

脚本:


from tkinter import *
import time

c = 0
root = Tk()
root.title("Real Time Plot")
root.minsize(width = 200, height = 300)
m = root.winfo_reqwidth() / 2

root.update()
Text = Label(root, text = c)
Text.place(x =m, y = 150)
c = c + 1
print(m)

root.mainloop()

您只更新变量值,而不是标签的值。 增加标签后,需要使用c的内容更新标签:

Text.configure(text=c)
所以它变成了这样:

from tkinter import *
import time

c = 0
root = Tk()
root.title("Real Time Plot")
root.minsize(width = 200, height = 300)
m = root.winfo_reqwidth() / 2

root.update()
Text = Label(root, text = c)
Text.place(x =m, y = 150)
root.update()

time.sleep(2)
c = c + 1
Text.configure(text=c)
root.update()

print(m)

root.mainloop()

我对您的代码做了一些小的更新,比如添加了睡眠时间,以更好地显示行为。

您必须使用Python线程,它将完美地执行此操作

代码如下:

from tkinter import *
import threading
import time

def realtime_update():
    while True:
        global c, Text
        c += 1
        Text.configure(text=c+1)
        time.sleep(0.001)
        root_width = root.winfo_geometry()
        root_width = root_width.split('x')
        root_width = int(root_width[0])

        Text.place(x=root_width/2, y=150)
        time.sleep(0.01)

c = 0
root = Tk()
root.title("Real Time Plot")
root.minsize(width = 200, height = 300)
m = root.winfo_reqwidth() / 2

Text = Label(root, text = c)
Text.place(x=int(m), y = 150)
print(m)
threading.Thread(target=realtime_update, daemon=True).start()
root.mainloop()
它解决了以下问题:

  • 实时更新(精度为0.01秒)
  • 当根窗口调整大小时,标签会更改位置

  • 我已经创建了一个计时器,所以我想你可以像我那样做。希望这对你有用

    首先,创建一个StringVar:

    text=StringVar(value=“text”)

    然后用textvariable创建一个标签。 yourlabel=Label(根,textvariable=Text)

    然后创建一个函数来更新yourlabel: yourlab.set(在这里传递新值)


    因此,您的标签将具有您传递的值。因此,您可以使用self.after之类的工具每1000毫秒更新一次func。

    不工作。值从
    0
    更改为
    1
    ,并在此处停止。OP写道:“只有更新是个问题,也许有人可以帮我解决。”。提供的代码更新了该值,并清楚地说明了如何执行该操作。所以,当你评论别人提供的解决方案时,也许你应该更加小心。谈到OP,他清楚地说了一个词Realtime,我相信你错过了。另外,他说要根据根的宽度来贴标签,这也是你错过的。那么,也许你应该仔细阅读这个问题,或者至少写一个工作代码。谢谢大家的快速回复@Samaksh Gupta,我查看了你的代码,找到了一个解决宽度和高度问题的替代方法:root\u height=root.winfo\u height()root\u height=int(root\u height)只有在你的代码帮助下才可能,谢谢:)我只是想知道如何更新tkintergui,但谢谢你的回复。