在tkraise之后循环?

2024-04-24 16:52:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图使用Tkinter创建一个简单的表单,一旦按下按钮,它将执行一个操作。我该如何“倾听”按钮的按下?

我创建了一个回调方法,当按下按钮时,它将更改状态变量,但无法确定一旦按下按钮,如何在主循环中引起操作。

我尝试使用while循环(在绘制按钮之后)检查状态变量的值,但是当我这样做时,循环会执行,但我的GUI元素不会出现在屏幕上。(如果我使用for循环,它们确实出现,但我认为这不会起作用。)

我如何“等待”状态更改为“状态”变量?或者是有一种内置的方法来完成我所缺少的?

(实际代码稍微复杂一些——类似于答案here(但没有所有按钮都在一个页面上)中的方法),但我认为原理仍然相同(如何侦听对象变量中的状态变化)。)

from Tkinter import * 

master = Tk()

def callback():
    status = 0
    print status

status = 1

myB = Button(text="Enter", command=callback)
myB.pack()
print status

# while True:
#   if status == 0:
#       print "button was clicked"

mainloop()

Tags: 方法元素表单屏幕tkinter状态statuscallback
1条回答
网友
1楼 · 发布于 2024-04-24 16:52:47

您可以使用after(time_ms, function_name)重复调用函数(但不使用while True)。在

import Tkinter as tk

#  - functions  -

def check():
    if status != 1:
        print 'check:', status

    # check again after 100ms
    master.after(100, check) # filename without ()

def callback():
    global status # because you use `=`

    status = 0

    print 'callback:', status

#  - main  -

status = 1

master = tk.Tk()

myB = tk.Button(master, text="Enter", command=callback)
myB.pack()

# check after 100ms
master.after(100, check) # filename without ()
# or call immediately
# check()

tk.mainloop()

或者您可以使用objectIntVarStringVar等和trace在对象改变值时调用函数。在

顺便说一句:Label可以在StringVar更改值时自动更改其文本-它不需要trace。在

^{pr2}$

参见:The Variable Classes (BooleanVar, DoubleVar, IntVar, StringVar)

相关问题 更多 >