[英]How to update tkinter label text in real time
I have an application that gets the css3 colour of the pixel your cursor is on, and I would like to use tkinter to display the text in a little window. 下面是我的代码的 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()
这可以按我的意愿工作,只要我的 cursor 在屏幕上移动,就无需更新 label 文本的 function 。 它在启动应用程序时工作一次,并且 label 文本保持不变。 每当我的 cursor 移动时,我将如何做到这一点,以便 label 文本更新? 我正在使用 python 3.7
谢谢
将变量赋值给text
参数并没有帮助,因为即使变量的值发生变化,它也不会反映在 label 中。 这是我的方法(这只是许多可能的方法之一)
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()
。pixel
为参数的 cursorpixel cursorpixel()
) 中调用了grabColor()
function。color_label.config()
方法更改 label 中的文本,您也可以使用color_label['text']
或者将textvariable
var = StringVar()
分配给 label 然后使用var.set()
它。__name__='__main__'
放在while
循环中是否是一个不错的选择,因为您将无法在不终止任务的情况下关闭 window,每次您尝试这样做时都会弹出新的。回答\
我将.after
命令添加到grabColor()
function 中,并结合了cursorpixel
和grabColor()
函数。 我使用.config
来更新颜色。 这是代码:
import pyautogui, PIL
from tkinter import *
root=Tk()
root.minsize(150, 50)
colortext = Label(root)
colortext.pack()
def grabColor():
x,y = pyautogui.position()
pixel = (x,y,x+1,y+1)
img=PIL.ImageGrab.grab(bbox=pixel)
color = img.getcolors()
colortext.config(text=str(color))
root.after(100, grabColor)
grabColor()
root.mainloop()
来源/其他资源
如何使用 Tkinter 创建自动更新的 GUI?
您可以使用after()
定期获取颜色:
import tkinter as tk
from PIL import ImageGrab
def grab_color(label):
x, y = label.winfo_pointerxy()
color = ImageGrab.grab((x, y, x+1, y+1)).getpixel((0, 0))
label.config(text=str(color))
label.after(100, grab_color, label)
def main():
root = tk.Tk()
color_label = tk.Label(root, width=20)
color_label.pack(padx=10, pady=10)
grab_color(color_label)
root.mainloop()
if __name__ == "__main__":
main()
请注意,使用winfo_pointerxy()
代替pyautogui.position()
以减少对外部模块的依赖。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.