2014-09-13 55 views
0

在對話框中我有一個組合框和一個文本框。我想這樣做,如果選擇了組合框中的一個特定值,文本字段將被禁用(或隱藏),並且如果選擇了另一個值,則將啓用文本字段。
我: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。

+0

GetSelection和getValue應該工作。你能否給他們一個完整的,但最小的工作例子,他們不。也就是說,你的問題可能與myCombo的狀態有關,但是從你的代碼來看,你真的不知道。 – tom10 2014-09-13 19:07:08

回答

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)   
+0

感謝邁克,它像一個魅力工作! – 2014-09-15 22:21:05