2013-11-21 3 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» было напечатано при нажатии переключателя? –

+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 Согласен! любое решение для продолжения? я попробовал somethign leme show –

+0

Для начала вам нужно задуматься о том, что вы пытаетесь сделать, с помощью метода, который у вас есть сейчас, каждый раз, когда пользователь нажимает на переключатель, новый TextCtrl будет создан поверх предыдущего. – Yoriz

1

Это обычный способ.

Создайте текстовый элемент управления при создании рамки. Сохраните указатель (извините C++ - все, что вы делаете с python), в текстовое управление и привяжите метод к событию EVT_TEXT_ENTER. Когда событие срабатывает, вы можете прочитать, что пользователь набрал.

Если вы хотите контролировать, когда и когда нет текстового элемента управления, используйте метод hide().

+0

Спасибо @ravenspoint cheers –

 Смежные вопросы

  • Нет связанных вопросов^_^