如何将Canvas Button状态设置为normal(Python 3)

时间:2016-11-16 00:39:19

标签: python-3.x button tkinter state

我需要一个最初禁用的按钮,稍后会在事件上启用该按钮。我有一个相当大的应用程序正在工作,除了我无法将状态更改为按钮。请不要告诉我,我需要完全恢复代码。这是我所使用的显着结构的所有代码中的条带。 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()

1 个答案:

答案 0 :(得分:0)

VSM_Button = Button(frame, text='Disabled', width = 10, state = DISABLED).pack()

您没有将按钮本身分配给VSM_Button;您分配了调用pack()的结果,即无。您需要在与作业分开的一行上进行打包。

绝对需要global VSM_Button语句。没有它,就无法访​​问Application.__init__()之外的按钮。