Ich bin von Tkinter zu WxPython wechseln und ich bin verwirrt bei der Vererbung bei der Verwendung von Vorlage WxPython-Skripten ähnlich wie die Wxexample-Klasse unten. Gegeben meine drei Skripte (mainClass.py, wxexample.py, callbacks.py), wie mache ich:Starten von WxPython und Erweitern einer anderen Klasse
1) ordnungsgemäß starten Sie das WxPython-Fenster von der mainClass;
2) Lassen Sie die Example-Klasse die Callback-Klasse weiter unten erweitern.
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")
GELÖST: Ich Fundamental ging zurück und fand diese Lösung . Ich war verwirrt, weil in meiner realen Implementierung Mainclass wxexample.Example aus anderen Gründen wurde erstreckt, die einen Fehler wirft (kann nicht eine konsistente Methode Auflösung um (MRO) für Basen Beispiel, Rückrufe erstellen)
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()
Dank für Ihre Antwort danken. Die while-Schleife war in der Tat ein sehr schlechtes Beispiel, das ist glücklicherweise nicht das, was ich mache. Ich aktualisiere meine Problembeschreibung. Ich würde es vorziehen, Wx in einer Klasse zu halten, ohne die WX-Bibliothek auch in mainClass importieren zu müssen, aber wenn ich Ihren Code hinzufügen, mein WX-UI-Element. I Weg zu ich muss immer noch Punkt 2 lösen) – aless80