在 tkinter 中禁用按钮的正确方法是什么?
What is a proper way to disable a button in tkinter?
我有一个带有 2 个按钮的 tkinter 应用程序。 Run application
和 Store 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()
我有一个带有 2 个按钮的 tkinter 应用程序。 Run application
和 Store 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()