Mein Wxpython-Projekt benötigt eine Reihe von Fenstern, die sich gegenseitig mit Benutzer-Widgets aufrufen können. Ich sehe, wie man mehrere Panels in einem Frame erstellt, aber das führt zu einer riesigen Datei, da einige Panels komplexe Handler benötigen. Ich sehe, wie man mehrere Fenster gleichzeitig startet, aber nicht, wie man Code schreibt, um zwischen ihnen zu bewegen. Ich bin ein Python Noob, aber habe zwei Jahrzehnte von Mikrocontrollern und C. Zeiger würden geschätzt werden ( Wortspiel absichtlich). Graham.Verwalten mehrerer Fenster in Wxpython
0
A
Antwort
0
Ich finde den besten Weg zur Kommunikation zwischen Klassen oder Frames in WxPython ist Pubsub verwenden. Dies ermöglicht Ihnen, Daten zwischen Fenstern leicht zu senden und Methoden in anderen Fenstern aufzurufen.
Hier ist ein einfaches Beispiel:
import wx
from wx.lib.pubsub import pub
class OtherFrame(wx.Frame):
""""""
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, wx.ID_ANY, "Secondary Frame")
panel = wx.Panel(self)
msg = "Enter a Message to send to the main frame"
instructions = wx.StaticText(panel, label=msg)
self.msgTxt = wx.TextCtrl(panel, value="")
closeBtn = wx.Button(panel, label="Send and Close")
closeBtn.Bind(wx.EVT_BUTTON, self.onSendAndClose)
sizer = wx.BoxSizer(wx.VERTICAL)
flags = wx.ALL|wx.CENTER
sizer.Add(instructions, 0, flags, 5)
sizer.Add(self.msgTxt, 0, flags, 5)
sizer.Add(closeBtn, 0, flags, 5)
panel.SetSizer(sizer)
def onSendAndClose(self, event):
"""
Send a message and close frame
"""
msg = self.msgTxt.GetValue()
pub.sendMessage("panelListener", message=msg)
pub.sendMessage("panelListener", message="test2", arg2="2nd argument!")
self.Close()
class MyPanel(wx.Panel):
""""""
def __init__(self, parent):
"""Constructor"""
wx.Panel.__init__(self, parent)
pub.subscribe(self.myListener, "panelListener")
btn = wx.Button(self, label="Open Frame")
btn.Bind(wx.EVT_BUTTON, self.onOpenFrame)
def myListener(self, message, arg2=None):
"""
Listener function
"""
print("Received the following message: " + message)
if arg2:
print("Received another arguments: " + str(arg2))
def onOpenFrame(self, event):
"""
Opens secondary frame
"""
frame = OtherFrame()
frame.Show()
class MyFrame(wx.Frame):
""""""
def __init__(self):
"""Constructor"""
wx.Frame.__init__(self, None, title="New PubSub API Tutorial")
panel = MyPanel(self)
self.Show()
if __name__ == "__main__":
app = wx.App(False)
frame = MyFrame()
app.MainLoop()
Sie können mehr über ihn unter der folgenden lesen:
Verwandte Themen
- 1. WPF: Verwalten mehrerer Benutzersteuerelemente in einem Fenster
- 2. Verwalten mehrerer Fenster der gleichen Arbeitsmappe mit VBA in Excel
- 3. wxPython Fenster ID
- 4. Verwalten mehrerer Benutzerkonten in LDAP
- 5. Verzweigungsstrategie - Verwalten mehrerer Versionen
- 6. Android: Verwalten mehrerer Benachrichtigungen
- 7. Verwalten mehrerer JLabel-Veranstaltungen
- 8. Fenster Lebenszyklus in Android Verwalten
- 9. Wxmplot-Fenster in Wxpython-Frame einbetten
- 10. Verwalten mehrerer Ansichten und Interaktionen
- 11. Verwalten mehrerer Windows mit Eigenschaften
- 12. Verwalten mehrerer Modelle und Laufzeiten in R
- 13. Wie öffne ich ein minimiertes wxPython-Fenster
- 14. Zeigt ein PNG-Bild in einem Fenster in WxPython
- 15. Clojure: Erstellen und Verwalten mehrerer Threads
- 16. Verwalten mehrerer Datenbanken mit NHibernate und Autofac
- 17. Verwalten mehrerer Abhängigkeiten zwischen Microservices mit Maven
- 18. Verwalten mehrerer WCF-Endpunkte für denselben Dienst
- 19. Verwalten mehrerer Webanwendungen mit der gleichen Codebasis
- 20. Wie identifiziert man dynamisch erstellte Fenster/Schaltflächen in wxpython?
- 21. Verwalten mehrerer Datenbanken auf mehreren Plattformen
- 22. Schließen mehrerer Fenster mit CMD
- 23. Python - Tkinter/verwalten Größe der übergeordneten Fenster
- 24. wxpython wx.EVT_LEFT_DOWN
- 25. Verwalten mehrerer GET-Parameter in Rails 5 API
- 26. Wie lege ich ein 3-Fenster mit wxPython?
- 27. wxPython - Trapping von Maus- und Tastaturereignissen ohne Fenster Fokus
- 28. Wie erkenne ich, wenn mein Fenster mit wxPython minimiert wird?
- 29. wxPython: Wie erstelle ich ein Bash-Shell-Fenster?
- 30. wxPython: Etwas erweitern