2013-04-29 3 views
1

У меня проблема с передачей данных textCtrl из одного класса в другой в wxpython. Я попытался использовать метод экземпляра для передачи переменных, но если я использую init _функция, это актуально только в начале программы и не принимает во внимание любые изменения в текстовом поле управления после начального запуска. Пробовал Update() или Refresh(), и он тоже не работал.Передача переменных из одного класса в другой в wxpython

Просьба уточнить код.

class DropTarget(wx.DropTarget): 


    def __init__(self,textCtrl, *args, **kwargs): 
      super(DropTarget, self).__init__(*args, **kwargs) 
      self.tc2=kwargs["tc2"] 
      print self.tc2 


class Frame(wx.Frame): 

    def __init__(self, parent, tc2): 
    self.tc2 = wx.TextCtrl(self, -1, size=(100, -1),pos = (170,60))#part number 

def main(): 

    ex = wx.App() 
    frame = Frame(None, None) 
    frame.Show() 
    b = DropTarget(None, kwarg['tc2']) 
    ex.MainLoop() 

if __name__ == '__main__': 
    main() 

Следующий способ передачи переменной дает мне ключом. Любая помощь приветствуется.

ответ

0
import wx 
class DropTarget(wx.DropTarget): 


    def __init__(self,textCtrl, *args, **kwargs): 
      self.tc2 = kwargs.pop('tc2',None) #remove tc2 as it is not a valid keyword for wx.DropTarget 
      super(DropTarget, self).__init__(*args, **kwargs) 

      print self.tc2 


class Frame(wx.Frame): 

    def __init__(self, parent, tc2): 
     #initialize the frame 
     super(Frame,self).__init__(None,-1,"some title") 
     self.tc2 = wx.TextCtrl(self, -1, size=(100, -1),pos = (170,60))#part number 

def main(): 

    ex = wx.App(redirect=False) 
    frame = Frame(None, None) 
    frame.Show() 
    #this is how you pass a keyword argument 
    b = DropTarget(frame,tc2="something") 
    ex.MainLoop() 

if __name__ == '__main__': 
    main() 

было по крайней мере, несколько ошибок в коде ... это по крайней мере, делает кадр Теперь

1

Это не самое элегантное решение этой проблемы, но у меня была аналогичная проблема. Если вы выгрузите текст во временный текстовый файл, вы можете выбрать его обратно, когда захотите. Так было бы примерно так:

tmpFile = open("temp.txt",'w') 
tmpFile.write(self.tc2.GetValue()) 
tmpFile.close() 

#when you want the string back in the next class 
tmpFile = open("temp.txt",'r') 
string = tmpFile.read() 
tmpFile.close() 
os.system("del temp.txt") #This just removes the file to clean it up, you'll need to import os if you want to do this 
Смежные вопросы