在tkinter button callb中传递lambda中的对象

2024-10-02 02:31:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用lambda为tkinter按钮创建回调。在

有多个按钮,每个回调都需要在其中传递一个对象。下面的代码就是我正在做的,运行良好

var0 = tk.StringVar()    

label = tk.Label(top, bg = "White",height = 2, width = 12,textvariable=var0, justify="right")
def b0Callback(var):
  var.set(var.get()+"0")
return
# creating a label which will print value of the any of the 0-9 button pressed 

# creating a button 0 
b0 = tk.Button(numFrame0, height = 1, width = 4, bg = "grey", text = 
"0",command =  lambda: b0Callback(var0))

 #there are more buttons like that

var0用于更新标签。上面的代码运行得很好,但我必须为0到9创建回调,我必须重复上面的定义。所以我尝试使用this教程中的以下示例

^{pr2}$

我用了它

def Callback(n):
 return lambda var.set(var.get()+n)

b0Callback = Callback("0")

这在返回行中显示错误invalid index变量集在

在这种情况下,有没有办法传递var0来避免这个错误?在


Tags: lambdacreatinggetreturnvardefwidth按钮
2条回答

我现在已经解决了这个问题,这是最后的代码:

我还将按钮的数量改为300个,并添加了代码来将它们排列在一个漂亮的网格中,只是为了好玩。(您可以通过更改for number in range(1, whatever)将其更改为任意多个。在

import tkinter as tk


class Window(tk.Tk):
    def __init__(self):
        tk.Tk.__init__(self)

        self.var0 = tk.StringVar()
        self.var0.set('0')

        # creating buttons and adding them to dictionary
        self.buttons = {}
        for number in range(1, 301):
            self.buttons.update({'button' + str(number): tk.Button(self, height=1, width=4, bg="grey", text=number)})

        label = tk.Label(self, textvariable=self.var0, font='none 50')
        label.grid(column=0, row=0)

        for button in self.buttons:
            self.buttons[button].bind('<Button-1>', lambda event, num=button[6:]: self.Callback(event, num))

            self.buttons[button].grid(column=(int(button[6:]) % 10), row=(int(button[6:]) / 10) + 1)

    def Callback(self, event, num):
        self.var0.set(num)
        self.update()

也许只有我一个人,但如果你只想在标签文本中添加一个数字,我看不出使用lambda的理由。在

让我们为它创建一个函数,该函数将StringVar()作为变量并向其添加一些数字:

def button_callback(str_var, number):
    str_var.set(str_var.get() + str(number))

要运行这个命令,我们只需将它作为lambda函数放入代码中,否则它将在初始化时运行(因为我们提供的是函数而不是引用)。在

为了在一个按钮内运行它,我们声明如下:

^{pr2}$

“5”可能会更改为任何其他数字。在

相关问题 更多 >

    热门问题