2013-11-21 350 views
0

嘿夥計使用Python我已經綁定了單選按鈕,當它被點擊時TextCtrl被調用,但在我輸入TextCtrl後,我無法獲得已輸入的字符串,我的代碼是這樣的.GetValue()不適用於TextCtrl在這種特殊情況下

def A(self,event): 
    radiobut = wx.RadioButton(self.nameofframe, label = 'Opt-1', pos = (10,70),size= (90,-1)) 
    self.Bind(wx.EVT_RADIOBUTTON,self.B,radiobut) 
def B(self,event): 
    Str1 = wx.TextCtrl(self.nameofframe,pos = (100,70), size=(180,-1)) 
    print Str1.GetValue() 

任何人都可以請告訴我問題在哪裏。爲什麼我不能打印它?

+0

目前還不清楚是什麼你正試圖在這裏做,你想要單擊單選按鈕時打印'TextCtrl'的值嗎? – 2013-11-21 11:31:37

+0

@BSH是的,我想要打印任何在TextCtrl中輸入的值 –

+0

@BSH .GetValue()方法沒有獲取在TextCtrl中輸入的字符串,因此我想打印以便稍後確認將分配它到了別的地方。 –

回答

1

單選按鈕usually屬於一個組,一個或多個多於一個,至少應該點擊一個,但只有一個按鈕。在這種情況下通常使用的是複選框CheckBox

在這個例子中,它打印在TextCtrl輸入文本時,CheckBox被激活:

#!python 
# -*- coding: utf-8 -*- 

import wx 

class MyFrame(wx.Frame): 
    def __init__(self, title): 
    super(MyFrame, self).__init__(None, title=title) 

    panel = wx.Panel(self) 
    self.check = wx.CheckBox(panel, label='confiurm?', pos =(10,70), size=(90,-1)) 
    self.text = wx.TextCtrl(panel, pos=(100,70), size=(180,-1)) 
    # disable the button until the user enters something 
    self.check.Disable() 

    self.Bind(wx.EVT_CHECKBOX, self.OnCheck, self.check) 
    self.Bind(wx.EVT_TEXT, self.OnTypeText, self.text) 

    self.Centre() 

    def OnTypeText(self, event): 
    ''' 
    OnTypeText is called when the user types some string and 
    activate the check box if there is a string. 
    ''' 
    if(len(self.text.GetValue()) > 0): 
     self.check.Enable() 
    else: 
     self.check.Disable() 

    def OnCheck(self, event): 
    ''' 
    Print the user input if he clicks the checkbox. 
    ''' 
    if(self.check.IsChecked()): 
     print(self.text.GetValue()) 

class MyApp(wx.App): 
    def OnInit(self): 
    self.frame = MyFrame('Example') 
    self.frame.Show() 
    return True 

MyApp(False).MainLoop() 

這是它如何工作的:

Step 1 Step 2 Step 3

+0

謝謝@BSH所有工作正常... –

2

Str1.GetValue()將是空的,因爲當單擊單選按鈕時,您正在創建一個新的TextCtrl,然後立即獲取其值,它將爲空,因爲用戶尚未能夠輸入任何內容。

+0

正確。處理文本控件的EVT_TEXT_ENTER事件。 – ravenspoint

+0

@Yoriz同意!任何解決方案的程序?我已經嘗試了一些有趣的leme顯示 –

+0

首先,您需要重新思考正在嘗試做什麼,使用現在的方法,每次用戶單擊單選按鈕時,新的TextCtrl將在前一個之上進行。 – Yoriz

1

這是通常的這樣做。

創建框架時創建文本控件。將一個指針(對不起C++ - 不管你用python做什麼)保存到文本控件,並將一個方法綁定到EVT_TEXT_ENTER事件。事件觸發時,您可以閱讀用戶輸入的內容。

如果您想要控制何時何時不能看到文本控件,請使用hide()方法。

+0

謝謝@ravenspoint歡呼 –