我第一次尝试使用 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)
希望对您有所帮助!
添加回答
举报
0/150
提交
取消