3 回答
TA貢獻(xiàn)1860條經(jīng)驗(yàn) 獲得超9個(gè)贊
將您的功能更改為:
def changeState():
pick = choose.get()
if (pick == "op2"):
button['state'] = ACTIVE #means active state
button.config(text = "ACTIVE")
else:
button['state'] = DISABLED #means disabled state
button.config(text = "Disabled")
另外,您沒有調(diào)用您的函數(shù),因此要調(diào)用它并使效果處于活動(dòng)狀態(tài),請(qǐng)?jiān)谶x項(xiàng)菜單中添加命令參數(shù),例如:
options = OptionMenu(app, choose, "op1", "op2",command=lambda _:changeState())
使用lambda _:optionmenu 命令需要傳遞一個(gè) tkinter 變量,以避免這種情況。您還可以為您的函數(shù)提供一個(gè)參數(shù),但是如果您在其他地方調(diào)用您的函數(shù),您將必須傳遞一個(gè)參數(shù),或者您也可以使用類似的參數(shù)并point=None擺脫lambda.
希望這可以清除錯(cuò)誤,如果有任何疑問,請(qǐng)告訴我。
TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
您可以在更改時(shí)command=changeState添加OptionMenu(...)調(diào)用:changeState()options
def changeState(pick):
if pick == "op2":
button['state'] = ACTIVE
button.config(text = "ACTIVE")
else:
button['state'] = DISABLED
button.config(text = "Disabled")
...
options = OptionMenu(app, choose, "op1", "op2", command=changeState)
TA貢獻(xiàn)1789條經(jīng)驗(yàn) 獲得超10個(gè)贊
知道了!
編輯:我稍微改變了第9行,刪除了button.active并替換為NORMAL,這有效。
from tkinter import *
def setLabel():
changed.set("Active")
def changeState(*args):
pick = choose.get()
if (pick == "op2"):
button['state'] = NORMAL
button.config(text = "ACTIVE")
else:
button['state'] = DISABLED
button.config(text = "Disabled")
app = Tk()
app.resizable(40,40)
choose = StringVar()
choose.set("op1")
options = OptionMenu(app, choose, "op1", "op2")
choose.trace("w", changeState)
options.pack()
button = Button(app, text = "Disabled", state = DISABLED, command = setLabel)
button.pack()
changed = StringVar()
label = Label(app, textvariable = changed, font = ("helvetica", 10))
label.pack()
app.mainloop()
添加回答
舉報(bào)
