亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

動態創建按鈕會導致命令觸發

動態創建按鈕會導致命令觸發

慕桂英4014372 2022-11-18 18:22:18
我第一次嘗試使用 tkinter 時遇到了麻煩。我需要創建很多按鈕,因此為了使代碼看起來更簡潔一些,我使用了 for 循環和動態變量名稱來創建每個按鈕。這樣做的問題是,當創建每個按鈕時,都會為該按鈕運行 btnClick(x)。所以我有 PING!1,平安!2,...在我的終端。最重要的是,按鈕在創建窗口后沒有響應(單擊它們沒有響應)。有沒有辦法使用 for 循環/動態變量并讓按鈕工作,或者是為每個按鈕寫出來的唯一方法?from tkinter import *window = Tk()btns = {}btnNames = ["Description",          "Tags",                     "Display",              "Armor",             "Hit Points",           "Damage",                   "Speed",                "Ability Scores",             "Saving Throws",        "Skills",                   "Vulnerabilities",      "Resistances",             "Immunities (Damage)",  "Immunities (Conditions)",  "Senses",               "Languages",             "Traits",               "Actions",                  "Reactions",            "Paragon Actions",             "Ledgendary Actions",   "Lair Actions",             "Notes"]def StartWindow():    # set Basics    window.title("Monster Maker")    window.geometry('900x600')    # Set Icon    window.iconbitmap("Sources/Icon.ico")    MonsterMaker()    # Run window    window.mainloop()def MonsterMaker():    for x in range(23):        name = "btn" + str(x)        btns[name] = Button(window, text=btnNames[x], command=btnClick(x), width=20, height=1)        btns[name].grid(column=0, row=x)def btnClick(index):    print("PING! " + str(index))if __name__ == "__main__":    StartWindow()```
查看完整描述

1 回答

?
DIEA

TA貢獻1820條經驗 獲得超2個贊

問題是您btnClick在創建按鈕時調用該函數,但您想將該函數作為參數傳遞。而是使用 lambda:

btns[name] = Button(window, text=btnNames[x], command=lambda arg=x: btnClick(arg), width=20, height=1)

希望對您有所幫助!


查看完整回答
反對 回復 2022-11-18
  • 1 回答
  • 0 關注
  • 111 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號