【问题标题】:How to determine which button is pressed out of Button grid in Python TKinter?如何确定在 Python TKinter 中从按钮网格中按下了哪个按钮?
【发布时间】:2015-02-27 09:34:45
【问题描述】:

我正在使用 Python TKinter 编写一个 GUI,其中我有一个由大约 24 个按钮组成的网格,这些按钮是我使用循环创建的(不是单独的)。有什么方法可以获取我按下的按钮的文本。

由于它处于循环中,因此即使使用 lambda 的回调函数也无济于事。我不想为按下每个不同按钮时会发生什么编写单独的代码。我只需要知道相应按钮的文本,以便我可以启动另一个仅适用于该文本的通用函数。

ps:我可以使用 List 和 curselection() 完成相同的任务,但不希望这样。

self.num = 11

for r in range(0,5):

   for c in range(0,3):

       R = r; C = c

       resNum = "Ch0"+str(self.num);

       self.button1_rex = tk.Button(self.frame, text = resNum,font=("Helvetica", 14), justify = CENTER,width = 20, command = self.new_window)

       self.button1_rex.grid(row=R, column=C, sticky=W)

       self.num = self.num+1

self.new_window 是打开一个新窗口的函数,需要根据按钮编号做其他功能(如“Ch011”等)

【问题讨论】:

    标签: python tkinter


    【解决方案1】:

    最简单的方法是在构建按钮时将名称绑定到命令,使用functools.partiallambda

    使用functools.partial

    self.button1_rex = tk.Button(..., command=functools.partial(self.new_window, resNum))
    

    使用lambda

    self.button1_rex = tk.Button(..., command=lambda r=resNum: self.new_window(r))
    

    有关 lambda 的更多信息,请参阅 What is a lambda (function)?Python tkinter creating buttons ... arguments

    【讨论】:

    • 感谢您的及时回复。我已经尝试过使用 lambda,它没有达到目的,因为它总是返回“resNum”的最后一个值,而不是当前选择的值。但是,您使用“部分”的第一个建议对我有用。非常感谢。
    • 不,它会导致语法错误。给您带来不便,我深表歉意。我没有太多的python经验。
    • 啊,没错。我已经习惯了 python 3 和 Qt ATM。谢谢。
    • 非常感谢您的帮助。它工作正常。你能指导我一些关于“lambda”用法的教程/帮助吗?如果您能解释一下这里使用的“lambda”方法,那就太好了。
    • 我添加了一些 SO 链接,也许像 diveintopython.net/power_of_introspection/lambda_functions.html 这样的链接有帮助?
    猜你喜欢
    • 2010-12-05
    • 1970-01-01
    • 2016-01-27
    • 2013-10-17
    • 1970-01-01
    • 1970-01-01
    • 2015-12-11
    • 1970-01-01
    • 2017-12-17
    相关资源
    最近更新 更多