python - 如何实时更新 tkinter 标签文本
问题描述
我有一个应用程序可以获取光标所在像素的 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
参数并没有帮助,因为即使变量的值发生变化,它也不会反映在标签中。这是我的方法(这只是许多可能的方法之一)
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()
- 我已经调用了作为参数的
grabColor()
函数。cursorpixel()
pixel
- 我已经使用该
color_label.config()
方法更改标签中的文本,您也可以使用color_label['text']
或分配textvariable
var = StringVar()
给标签然后使用var.set()
它。 - 我不确定将其置于循环中是否是一个好选择,
__name__='__main__'
因为while
您将无法在不终止任务的情况下关闭窗口,每次尝试这样做时都会弹出新窗口。
推荐阅读
- node.js - 在 MongoDB 上插入的数据仅使用 NodeJS 保存 ID
- qml - QMl 滚动条按需
- shopify - 如何根据shopify中的选择ID显示隐藏选择下拉列表
- python-3.x - 如何使用 MechanicalSoup 中的元素 id 选择提交按钮名称?
- javascript - 如何在我的函数中使用多个过滤器
- javascript - 用于获取与参数匹配的所有 SQLite 元素的 Express API 返回未定义
- amazon-web-services - Terraform 创建安全组权限
- php - 你能帮我吗,我不明白
- coq - 如何使 subst 在 Coq 中保持最漂亮的名称(按字典顺序至少一个)?
- constants - Julia 中的任意精度浮点类型