Tkinter从列表中创建按钮,每个按钮都有自己的功能

时间:2017-02-11 23:16:01

标签: python-3.x button tkinter

我想从列表中创建按钮,并根据列表项为每个按钮分配一个功能。我在下面试过,按钮没有响应点击。我看到使用lambda函数将参数传递给函数的解决方案,但我想要单独的函数。在Anaconda中使用Python 3.5

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()

2 个答案:

答案 0 :(得分:0)

您的列表包含字符串;它需要包含功能

lst = [North,South,East,West]

答案 1 :(得分: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。