我正在从tkinter切换到wxPython,当使用类似于下面的wxexample类的模板wxPython脚本时,我对继承感到困惑。鉴于我的三个脚本(mainClass.py,wxexample.py,callbacks.py),我该怎么做:
1)从mainClass正确启动wxPython窗口;
2)让Example类扩展下面的回调类。
mainClass.py:
from time import sleep
import callbacks as clb
import wxexample
class mainClass(clb.callbacks): #, wxexample.Example):
def main(self):
#Here start the wxPython UI in wxexample!
...
#while 1: Edited
# sleep(0.5)
if __name__ == "__main__":
instance = mainClass()
instance.main()
wxexample.py:
import wx
class Example(wx.Frame):
def __init__(self, *args, **kw):
super(Example, self).__init__(*args, **kw)
self.InitUI()
def InitUI(self):
pnl = wx.Panel(self)
btn=wx.Button(pnl, label='Button', pos=(20, 30))
#Here I would like to call callbacks.mycallback as self.mycallback:
btn.Bind(wx.EVT_BUTTON, self.mycallback)
self.Show(True)
callbacks.py:
class callbacks():
def mycallback(self, e): #EDITED
print("callbacks.mycallback")
已解决:我回到基础并发现了这个解决方案。我很困惑,因为在我的实际实现中,mainClass因为其他原因而扩展了wxexample.Example,这会引发错误(无法为基础创建一致的方法解析顺序(MRO)示例,回调)
import callbacks as clb
import wxexample
class mainClass(clb.Callbacks): #, wxexample.Example):
def main(self):
wxexample.main()
if __name__ == "__main__":
instance = mainClass()
instance.main()
wxexample.py:
import wx
import callbacks as clb
class Example(wx.Frame, clb.Callbacks):
def __init__(self, *args, **kw):
super(Example, self).__init__(*args, **kw)
self.InitUI()
def InitUI(self):
pnl = wx.Panel(self)
btn=wx.Button(pnl, label='Button', pos=(20, 30))
#Here I would like to call callbacks.mycallback as self.mycallback:
btn.Bind(wx.EVT_BUTTON, self.mycallback)
self.Show(True)
def main():
ex = wx.App()
Example(None)
ex.MainLoop()
if __name__ == '__main__':
main()
答案 0 :(得分:1)
所有wxPython应用程序至少需要以下内容:
wx.App
的实例或从wx.App
wx.Frame
,wx.Dialog
或派生类MainLoop
方法来实现。根据该列表,我担心你在main
方法中显示的while循环,因为没有使用主事件循环,或阻止控制返回它,会导致比你想要的更多的问题在学习工具包时要处理。您可以使用以下内容替换while循环,这将使您走上正确的轨道:
app = wx.App()
frame = wxexample.Example(None, title="Example Frame")
app.MainLoop()
你还需要给mycallback
一个额外的参数,因为事件处理程序总是传递给一个事件对象,即使他们不需要它。
如果您还没有,我建议您阅读本网站上的教程:http://zetcode.com/wxpython/