python - wxpython 将变量传递给回调事件。 lambda 岛

标签 python user-interface lambda wxpython

我是不是对 lambda 不了解?或者 GetValue() 我试图传递的变量是空的。最好为此创建一个 global palletNumberText 吗? 在 createWidgets() 中,我绑定(bind)了一个 EVT_TEXT,这样当在 TextCtrl 中输入文本时,它应该调用 onPalletNumberText(event, variable_here )

下一行是我遇到困难的地方:

palletNumberText.Bind(wx.EVT_TEXT, lambda event, temp_str=palletNumberText.GetValue(): self.onPalletNumberText( event, temp_str ))

在这里面 代码片段:

class ClassName(wx.Frame):
    def __init__(self, parent, title):
        wx.Frame.__init__(self, parent, title=title)
        self.panel = wx.Panel(self)
        self.PhotoMaxSize = 240
        self.createWidgets()
        self.Show()

    def createWidgets(self):
        .
        .
        .
        palletNumberText = wx.TextCtrl(self.panel, size=(80,-1))
        # THIS LINE
        palletNumberText.Bind(wx.EVT_TEXT, lambda event, temp_str=palletNumberText.GetValue(): self.onPalletNumberText( event, temp_str ))
        .
        .
        .

    def onPalletNumberText(self, event, palletNumber):
        '''
        save palletNumbertTxt Value when text is entered
        '''
        print palletNumber
        print "This is a test"
        # Store Value

        return

我看过的读物:

但是我的结果:

results

谢谢。

最佳答案

你的默认参数在开始时计算

lambda event, temp_str=None: self.onPalletNumberText( event, 
                             temp_str if temp_str is not None else palletNumberText.GetValue() )

我觉得可以

但你真正想要的可能更像

lambda event, txt_instance=palletNumberText: self.onPalletNumberText( event, txt_instance.GetValue() )  

关于python - wxpython 将变量传递给回调事件。 lambda 岛,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22872197/

相关文章:

python - Dockerfile 使用 python 和 mysql 创建镜像

user-interface - WiX安装程序-更新方案自定义UI

c# - 带有 <bool> 和 System.Nullable<bool> 的 Lambda 表达式

python - SOAP 请求中的类型错误(使用 pysimplesoap)

python - 选择我希望列中的值具有多个值的行

python - 在 Mac OS X 10.8.3 上导入 pylab 的问题

java - 如何在eclipse中装饰InputDialog

jquery - Spring MVC 的最佳 gui 实现

C# 在 lambda 中转换对象

使用 lambda 时,映射集中的 java 8 唯一键集很慢