wxPython:在GUI类中传递参数

时间:2014-11-10 12:36:41

标签: python-2.7 parameters wxpython

我正在尝试将基于CLI的程序移植到GUI中,以使其更加用户友好。我已经掌握了wxPython的基础知识,但是有一个问题困扰了我。

我已经定义了一个对话框,它带有一个允许我创建动态对话框的参数:

    def infoDialog(self,event,message):
        dialog = wx.MessageDialog(None, message, 'Info', wx.OK | wx.ICON_INFORMATION)
        dialog.ShowModal()

我在类中有一个主子程序,它生成所有GUI元素:

    def initGUI(self):
        panel = wx.Panel(self)

如果我在initGUI中调用信息对话框,如下所示:

    pidButton = wx.Button(panel, label='Open...', pos=(540,445), size=(60,20))
    pidButton.Bind(wx.EVT_BUTTON, self.questionDialog(event,"Hi!"))

然后我收到此错误:

pidButton.Bind(wx.EVT_BUTTON, self.questionDialog(event,"Hi!"))
     

NameError:全局名称'事件'未定义

然而,如果我从一个不是initGUI()的子程序中调用它,这是有效的。我该如何解决这个问题?

我感谢任何建议

2 个答案:

答案 0 :(得分:0)

由于异常告诉您此时没有定义“事件”,但我也没有看到定义的qeustionDialog,所以我认为您需要进行这些更改。

变化:

def infoDialog(self,event,message):

为:

def infoDialog(self, message):

pidButton.Bind(wx.EVT_BUTTON, self.questionDialog(event,"Hi!"))

为:

pidButton.Bind(wx.EVT_BUTTON, self.infoDialog)

答案 1 :(得分:0)

将事件处理程序绑定到按钮事件,并在该处理程序内调用您希望发生的任何操作。

请注意,绑定时,将引用传递给处理程序而不调用它,即no()其他方面,您绑定调用处理程序的结果。处理程序必须接受一个参数。

import wx
from wx.lib import sized_controls


class MainFrame(sized_controls.SizedFrame):

    def __init__(self, *args, **kwargs):
        super(MainFrame, self).__init__(*args, **kwargs)
        self.SetTitle('MainFrame')
        pane = self.GetContentsPane()
        button = wx.Button(pane, label='open')
        button.Bind(wx.EVT_BUTTON, self.on_open_button)

    def on_open_button(self, event):
        self.infoDialog("Hi!")

    def infoDialog(self, message):
        dialog = wx.MessageDialog(
            None, message, 'Info', wx.OK | wx.ICON_INFORMATION)
        dialog.ShowModal()


if __name__ == '__main__':
    wxapp = wx.App(False)
    frame = MainFrame(None)
    frame.Show()
    wxapp.MainLoop()