Tkinter不更新游标

时间:2018-06-24 09:41:17

标签: python tkinter cursor windows-10

我正在尝试在程序繁忙时更新光标。

此代码段有效:

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()是个坏主意)

任何建议都将受到欢迎。

感谢您的时间。

1 个答案:

答案 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()