绑定返回ttk条目数组中的每个元素

时间:2013-02-26 15:04:35

标签: python-3.x tkinter bind tkinter-entry

我正在使用tkinter创建一个“网格”结构,在输入字段中显示eeprom的内容。

for byteRow in range (0, 16, 1):
    for byteColumn in range (0, 16, 1):
        byteEeprom = StringVar()
        self.byteEepromArray.append(byteEeprom)
        self.entryEepromArray.append(ttk.Entry(rawEeprom, width=3, textvariable = self.byteEepromArray[byteColumn+(16*byteRow)]))
        self.entryEepromArray[byteColumn+(16*byteRow)].grid(column = byteColumn, row = byteRow+2, sticky = (N, W))

以上一切正常,并使用self.byteEepromArray[byte].set()填充在一个函数中,但我正在尝试更改代码,以便如果有人想要更改其中一个eeprom位置,他们将更改其中一个的内容输入字段,按回车键,将调用一个函数与eeprom对话。不幸的是,在导入脚本时调用函数makeRawProbe而不是等待事件发生。

 for byteRow in range (0, 16, 1):
        for byteColumn in range (0, 16, 1):
            byteEeprom = StringVar()
            self.byteEepromArray.append(byteEeprom)
            self.entryEepromArray.append(ttk.Entry(rawEeprom, width=3, textvariable = self.byteEepromArray[byteColumn+(16*byteRow)]))
            self.entryEepromArray[byteColumn+(16*byteRow)].grid(column = byteColumn, row = byteRow+2, sticky = (N, W))
            self.entryEepromArray[byteColumn+(16*byteRow)].bind('<Return>', self.makeRawProbe(byteColumn+(16*byteRow)))

我已经尝试过更改以防万一从命令行中拾取奇怪的东西,但同样的事情发生了。我想我正在做一些愚蠢的事情,但是看不出它是什么,请有人能指出我正确的方向吗?

1 个答案:

答案 0 :(得分:0)

bind的参数必须是函数的引用。当你做类似的事情时:

...bind('<Return>', self.makeRawProbe(byteColumn+(16*byteRow)))

...然后你实际上正在调用self.makeRawProbe(...),并且该调用的结果是分配给绑定的内容。

相反,您需要传递对函数本身的引用。由于您需要将参数传递给函数,因此您需要使用lambdafunctools.partial或某种工厂。我偏爱lambda,因为它不需要拉入另一个库。

例如:

value = byteColumn+(16*byteRow)
...bind('<Return>', lambda event, idx=value: self.makeRawProbe(idx))