如果有 def 工作,如何禁用按钮?

How to disable button if there is a def working?

我已经尝试使用下面的代码来阻止按钮,因为如果在 def start 工作时单击它,它会破坏整个应用程序。该按钮同时调用 defs start 和 block,尽管函数 start 根本不起作用。

问题是我不能把 button_start.config(state=tk.DISABLED) 放在 def start(): 中,因为它每 1000 毫秒改变一次并且按钮奇怪地跳动。

我已经搜索过了,这是我的处理思路。我不是专业程序员,这可能很愚蠢,所以我指望你的经验。

root = tk.Tk()
def stop_app():
    button_start.config(state=tk.NORMAL)


def start(): 
    #something working here...
    root.after(1000, start)
def block():
    button_start.config(state=tk.DISABLED)

button_start = tk.Button( root, command=start and block)
button_start.place(x=250, y=235)

button_stop = tk.Button(root, command=stop_app)
button_stop.place(x=305, y=235) 
    

行,

button_start = tk.Button(root, command=start and block)

有错误,command=start and block。同一个按钮不能有 2 个功能。

你可以做的是:

def block():
    button_start.config(state=tk.DISABLED)

def start():
    block()

或相同但行数较少的内容:

def start():
    button_start.config(tk.DISABLED)

并将错误行更改为:

button_start = tk.Button(root, command=start)

我认为你可能把事情搞得太复杂了。下面的代码只是根据第一个 Button 的状态切换两个 Button 的状态,因此它们总是彼此相反。

import tkinter as tk


root = tk.Tk()
root.geometry('350x350')

def start_app():
    if button_start.cget('state') == tk.NORMAL:
        button_start.config(state=tk.DISABLED)
        button_stop.config(state=tk.NORMAL)

def stop_app():
    if button_stop.cget('state') == tk.NORMAL:
        button_stop.config(state=tk.DISABLED)
        button_start.config(state=tk.NORMAL)

button_start = tk.Button(root, text='Start', command=start_app, state=tk.NORMAL)
button_start.place(x=250, y=235)

button_stop = tk.Button(root, text='Stop', command=stop_app, state=tk.DISABLED)
button_stop.place(x=305, y=235)

root.mainloop()

在单击 开始 按钮之前和之后显示的屏幕截图: