我正在尝试在程序繁忙时更新光标。
此代码段有效:
import tkinter as tk
def button():
root.configure(cursor="watch")
root = tk.Tk()
root.geometry("300x500")
button_1 = tk.Button(master=root,command=button,width=10)
button_1.grid()
root.mainloop()
当我单击按钮时,光标会改变
但是此代码段失败:
import tkinter as tk
def button():
root.configure(cursor="watch")
input("Force a pause")
root = tk.Tk()
root.geometry("300x500")
button_1 = tk.Button(master=root,command=button,width=10)
button_1.grid()
root.mainloop()
仅当我使另一个窗口处于活动状态时(或在输入一些虚拟输入之后),它才会更新光标
我尝试添加
root.configure(cursor="watch")
root.update()
但是它仍然不起作用(无论如何,tk人说在回调中放置一个update()是个坏主意)
任何建议都将受到欢迎。
感谢您的时间。
答案 0 :(得分:1)
您的代码更新了游标,但只有在您的繁忙进程终止后才能完成。 因此,您可以在线程中执行繁忙的进程,以防止用户界面冻结。
import tkinter as tk
import threading
def worker():
for x in range(0, 100000):
print(x)
root.config(cursor="arrow")
def button():
root.config(cursor="watch")
threading.Thread(target=worker).start()
root = tk.Tk()
root.geometry("300x500")
root.config(cursor="arrow")
button_1 = tk.Button(master=root, command=button, width=10)
button_1.grid()
root.mainloop()