单击后更改按钮的活动状态

时间:2019-07-15 11:50:53

标签: python button tkinter

我的python tkinter GUI有两个类。 mainClass和subClass。 subClass是从mainClass合成的,以创建GUI。有两个按钮。启动和停止按钮。启用了启动按钮的正常状态,并且禁用了停止按钮的状态。当我按下开始按钮时,停止按钮状态应更改为启用状态,开始按钮状态应变为禁用状态,以避免多次单击。有什么建议吗?

class mainClass:
    def __init__(self, master, queue,  startCommand, stopCommand, guiClient)
        self.guiClient= guiClient

        btn_start = tkinter.Button(master, text='Start', command=self.guiClient.startCommand)
        btn_start .place(x=500, y=300)

        btn_stop = tkinter.Button(master, text='Stop',state=tkinter.DISABLED, command=self.guiClient.stopCommand)
        btn_stop .place(x=500, y=400)
#---rest of the codes----


subClass:
    def __init__(self, master):
        self.master = master
        self.myGui = mainClass(master, self.queue, self.startCommand, self.stopCommand, guiClient=self)
#---rest of __init__ here

# i tried following functions. got error when pressed start button.
# error was mainClass' object has no attribute 'btn_start

    def startCommand(self):

        self.myGui.btn_stop .config(state="normal")
        self.myGui.btn_start .config(state="disabled")

    def stopCommand(self):
        self.myGui.btn_stop .config(state="disabled")
        self.myGui.btn_start .config(state="normal")

2 个答案:

答案 0 :(得分:0)

您遇到的错误是在告诉您确切的问题是什么。它说mainClass对象没有btn_start属性,这是事实。该类具有名为btn_start local 变量,但没有属性。

您需要将小部件另存为类属性,然后您的代码才能运行:

self.btn_start = tkinter.Button(...)
...
self.btn_stop = tkinter.Button(...)

这样,它将起作用:

def startCommand(self):

    self.myGui.btn_stop .config(state="normal")
    self.myGui.btn_start .config(state="disabled")

答案 1 :(得分:-1)

要禁用按钮,您可以使用

btn_start['state'] = 'disabled'

btn_start.config(state="disabled")

您可以通过功能使用它。 示例:

btn_start = tkinter.Button(master, text='Start', command=btn_start_onclick)
...
def btn_start_onclick():
    btn_start.config(state="disabled")
    self.guiClient.startCommand()

对不起,我刚刚看到您遇到错误。 您可以在初始化之前定义按钮。

class mainClass:
    btn_start = None
    ...
    self.btn_start = tkinter.Button(master, text='Start', command=btn_start_onclick)

我希望它能起作用。