0

嘿,使用 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()

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

4

3 回答 3

2

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

于 2013-11-21T13:05:58.720 回答
1

这里是通常的做法。

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

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

于 2013-11-21T13:48:39.600 回答
1

单选按钮通常在一个组中,一个或多个不止一个,至少应该点击一个,但您只有一个按钮。在这种情况下通常使用的是复选框,CheckBox

在此示例中,它打印激活TextCtrla 时输入的文本: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()

这是它的工作原理:

步骤1 第2步 第 3 步

于 2013-11-21T13:50:08.453 回答