2017-02-11 131 views
0

我想从列表创建按钮并为每个按钮分配一个基于列表项的功能。我在下面尝试,按钮不响应点击。我看到一个解决方案,其中使用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() 

回答

0

你的列表中包含;它需要包含功能

lst = [North,South,East,West] 
0

更快,更好:

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.