在 tkinter 中禁用按钮的正确方法是什么?

What is a proper way to disable a button in tkinter?

我有一个带有 2 个按钮的 tkinter 应用程序。 Run applicationStore data。如果最终用户没有先点击 Run application,我不想让他有机会点击 Store data

所以按钮 Store data 需要在按钮 Run application 首先被点击后取消禁用。

在我下面的代码中,我创建了一个 checker 函数,它应该在上面执行,但是 Store data 按钮始终处于禁用状态。

这是我的代码:

import os
from tkinter import *

owner = ['Spain', 'United Kingdom', 'Malaysia']

path_spain = r"c:\data\FF\Desktop\PythonFolder\spain_software.py"
path_uk = r"c:\data\FF\Desktop\PythonFolder\uk_software.py"
path_malaysia = r"c:\data\FF\Desktop\PythonFolder\malaysia_software.py"

window = Tk()
window.title("Running Python Script")  # Create window
window.geometry('550x300')  # geo of the window

data = []
#Confirmation function
def store():
    data.append(dd_owner.get())
    print(data)
    checker()

def run():
    if dd_owner.get() == "Spain":
        print("spain")
        # os.system('python path_spain')
    elif dd_owner.get() == "United Kingdom":
        os.system('python path_uk')

    elif dd_owner.get() == "Malaysia":
        os.system('python path_malaysia')

def update_button(_):
    run_button.config(text="Run application {}".format(dd_owner.get()))

# These are the option menus
dd_owner = StringVar(window)
w = OptionMenu(window, dd_owner, *owner, command=update_button)
w.grid(row=0, column=1)

#These are the buttons
store_button =Button(window, text="Store data!",command=store)
store_button.grid(column=0, row=31)

run_button = Button(window, text="Run application {}".format(dd_owner.get()), bg="blue", fg="white",command=run)
run_button.grid(column=0, row=2)

# These are the titles
l1 = Label(window, text='Select Owner', width=15)
l1.grid(row=0, column=0)

def checker():
    if data:
        store_button.configure(state='normal')
    else:
        store_button.configure(state='disabled')


checker()

mainloop()

使用-

Button(root,state= DISABLED) 

这将禁用。

然后-

Button(root,state= NORMAL)

这将启用按钮

不要使用“”或“”。只需大写

if data:

是什么意思

数据是一个列表。您不能在 if 语句中将数据用作布尔值。

最初应禁用这两个按钮。

然后,如果选择所有者,启用“运行”按钮。

如果单击“运行”按钮,启用“存储”按钮。

下面是修改后的例子:

import os
from tkinter import *

owner = ['Spain', 'United Kingdom', 'Malaysia']

path_spain = r"c:\data\FF\Desktop\PythonFolder\spain_software.py"
path_uk = r"c:\data\FF\Desktop\PythonFolder\uk_software.py"
path_malaysia = r"c:\data\FF\Desktop\PythonFolder\malaysia_software.py"

window = Tk()
window.title("Running Python Script")  # Create window
window.geometry('550x300')  # geo of the window

data = []
#Confirmation function
def store():
    owner = dd_owner.get()
    if owner and owner not in data:
        data.append(owner)
        print(data)

def run():
    if dd_owner.get() == "Spain":
        print("spain")
        # os.system('python path_spain')
    elif dd_owner.get() == "United Kingdom":
        os.system('python path_uk')
    elif dd_owner.get() == "Malaysia":
        os.system('python path_malaysia')
    # enable store button
    store_button.config(state="normal")

def update_button(_):
    # update text and enable the button
    run_button.config(text="Run application {}".format(dd_owner.get()), state="normal")

# These are the option menus
dd_owner = StringVar(window)
w = OptionMenu(window, dd_owner, *owner, command=update_button)
w.grid(row=0, column=1)

#These are the buttons
store_button =Button(window, text="Store data!", command=store, state="disabled") # initially disabled
store_button.grid(column=0, row=31)

run_button = Button(window, text="Run application {}".format(dd_owner.get()),
                    bg="blue", fg="white",command=run, state="disabled") # initially disabled
run_button.grid(column=0, row=2)

# These are the titles
l1 = Label(window, text='Select Owner', width=15)
l1.grid(row=0, column=0)

mainloop()