在这种特殊情况下,.GetValue()不适用于TextCtrl

时间:2013-11-21 11:16:21

标签: python wxpython wxwidgets wx.textctrl

嘿大家使用Python我已经绑定了单选按钮,当点击 TextCtrl 被调用但是在我输入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()

有谁能告诉我问题出在哪里。为什么我不能打印出来?

3 个答案:

答案 0 :(得分:2)

Str1.GetValue()将为空,因为当单击单选按钮时,您正在创建一个新的TextCtrl,然后立即获取其值,它将为空,因为用户尚未在其中键入任何内容。 / p>

答案 1 :(得分:1)

这是通常的方式。

创建框架时创建文本控件。将指针(对不起C ++ - 无论你用python做什么)保存到文本控件并将方法绑定到EVT_TEXT_ENTER事件。当事件触发时,您可以阅读用户键入的内容。

如果要控制文本控件何时何时不可见,请使用hide()方法。

答案 2 :(得分: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