2017-02-11 8 views
0

Я хочу создать кнопки из списка и назначить каждой кнопке функцию, основанную на элементе списка. Я попробовал ниже, и кнопка не отвечает на щелчок. Я вижу решения, в которых функция лямбда используется для передачи параметра функции, но мне нужны отдельные функции. Использование Python 3.5 в AnacondaTkinter создает кнопки из списка, каждый со своей функцией

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.