Tkinter从列表创建按钮,每个按钮都有其自己的功能
问题描述:
我想从列表创建按钮并为每个按钮分配一个基于列表项的功能。我在下面尝试,按钮不响应点击。我看到一个解决方案,其中使用lambda函数将参数传递给一个函数,但我希望单独的函数。 Anaconda的使用Python 3.5Tkinter从列表创建按钮,每个按钮都有其自己的功能
import tkinter as tk
def North():
print('slected North')
def South():
print('slected South')
def East():
print('slected East')
def West():
print('slected West')
lst = ['North','South','East','West']
win = tk.Tk()
win.title = 'Compass'
for col,Direction in enumerate(lst):
butName = tk.Button(win, text = Direction, command = Direction)
butName.grid(row = 1, column = col)
win.mainloop()
答
你的列表中包含串;它需要包含功能
lst = [North,South,East,West]
答
更快,更好:
import tkinter as tk
def onbutton_click(label):
print('selected ', label)
lst = ['North','South','East','West']
win = tk.Tk()
win.title = 'Compass'
for col,Direction in enumerate(lst):
butName = tk.Button(win, text=Direction, command=lambda e=Direction: onbutton_click(e))
butName.grid(row=0, column=col)
win.mainloop()
或用自己的方式:
import tkinter as tk
def North():
print('slected North')
def South():
print('slected South')
def East():
print('slected East')
def West():
print('slected West')
lst = [North, South,East, West]
win = tk.Tk()
win.title = 'Compass'
for col,Direction in enumerate(lst):
butName = tk.Button(win, text=Direction.__name__, command=Direction)
butName.grid(row=0, column=col)
win.mainloop()
我还设置了一排为0的原因有没有必要将1.