在对话框中,我有一个组合框和一个文本字段。我想这样做,如果选择了组合框中的一个特定值,文本字段将被禁用(或隐藏),如果选择了另一个值,则将启用文本字段。
我有:
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
,但在记录此项时,GetValue
和GetSelection
都返回-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)