1

我在 wxpython 中将 textCtrl 数据从一个类传递到另一个类时遇到问题。我尝试使用传递变量的实例方法,但如果我使用init _function 它仅在程序启动时相关,并且不考虑初始启动后对文本控制框的任何更改。尝试了 Update() 或 Refresh() 也没有用。

这是简化的代码。

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()

以下传递变量的方式给了我一个关键错误。任何帮助表示赞赏。

4

2 回答 2

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
于 2013-11-01T19:06:50.770 回答
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()

您的代码中至少有一些错误......它至少现在构成了框架

于 2013-04-29T18:33:29.377 回答