Tom*_*mmo 2 python oop wxpython class
有许多类似的问题,但没有一个答案出现在现场 - 所以请耐心等待.
我正在努力学习使用Python的OOP,但我一直遇到错误(比如这个),这让我觉得这一切都没有意义,只是使用方法会更容易.
这是我的代码:
Run Code Online (Sandbox Code Playgroud)class TheGUI(wx.Frame): def __init__(self, title, size): wx.Frame.__init__(self, None, 1, title, size=size) # The GUI is made ... textbox.TextCtrl(panel1, 1, pos=(67,7), size=(150, 20)) button1.Bind(wx.EVT_BUTTON, self.button1Click) self.Show(True) def button1Click(self, event): #It needs to do the LoadThread function! class WebParser: def LoadThread(self, thread_id): #It needs to get the contents of textbox! TheGUI = TheGUI("Text RPG", (500,500)) TheParser = WebParser TheApp.MainLoop()
所以我遇到的问题是GUI类需要使用WebParser类中的函数,而WebParser类需要从GUI类中存在的文本框中获取文本.
我知道我可以通过将对象作为参数传递来做到这一点,但这似乎完全没有意义,必须有一种更合乎逻辑的方法来做到这一点,不使用类似乎毫无意义?
提前致谢!
你似乎有几个误解.
你在这里使用方法.(你的意思是"功能",因为不属于一个类吗?)
类不是某种功能的容器或命名空间.它们定义数据类型.拥有WebParser类的关键是你可以拥有多个WebParser.
在Python中,类也是对象.现在,你不是TheParser一个人WebParser; 你正在使它成为类本身的别名.换句话说,TheParser现在或多或少等于"网络解析器的概念".
传递参数不是"毫无意义"; 这是你如何获得功能之间的信息.你没有(通常!)传递课程; 你传递类的实例.无论您是否使用课程,您都会遇到基本相同的通信问题.
解决这个问题非常简单.首先,需要创建WebParser,因此我们通过使用其构造函数来处理它.接下来,我们的实例TheGUI(一个可怜的名字btw - "the"并不真正属于)需要知道我们的实例,所以我们将它传递给构造函数.这样,实例可以保留对它的引用,并使用它来调用该LoadThread方法.它还需要保留对它的引用textbox,以便这些信息可以传递给LoadThread.
看起来像:
class MyGUI(wx.Frame):
def __init__(self, title, size, loader):
wx.Frame.__init__(self, None, 1, title, size=size)
# The GUI is made ...
textbox.TextCtrl(panel1, 1, pos=(67,7), size=(150, 20))
self.textbox = textbox
button1.Bind(wx.EVT_BUTTON, self.button1Click)
self.loader = loader
self.Show(True)
def button1Click(self, event):
self.loader.LoadThread(get_thread_id(), self.textbox)
class WebParser:
def LoadThread(self, thread_id, a_textbox):
do_something_with(a_textbox)
TheGUI = MyGUI("Text RPG", (500,500), WebParser())
TheApp.MainLoop()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1929 次 |
| 最近记录: |