私はtkinterからwxPythonに切り替えています。下のwxexampleクラスに似たテンプレートwxPythonスクリプトを使用すると、継承について混乱します。以下の3つのスクリプト(mainClass.py、wxexample.py、callbacks.py)が与えられた場合、どうすればいいですか?wxPythonの起動と別のクラスの拡張
1)mainClassからwxPythonウィンドウを適切に起動します。
2)以下の例のクラスでは、以下のコールバッククラスを拡張してください。
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:
callbacks.pyimport 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)
:
class callbacks():
def mycallback(self, e): #EDITED
print("callbacks.mycallback")
解決しよう:私は基本に戻って、この解決策を見つけました。私は私の実際の実装にmainClassがエラーをスローし、他の理由でwxexample.Exampleを拡張したため
import callbacks as clb
import wxexample
class mainClass(clb.Callbacks): #, wxexample.Example):
def main(self):
wxexample.main()
if __name__ == "__main__":
instance = mainClass()
instance.main()
(拠点例、コールバックのための一貫性のある方法で解決順序(MRO)を作成することはできません)混乱していた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()
http://zetcode.com/wxpython/は、あなたの答えをいただき、ありがとうございます。 whileループは実際には非常に悪い例でした。これは幸運にも私がやっていることではありません。問題の説明を更新します。 wxライブラリをmainClassでもインポートしなくても、wxを1つのクラスに保つことを望みますが、wx UIエレメントのコードを追加すると、 私はまだ解決する必要がある方法2) – aless80