2013-11-21 116 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欢呼 –