gpt4 book ai didi

python - 如何实时更新tkinter标签文本

转载 作者:行者123 更新时间:2023-12-04 00:52:27 29 4
gpt4 key购买 nike

我有一个应用程序可以获取光标所在像素的 css3 颜色,我想使用 tkinter 在一个小窗口中显示文本。我以下是我的代码的 tkinter 部分:

import pyautogui, PIL
import tkinter as tk

def cursorpixel():
x,y = pyautogui.position()
pixel = (x,y,x+1,y+1)
return pixel

def grabColor(square, max_colors=256):
img=PIL.ImageGrab.grab(square)
color = img.getcolors(max_colors)
return color

def main():
root=tk.Tk()
root.minsize(150, 50)
color = tk.Label(root,
text= grabColor(cursorpixel()),
fg = "black",
font = "Arial").pack()
root.mainloop()

while __name__ == "__main__":
main()

这按我的意愿工作,没有每当我的光标在屏幕上移动时更新标签文本的功能。它在启动应用程序时工作一次并且标签文本保持不变。我该怎么做才能让标签文本在我的光标移动时更新?我正在使用 python 3.7

谢谢

最佳答案

将变量赋给text 参数没有帮助,因为即使变量的值发生变化,也不会反射(reflect)在标签中。这是我的方法(这只是许多可能方法中的一种)

import pyautogui, PIL
import tkinter as tk
from threading import Thread

def cursorpixel():
x,y = pyautogui.position()
pixel = (x,y,x+1,y+1)
grabColor(pixel)

def grabColor(square, max_colors=256):
global color_label,root
img=PIL.ImageGrab.grab(square)
color = img.getcolors(max_colors)
color_label.config(text=color)

def refresh():
while True:
cursorpixel()

def main():
global color_label,root
root=tk.Tk()
root.minsize(150, 50)
color_label = tk.Label(root,
fg = "black",
font = "Arial")
color_label.pack()
Thread(target=refresh).start()
root.mainloop()

if __name__ == "__main__":
main()

注意事项

  • 我改用多线程并创建了一个函数 refresh(),它在无限循环中触发 cursorpixel()
  • 我从 cursorpixel() 调用了 grabColor() 函数,并将 pixel 作为参数。
  • 我使用了 color_label.config() 方法来更改标签中的文本,您也可以使用 color_label['text'] 或者分配一个 textvariable var = StringVar() 到标签,然后在上面使用 var.set()
  • 我不确定将 __name__='__main__' 放在 while 循环中是否是一个好的选择,因为如果没有,您将无法关闭窗口终止任务,每次您尝试这样做时都会弹出新任务。

关于python - 如何实时更新tkinter标签文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65486595/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com