WxPython,按钮调用的函数的返回值

时间:2013-12-03 16:56:43

标签: python wxpython bind

我无法弄清楚如何从绑定按钮调用的函数返回值。

我想要相当于:

call_function = function()

def function():
    return 'this'

print call_function

并且有call_function ='this'

但要使用这样的东西:

call_function_button.Bind(wx.EVT_BUTTON, class_object.function)

1 个答案:

答案 0 :(得分:1)

你并没有真正考虑以事件为导向的方式。调用按钮事件时,它不会返回有用的内容。相反,您需要将 call_function 变量设置为实例变量: self.call_function 。然后你可以在按钮处理程序中设置它。这是一种方法:

import random
import wx

########################################################################
class Panel(wx.Panel):
    """"""

    #----------------------------------------------------------------------
    def __init__(self, parent):
        """Constructor"""
        wx.Panel.__init__(self, parent)

        self.call_function = None
        self.choices = ["this", "that", "something", "other", "python"]

        btn = wx.Button(self, label="Change Variable Value")
        btn.Bind(wx.EVT_BUTTON, self.onButton)

    #----------------------------------------------------------------------
    def onButton(self, event):
        """
        Change the value of self.call_function
        """
        self.call_function = random.choice(self.choices)
        print self.call_function

########################################################################
class Frame(wx.Frame):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""
        wx.Frame.__init__(self, None, title="Return value")
        panel = Panel(self)
        self.Show()

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    frame = Frame()
    app.MainLoop()

请注意,我正在为其分配各种值,而不仅仅是一个。你可以分配你想要的任何东西。然后在下一个函数调用中,您可以通过 self.call_function

访问它