WXPython:获取组合框的初始值

时间:2014-09-13 12:16:53

标签: python-2.7 wxpython

在对话框中,我有一个组合框和一个文本字段。我想这样做,如果选择了组合框中的一个特定值,文本字段将被禁用(或隐藏),如果选择了另一个值,则将启用文本字段。
我有:

self.myCombo = wx.ComboBox(parent=self, choices=['value1', 'value2'], style = wx.CB_READONLY)
self.myCombo.Bind(wx.EVT_COMBOBOX, self.onChange)
# ...

def onChange(self, ev):
    self.myTextField.Enable(False)      if     self.myCombo.GetValue() != "value1" else self.myTextField.Enable(True)

这确实像魅力一样,文本字段启用和禁用 但是,我希望根据组合框的初始值启用或禁用文本字段,这意味着从配置文件中获取值并在对话框打开时选择该值。
我尝试过同样的事情:

self.myTextField = wx.TextCtrl(parent=self)
self.myTextField.Enable(False)  if self.myCombo.GetValue() != "value1" else self.myTextField.Enable(True)

但这不起作用。我也尝试了GetSelection,但在记录此项时,GetValueGetSelection都返回-1。

1 个答案:

答案 0 :(得分:2)

当您尝试查询时,组合框可能尚未完全初始化。如果要在加载时禁用它,则不必检查其值。只是禁用它。但是对于你想要做的事情,我建议使用wxPython' wx.CallAfter()方法。

以下内容应该足够了:

def __init__(self):
    # initialize various variables

    wx.CallAfter(self.check_combobox, args)

def check_combobox(self, args):
    self.myTextField.Enable(False) if self.myCombo.GetValue() != "value1" else self.myTextField.Enable(True)