Hi,
Ich brauche für eine Applikation von mir ein soganntes Deck-Window/Widget. In XUL wäre das http://developer.mozilla.org/en/docs/XUL:deck. Anzeigen können muss es Panels. Gibt es sowas schon fertig in wx, oder muss ich mir selbst ein Window dafür schreiben (Ich habe nämlich noch nichts gefunden, was mir passend erscheint). In der vorhandenen Qt-Version ist das ganze mit einem QWorkspace (Mdi-Window) gelöst; ist aber eher ein Overkill, da man nur immer das oberste Window sehen muss/darf. Ein Notebook wäre wenn ich nichts übersehe schon passend, allerdings müsste ich die Tabs ausblenden können...
Thx, apollo13
P.S.: Ich warte noch immer auf mein "wxpython in action" buch :/
[Solved] Suche ein Deck-Window
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo apollo13!
Du kannst Panels unsichtbar machen. Immer wenn ein bestimmtes Panel angezeigt werden soll, machst du dieses eine Panel sichtbar und die anderen Panels unsichtbar.
mfg
Gerold
Du kannst Panels unsichtbar machen. Immer wenn ein bestimmtes Panel angezeigt werden soll, machst du dieses eine Panel sichtbar und die anderen Panels unsichtbar.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo apollo13!apollo13 hat geschrieben:Und wohin pack ich dann die ganzen Panels; einfach in einen BoxSizer etwa? Das würde dann heißen, dass die ganzen Panels im Size sind, allerdings hidden.
Ja.
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding: iso-8859-15 -*-
import wx
wx.SetDefaultPyEncoding("iso-8859-15")
class MyFrame(wx.Frame):
def __init__(
self, parent = None, title = "Example", size = wx.Size(550, 420)
):
wx.Frame.__init__(self, parent, -1, title, size = size)
main_panel = wx.Panel(self)
self.main_panel = main_panel
vbox = wx.BoxSizer(wx.VERTICAL)
main_panel.SetSizer(vbox)
# Buttons
hbox = wx.BoxSizer(wx.HORIZONTAL)
vbox.Add(hbox, 0, wx.EXPAND | wx.ALL, 5)
btn_show_all = wx.Button(main_panel, label = "alle anzeigen")
hbox.Add(btn_show_all, 0, wx.ALL, 5)
btn_show_all.Bind(wx.EVT_BUTTON, self.show_all)
btn_show_panel1 = wx.Button(main_panel, label = "zeige Panel 1")
hbox.Add(btn_show_panel1, 0, wx.ALL, 5)
btn_show_panel1.Bind(wx.EVT_BUTTON, self.show_panel1)
btn_show_panel2 = wx.Button(main_panel, label = "zeige Panel 2")
hbox.Add(btn_show_panel2, 0, wx.ALL, 5)
btn_show_panel2.Bind(wx.EVT_BUTTON, self.show_panel2)
btn_show_panel3 = wx.Button(main_panel, label = "zeige Panel 3")
hbox.Add(btn_show_panel3, 0, wx.ALL, 5)
btn_show_panel3.Bind(wx.EVT_BUTTON, self.show_panel3)
# Panels
panel1 = wx.Panel(main_panel)
panel1.SetBackgroundColour("green")
vbox.Add(panel1, 1, wx.ALL | wx.EXPAND, 5)
self.panel1 = panel1
panel2 = wx.Panel(main_panel)
panel2.SetBackgroundColour("red")
vbox.Add(panel2, 1, wx.ALL | wx.EXPAND, 5)
self.panel2 = panel2
panel3 = wx.Panel(main_panel)
panel3.SetBackgroundColour("blue")
vbox.Add(panel3, 1, wx.ALL | wx.EXPAND, 5)
self.panel3 = panel3
def show_all(self, event = None):
self.Freeze()
self.panel1.Show()
self.panel2.Show()
self.panel3.Show()
self.main_panel.Layout()
self.Thaw()
def show_panel1(self, event = None):
self.Freeze()
self.panel1.Show()
self.panel2.Hide()
self.panel3.Hide()
self.main_panel.Layout()
self.Thaw()
def show_panel2(self, event = None):
self.Freeze()
self.panel1.Hide()
self.panel2.Show()
self.panel3.Hide()
self.main_panel.Layout()
self.Thaw()
def show_panel3(self, event = None):
self.Freeze()
self.panel1.Hide()
self.panel2.Hide()
self.panel3.Show()
self.main_panel.Layout()
self.Thaw()
def main():
"""Testing"""
app = wx.PySimpleApp()
f = MyFrame()
f.Center()
f.Show()
app.MainLoop()
if __name__ == "__main__":
main()
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hallo apollo13!apollo13 hat geschrieben:die 2. Methode gefällt mir besser; es fühlt sich einfach sauberer an, kA warum.
Ist sie aber nicht. Die zweite Methode ist nur dann interessant, wenn du die Panels neu erstellst und nicht im Speicher hälst. Also, wenn du beim Starten des Programms noch gar nicht weißt, welche oder wieviele Panels du brauchst. Oder wenn es ein Speicherproblem wäre, wenn die Panels schon existieren.
Für dein geschildertes Problem würde ich die erste Methode vorziehen, denn dann schweben die unsichtbaren Panels nicht irgendwo in der Luft herum. Sie sind schon an den Sizer gebunden. Das dürfte auch im Programmablauf schneller sein.
mfg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Und genau das trifft in meinem Fall zu. Das Clientprogramm (Ganz ein dummer Client, der alles Events etc zum Server schickt... [Die aktuelle Qt/c++ Version funktioniert übrigens super, und ist sogar schnell]) bekommt vom Server xrc Files übertragen, die es dann anzeigt und die events wieder zum Server schickt, der dann zb sagt, dass ich jetzt das nächste anzeigen soll etc...gerold hat geschrieben:Die zweite Methode ist nur dann interessant, wenn du die Panels neu erstellst und nicht im Speicher hälst. Also, wenn du beim Starten des Programms noch gar nicht weißt, welche oder wieviele Panels du brauchst.