关于tkinter按钮的基本问题

时间:2011-05-31 19:47:56

标签: python user-interface button tkinter

我不熟悉使用tkinter和GUI编程,所以这可能是一个非常基本的问题。无论如何,假设我有一组按钮供用户选择,我想要的是用户点击的所有按钮对象的列表。基本上,我想知道用户点击了哪些按钮。

3 个答案:

答案 0 :(得分:1)

这是一个很好的网站,涵盖了可以指导您的Python活动:

http://effbot.org/tkinterbook/tkinter-events-and-bindings.htm

听起来你可能想要一个类似于复选框的东西,如果是这样的话:

Cannot understand how to get data from checklistbox in wxpython

答案 1 :(得分:1)

在每个按钮上,您可以设置命令将自己添加到单击按钮列表中。

clicked = []
foo = Button(root, text='bar', command=lambda self:clicked.append(self))

不确定语法是否正确,但这是基本想法。

答案 2 :(得分:1)

这是一个简单的示例,说明如何确定按钮是否已被按下。

import tkinter.ttk, functools

class Example(tkinter.Tk):

    def __init__(self, buttons):
        super().__init__()
        self.button_set = set()
        for button in range(buttons):
            button = tkinter.ttk.Button(self, text='Button '+str(button))
            button.pack()
            self.button_set.add(button)
        self.setup_buttons()
        self.bind('<Escape>', self.check_buttons)
        self.mainloop()

    def setup_buttons(self):
        for button in self.button_set:
            button['command'] = \
                functools.partial(setattr, button, 'pressed', True)
            button.pressed = False

    def check_buttons(self, event):
        for button in self.button_set:
            print('Button {} has{} been pressed.'.format(id(button),
                (' not', '')[button.pressed]))

if __name__ == '__main__':
    Example(5)

运行代码时,您可以按Escape键在控制台中输出已按下按钮的打印输出。按下按钮将其pressed属性设置为true,您可以再次打印出已按下的按钮。以编程方式,您将按照check_buttons方法中的示例来确定是否按下了按钮。