【问题标题】:What is a proper way to disable a button in tkinter?在 tkinter 中禁用按钮的正确方法是什么?
【发布时间】:2021-06-03 08:45:43
【问题描述】:

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

因此,首先单击按钮 Run application 后,需要取消禁用按钮 Store data

在下面的代码中,我创建了一个应该在上面执行的 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()

【问题讨论】:

  • 其实你应该启用run()里面的按钮,如果需要的条件匹配并且checker()不是必须的。
  • @Atlas435 不,它没有。
  • @acw1668 你能用代码告诉我吗?
  • @TangerCity 将 store_button.configure(state='normal') 放在您的 run 函数中。
  • 如果没有选择所有者,即使点击运行按钮,商店按钮是否应该保持禁用?

标签: python tkinter button


【解决方案1】:

最初应该禁用这两个按钮。

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

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

下面是一个修改过的例子:

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】:

使用-

Button(root,state= DISABLED) 

这将禁用。

然后-

Button(root,state= NORMAL)

这将启用按钮

不要使用 '' 或 ""。只写大写

【讨论】:

  • 什么意思?
【解决方案3】:

if data:是什么意思

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

【讨论】:

    猜你喜欢
    • 2012-07-25
    • 1970-01-01
    • 2020-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-05-10
    • 2014-06-26
    • 1970-01-01
    相关资源
    最近更新 更多