为了账号安全,请及时绑定邮箱和手机立即绑定

动态创建按钮会导致命令触发

动态创建按钮会导致命令触发

慕桂英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 关注
  • 89 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信