我的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")
答案 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)
我希望它能起作用。