当前位置: 首页 > 知识库问答 >
问题:

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

唐阳飇
2023-03-14

我有一个带有两个按钮的tkinter应用程序<代码>运行应用程序存储数据。我不想让最终用户有机会单击存储数据,如果他没有先单击运行应用程序

因此,按钮存储数据需要在首先单击按钮运行应用程序后取消禁用。

在下面的代码中,我创建了一个检查器函数,它应该在上面完成,但是存储数据按钮总是处于禁用状态。

这是我的代码:

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()

共有3个答案

艾跃
2023-03-14

如果数据:

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

程城
2023-03-14

使用-

Button(root,state= DISABLED) 

这将禁用。

然后-

Button(root,state= NORMAL)

这将启用按钮

不要使用“”或“”。用大写字母写就行了

师曦
2023-03-14

最初应禁用这两个按钮。

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

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

下面是一个修改后的示例:

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()
 类似资料:
  • 问题内容: 我正在 Angular2 应用程序上工作,我需要显示-但是是 HTML 元素。正确的方法是什么? 更新 请注意,这会阻止使用选项,而不是完全渲染。 该 打字稿 组件有一个方法,看起来像这样: 我实际上需要防止元素被单击,而不仅仅是与 CSS 一起出现。我以为我首先需要潜在地绑定到属性,但这是不正确的,因为锚元素没有属性。 我查看并考虑过使用,但是这妨碍了我的工作方式-这是要求的一部分。

  • 我正在开发一个Angular2应用程序,我需要显示—但是<code>禁用<code>一个<code> 更新 请注意,这将阻止使用而不渲染 ,但是这妨碍了我的< code>cursor: not-allowed风格的工作——这是需求的一部分。

  • 问题内容: 即使在使用Java Swing一年以上之后,对我来说,它仍然像魔术一样。如何正确使用BufferStrategy,尤其是方法? 我想添加一个JFrame和一个Canvas,然后进行绘制。我还希望能够调整()画布的大小。每次我调整Canvas的大小时,似乎都会被浪费掉,或者变得毫无用处,因为在上使用并没有真正做任何事情。另外,它具有怪异的不确定性行为,我不知道如何正确同步它。 这就是我的

  • 问题内容: 我想在Linux上使用该机制。我希望我的应用程序知道何时更改了文件。能否请您提供给我一个示例,该怎么做? 问题答案: 文档(来自具有inotify的Monitor文件系统活动) 在C API 提供了三个系统调用来构建各种文件系统监视器: 在内核中创建子系统的实例,并在成功和失败时返回文件描述符。与其他系统调用一样,如果失败,请检查诊断。 顾名思义,它增加了一块 手表 。每个监视都必须提

  • 问题内容: 需要帮助,以了解如何在UIKit中使用prepareForReuse()。该文件说 您只应重置与内容无关的单元格属性,例如Alpha,编辑和选择状态 但是如何重置单个属性属性(例如isHidden)呢? 假设我的单元格有2个标签,我应该在哪里重置: 标签文本 label.numberOfLines label.isHidden 我的tableView(_:cellForRowAt :)

  • 一段时间以来,我一直试图将我的tableview工作作为一种电子表格,通过背景线程进行更新,当单元格更新时,它会亮起几秒钟(更改样式),然后返回到原始样式。我已经知道,我不能直接在表格单元格中存储和设置样式,我需要某种支持类来保存这些数据。但是tableview“重用”单元格(使用相同的单元格处理不同的数据)的行为真的很奇怪。当所有单元格都适合屏幕时,它对我来说完美无瑕,但一旦我放置大约100个单