我需要一个最初禁用的按钮,稍后会在事件上启用该按钮。我有一个相当大的应用程序正在工作,除了我无法将状态更改为按钮。请不要告诉我,我需要完全恢复代码。这是我所使用的显着结构的所有代码中的条带。 ReadPort实际上是从'之后调用的。但它按下按钮模拟,这里。
我已经阅读了有关此主题的所有帮助,并尝试了答案。 Python语句和每个产生的错误都在这个完整的应用程序中,在所有尝试更改按钮状态时失败。请让我知道如何解决这个问题。
#!/usr/bin/python 3
from tkinter import *
def ReadPort():
global VSM_Button
# AttributeError: 'NoneType' object has no attribute 'config'
## VSM_Button.config(state="normal")
# AttributeError: 'NoneType' object has no attribute 'configure'
## VSM_Button.configure(state="normal")
# TypeError: 'NoneType' object does not support item assignment
## VSM_Button['state'] = 'normal'
# AttributeError: 'NoneType' object has no attribute 'configure'
## VSM_Button.configure(state=NORMAL)
# ??? How do I set the button state to 'normal' ?
pass
class Application:
def __init__(self, master):
#global VSM_Button # seems unnecessary. Same errors in or out.
frame = Frame(master)
frame.pack()
Button(frame, text='Press Me', width = 10, command=ReadPort).pack()
VSM_Button = Button(frame, text='Disabled', width = 10, state = DISABLED).pack()
pass # end def __init__
pass # end class Application
root = Tk()
root.wm_title('Button')
app = Application(master=root)
root.mainloop()
答案 0 :(得分:0)
VSM_Button = Button(frame, text='Disabled', width = 10, state = DISABLED).pack()
您没有将按钮本身分配给VSM_Button
;您分配了调用pack()
的结果,即无。您需要在与作业分开的一行上进行打包。
绝对需要global VSM_Button
语句。没有它,就无法访问Application.__init__()
之外的按钮。