关于tkinter按钮的基本问题

1 投票
3 回答
1987 浏览
提问于 2025-04-16 18:42

我刚开始接触tkinter和图形用户界面(GUI)编程,所以这个问题可能比较基础。假设我有一组按钮供用户选择,我想要的是一个列表,里面记录用户点击了哪些按钮。简单来说,我就是想知道用户点击了哪些按钮。

3 个回答

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 方法的例子,来判断一个按钮是否被按过。

1

这里有一个不错的网站,专门讲解Python的事件,应该能给你一些指导:

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

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

无法理解如何从wxpython中的复选框列表获取数据

1

在每个按钮上,你可以设置一个命令,让它们自己添加到一个被点击按钮的列表里。

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

我不确定语法是否完全正确,但这就是基本的想法。

撰写回答