python - 制作一个等待参数更改的函数,由按钮触发

标签 python tkinter

下面是一个没有意义的程序,但是我想在更大的代码中做一些类似的事情。调用了一个函数,我希望它等待参数发生变化,该变化由按钮触发。运行这段代码,当按下 OK 按钮时,它不允许按下另一个按钮,它会卡住。同样在任何事情之前,我得到错误:在全局声明之前分配了名称'boton'。谢谢阅读。萨鲁多斯。

from Tkinter import *
import time
master = Tk()

def callback():
    w1['text']="this"
    while boton==0:
        time.sleep(1)
    w1['text']="and then this"

def switch():
    if boton==0:
        global boton
        boton=1
    if boton==1:
        global boton
        boton=0

boton=0
w1 = Label(master, text="")
w1.grid(row=0, column=0)
e1 = Entry(master)
e1.grid(row=0, column=1)
b = Button(master, text="OK", command=callback)
b.grid(row=1, column=0)
b2 = Button(master, text="switch", command=switch)
b2.grid(row=1, column=1)

mainloop()

最佳答案

你有一些问题,两个大问题正在中断 Tkinter mainloop()

当您按下 OK 时,您的程序会陷入一个永远无法中断的 while 循环。请记住,Tkinter 在单个线程上运行,任何时候您创建一个循环,它都会阻止 mainloop() 表单工作,直到该循环被打破。为了解决这样的问题,我们可以使用 after() 方法来安排和事件作为 mainloop() 的一部分发生。阻止 mainloop() 的第二个问题是 sleep() 方法。在时间结束之前,这将产生相同的效果。

我们还需要确保您使用的是 if/else 语句,因为您的 Switch() 您的 if 语句将始终产生第二个文本。

有了这些,我们现在需要做的就是稍微清理一下。

我们应该做 import Tkinter as Tk 而不是 from Tkinter import *。这将使我们不会覆盖来自其他导入或我们创建的变量的任何方法。

您不需要在每个 if 语句中执行 global。您只需要将它放在函数的顶部即可。

看看下面的代码。

import Tkinter as tk


master = tk.Tk()

def callback():
    global boton, w1
    w1.config(text="this")
    if boton == 0:
        master.after(1000, callback)
    else:
        w1.config(text="and then this")

def switch():
    global boton
    if boton==0:
        boton=1
    else:
        boton=0

boton=0
w1 = tk.Label(master, text="")
w1.grid(row=0, column=0)
e1 = tk.Entry(master)
e1.grid(row=0, column=1)
tk.Button(master, text="OK", command=callback).grid(row=1, column=0)
tk.Button(master, text="switch", command=switch).grid(row=1, column=1)

master.mainloop()

关于python - 制作一个等待参数更改的函数,由按钮触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51660795/

相关文章:

python - 模糊字符串与词项权重匹配

python - Perl/Tk 的滚动伪小部件是否有 tkinter 等效项?

python - 展平其他字典列表的字典的字典

python - 赛通 "Cannot assign default value to fields in cdef classes, structs or unions"

python - 在箱线图中标记异常值 - Python

Python打包: build requirements in pyproject. toml VS setup_requires

python - 如何从 Tkinter 文本小部件读取文本

Python3 Tkinter - 将输入(y)写入子进程的控制台

python - 内容更改时停止文本小部件滚动

python - 需要帮助每分钟更新一个 tkinter 函数