如何在wxPython中获取CreateButtonSizer(或CreateSeparatedButtonSizer)创建的button对象

如何在wxPython中获取CreateButtonSizer(或CreateSeparatedButtonSizer)创建的button对象,python,user-interface,wxpython,Python,User Interface,Wxpython,我觉得这应该很简单,但我找不到任何东西。我有一个非常简单的对话框,有两个文本控件。然后,我使用CreateSeparatedButtonSizer方法创建一个OK/CANCEL按钮大小调整器 问题是,我想根据文本控件中条目的某些条件启用/禁用“OK”按钮。换句话说,在文本控件中输入有效条目之前,我希望禁用OK按钮。我似乎找不到任何关于如何引用按钮的信息,我也不希望手动创建按钮,这样对话框仍然是“不可知平台”的 小样本代码: class MyDialog(wx.Dialog): def _

我觉得这应该很简单,但我找不到任何东西。我有一个非常简单的对话框,有两个文本控件。然后,我使用CreateSeparatedButtonSizer方法创建一个OK/CANCEL按钮大小调整器

问题是,我想根据文本控件中条目的某些条件启用/禁用“OK”按钮。换句话说,在文本控件中输入有效条目之前,我希望禁用OK按钮。我似乎找不到任何关于如何引用按钮的信息,我也不希望手动创建按钮,这样对话框仍然是“不可知平台”的

小样本代码:

class MyDialog(wx.Dialog):
    def __init__(self, parent, title):
        wx.Dialog.__init__(self, parent=parent, title=title)

        # Grid sizer for text controls and labels:
        grid = wx.GridBagSizer(2,2)

        # Add the input fields:
        grid.Add(wx.StaticText(self, label="Field 1: "),pos=(0,0))
        self.fld1 = wx.TextCtrl(self, value="", size=(70,-1))
        grid.Add(self.fld1, pos=(0,1))
        grid.Add(wx.StaticText(self, label="Field 2: "),pos=(1,0))
        self.fld2 = wx.TextCtrl(self, value="", size=(70,-1))
        grid.Add(self.fld2, pos=(1,1))

        # Buttonsizer:
        btns = self.CreateSeparatedButtonSizer(wx.OK|wx.CANCEL)

        # Lay it all out:
        mainSizer = wx.BoxSizer(wx.VERTICAL)
        mainSizer.Add(grid, 1, wx.ALL|wx.EXPAND)
        mainSizer.Add(btns, 0, wx.ALL|wx.EXPAND)
        self.SetSizer(mainSizer)
        self.Fit()
因此,我想将一个方法绑定到文本控件,该控件检查输入是否有效。如果是,则会启用“确定”按钮,如果不是,则应禁用该按钮。有没有办法做到这一点


谢谢

OK按钮具有id
wx.id\u OK
。如果要从
MyDialog
类中查找,可以尝试
wx.FindWindowById(wx.ID\u OK,self)
。 如果试图从
MyDialog
类外部引用按钮,则需要使用
MyDialog
的实例作为第二个参数。 前

这里有一些关于FindWindowById的文档

确定按钮具有id
wx.id\u OK
。如果要从
MyDialog
类中查找,可以尝试
wx.FindWindowById(wx.ID\u OK,self)
。 如果试图从
MyDialog
类外部引用按钮,则需要使用
MyDialog
的实例作为第二个参数。 前

这里有一些关于FindWindowById的文档

工作起来很有魅力!正是我要找的!注意:对于未来的读者,“d”是小写的:wx.FindWindowById()。否则,它的工作原理与Jason的回答中描述的完全相同。非常感谢!工作得很有魅力!正是我要找的!注意:对于未来的读者,“d”是小写的:wx.FindWindowById()。否则,它的工作原理与Jason的回答中描述的完全相同。非常感谢!
dialog_instance = MyDialog()
ok_button = wx.FindWindowById(wx.ID_OK, dialog_instance)