Toolbar ein- und ausblenden?

Plattformunabhängige GUIs mit wxWidgets.
Antworten
$uper||man
User
Beiträge: 6
Registriert: Samstag 5. August 2006, 10:55
Wohnort: Berlin
Kontaktdaten:

Hallo,

der Titel sagt ja eigentlich schon 1000 Worte :roll:

Ich habe mir ein Menu gezaubert mit einer Kategorie Fenster die bis jetzt eine Checkbox beinhaltet die bei aktivierten Zustand die Symbolleiste (Toolbar) einblenden soll und bei nicht aktivierten Zustand ausgebeldet werden soll.

Nun meine Frage wie Realisiere ich das? Bin noch blutiger Anfänger ^^
Habe aber über die wxWindows Doku schon herausbekommen wie Ich den Status herausbekomme und zwar mit IsChecked() das war es aber dann auch :roll:

Hier mal mein momentaner Versuch:

Code: Alles auswählen

# -*- coding: iso-8859-1 -*-
#-----------------------------------------------
# LyricList ist ein Programm um den Text (Lyric)
# von Music zum Nachsingen darzustellen.
#
# Datum: 22.08.2006
# Entwickler: $uper||man (webmaster@phpline.de)
#-----------------------------------------------
import wx

#>> Hauptframe
class MyFrame(wx.Frame):
    """
        MyFrame
        -----------------------
        Fenster mit den notwendigen 
        Attributen ausgeben!
    """
    
    #>> Menu Event IDs...
    _EventDateiBeenden = 10000                #Programm Beenden.
    _EventFensterSymbolleiste = 10001         #Symbolleiste ein- und ausblenden.
    
#-------------------------------------------------------------------------------------------------------------
    #>> Frame Initialisieren via __init__
    def __init__(self, Parent, id, Titel, Groesse):
        
        wx.Frame.__init__(self, Parent, id, Titel, 
                          style = wx.DEFAULT_FRAME_STYLE ^ (wx.MAXIMIZE_BOX),
                          size = Groesse)
        
        
        #>> Menu ausgeben.
        self.objMenu()
        
        #>> Symbolleiste.
        self._ZustandSymbolleiste = True
        if(self._ZustandSymbolleiste):
            self.objSymbolleiste()
        
        
        #>> Statusbar erstellen.
        self.CreateStatusBar()
        
#------------- Menüobjekte für den Frame !!! -----------------------------------------------------------------
    #>> Menu
    def objMenu(self):
        #>> MenuBar Objekt erstellen.
        MenuBar = wx.MenuBar()
        #>> Menu deklarieren/definieren.
        self.MenuDatei = wx.Menu()

        #>> Menu Datei...
        self.MenuDateiNew = wx.MenuItem(self.MenuDatei, 1001, "Neu...", "Neue LyricList erstellen")
        self.MenuDateiNew.SetBitmap(wx.Image('glymph/menu/symNew.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap())
        self.MenuDatei.AppendItem(self.MenuDateiNew)

        self.MenuDateiLoad = wx.MenuItem(self.MenuDatei, 1002, "\xd6ffnen...", "\xd6ffne LyricList Dokumment")
        self.MenuDateiLoad.SetBitmap(wx.Image('glymph/menu/symLoad.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap())
        self.MenuDatei.AppendItem(self.MenuDateiLoad)

        self.MenuDatei.AppendSeparator()
        
        self.MenuDateiSafe = wx.MenuItem(self.MenuDatei, 102, 'Speichern...', 'LyricList Speicerhn')
        self.MenuDateiSafe.SetBitmap(wx.Image('glymph/menu/symSafeFalse.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap())
        self.MenuDatei.AppendItem(self.MenuDateiSafe).Enable(False)

        self.MenuDatei.Append(107, "Speichern unter...", "LyricList speichern unter").Enable(False)

        self.MenuDatei.AppendSeparator()
    
        self.MenuDateiExit = wx.MenuItem(self.MenuDatei, self._EventDateiBeenden, 'Beenden', 'Das Programm Beenden')
        self.MenuDateiExit.SetBitmap(wx.Image('glymph/menu/symExit.png',wx.BITMAP_TYPE_PNG).ConvertToBitmap())
        self.MenuDatei.AppendItem(self.MenuDateiExit)
        self.Bind(wx.EVT_MENU, self.funcBeenden, id = self._EventDateiBeenden)
        
        self.MenuFenster = wx.Menu()
        self.MenuFenster.Append(self._EventFensterSymbolleiste, 'Symbolleiste', '', wx.ITEM_CHECK).Check(True)
        self.Bind(wx.EVT_MENU, self.funcSymbolleiste, id = self._EventFensterSymbolleiste)
        
        #>> Menü wie folgt sortieren.
        MenuBar.Append(self.MenuDatei, "Datei")
        MenuBar.Append(self.MenuFenster, "Fenster")
        self.SetMenuBar(MenuBar)
    
    #>> Symbolleiste
    def objSymbolleiste(self):
        vBox = wx.BoxSizer(wx.VERTICAL)
        self._Symbolleiste = wx.ToolBar(self, -1, style = wx.TB_HORIZONTAL)
        self._Symbolleiste.AddSimpleTool(1, wx.Image('glymph/menu/symNew.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Neu...','')
        self._Symbolleiste.AddSimpleTool(2, wx.Image('glymph/menu/symLoad.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Öffnen...','')
        self._Symbolleiste.AddSimpleTool(3, wx.Image('glymph/menu/symSafe.png', wx.BITMAP_TYPE_PNG).ConvertToBitmap(), 'Speichern...','').Enable(False)
        self._Symbolleiste.AddSeparator()
        self._Symbolleiste.Realize()
        vBox.Add(self._Symbolleiste, 0 , border = 5)
        
#------------- Menü Event deklaration !!! --------------------------------------------------------------------
    #>> Menu Funktion (Datei -> Beenden)
    def funcBeenden(self, Event):
        self.Close()
        
    def funcSymbolleiste(self, Event):
        if(self.MenuFenster.IsChecked(self._EventFensterSymbolleiste)):
            self._ZustandSymbolleiste = True
        else:
            self._ZustandSymbolleiste = False


#-------------------------------------------------------------------------------------------------------------
class LyricList(wx.App):
    """ Starten der LyricList Applikation. """

    def OnInit(self):
        Frame = MyFrame(None, -1, "Willkommen Gast! - LyricList v1.00", (350,350))
        Frame.Centre()
        Frame.Show(True)

        return True


#----------------------------------------------------------------------------

def main():

    _app = LyricList(0)
    _app.MainLoop()


if __name__ == "__main__":
    main()
Hoffe man kann durchblicken ist ja noch nicht viel geschen :D

MfG $uper||man
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Mit Show() bzw Hide(), also:

Code: Alles auswählen

    def funcSymbolleiste(self, Event): 
        if(self.MenuFenster.IsChecked(self._EventFensterSymbolleiste)): 
            self._ZustandSymbolleiste = True
            self._Symbolleiste.Show()
        else: 
            self._ZustandSymbolleiste = False 
            self._Symbolleiste.Hide()
MfG
HWK
$uper||man
User
Beiträge: 6
Registriert: Samstag 5. August 2006, 10:55
Wohnort: Berlin
Kontaktdaten:

Hallo,

@HWK ich danke dir aber warum gibs in der Doku von wxWindows die Funktionen Show und Hide unter der Rubrik wx.Toolbar nicht?

MfG $uper||man
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Weil sie schrott ist :)
WX ist nicht sonderlich gut dokumentiert.
Am besten helfen bei Problemen immer
die Demos, Google oder das Forum hier ^^
Francesco
User
Beiträge: 824
Registriert: Mittwoch 1. Dezember 2004, 12:35
Wohnort: Upper Austria

$uper||man hat geschrieben:Hallo,

@HWK ich danke dir aber warum gibs in der Doku von wxWindows die Funktionen Show und Hide unter der Rubrik wx.Toolbar nicht?

MfG $uper||man
weil es von wx.Window abgeleitet ist; und dort befindet sich Show und Hide.
Benutzeravatar
HWK
User
Beiträge: 1295
Registriert: Mittwoch 7. Juni 2006, 20:44

Genau Francesco, so ist es. Man muß auch in den übergeordneten Klassen schauen, um eine Übersicht über alle Methoden zu erhalten.
$uper||man
User
Beiträge: 6
Registriert: Samstag 5. August 2006, 10:55
Wohnort: Berlin
Kontaktdaten:

Hallo,

aha habe ich nicht gemacht und mal erlich welchen Anfänger kann man das zumuten ^^

Man hätte ja bei den dieversen Funktionen auch darauf hinweisen können (in der Doku) so ist man als Anfänger aufgeschmissen.

Aber beim nächsten mal schau ich besser nach ;)

MfG $uper||man
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hi!

Solch ein Wissen erhält man durch das Buch "wxPython In Action" von Robin Dunn, welches man sich anschaffen sollte - auch wenn es leider nur auf Englisch erhältlich ist. - Mein schlechtes Schulenglisch hat gereicht, um solche, doch interessanten Dinge mitzubekommen.

Grüße
JR
Benutzeravatar
Blattlaus
User
Beiträge: 55
Registriert: Donnerstag 24. August 2006, 08:55

HWK hat geschrieben:Genau Francesco, so ist es. Man muß auch in den übergeordneten Klassen schauen, um eine Übersicht über alle Methoden zu erhalten.
Wo wir schonmal dabei sind, gibt es irgendwo eine Doku, die so aufgebaut ist wie die Java-Api-Doc? Da stehen bei jeder Klasse zusätzlich noch eine kurzauflistung der ererbten Methoden dabei...das erleichtet einem die Suche häufig sehr.
JR
User
Beiträge: 286
Registriert: Montag 20. Februar 2006, 16:43
Wohnort: Berlin

Hi!

Diese API kenne ich nicht, bin aber gerade dabei auf Arbeit Java zu lernen.

Die docs zu wxPython sind recht logisch aufgebaut, wei die Methoden weitestgehend nicht doppelt beschrieben werden.
Das erleichtert die Pflege dieser Doku sicher ungemein.

Bei allen Klassen darauf achten, ob dort etwas von "derived from" steht. Dort führt ein Link zu der Klasse, von der die betrachtete Klasse erbt. Das kann über mehrere Ebenen so gehen.
Manchmal erstelle ich auch einfach eine Instanz einer Klasse, von der ich die Methoden kennen möchte und mache dann folgendes.
Beispiel:

Code: Alles auswählen

text = wx.StaticText(panel, -1, 'Test')
for i in dir(text):
  print i
Ansonsten empfehele ich nochmal das o.g. Buch, zu dem es zu jedem Kapitel ausführbare Skriptbeispiele zum Download unter http://www.manning.com/rappin gibt.

Grüße
JR
Benutzeravatar
Blattlaus
User
Beiträge: 55
Registriert: Donnerstag 24. August 2006, 08:55

JR hat geschrieben:Hi!

Diese API kenne ich nicht, bin aber gerade dabei auf Arbeit Java zu lernen.
Das ist aber schlecht, dass du die nicht kennst, wenn du Java lernst ;)
Hier: http://java.sun.com/j2se/1.4.2/docs/api/
JR hat geschrieben:Die docs zu wxPython sind recht logisch aufgebaut, wei die Methoden weitestgehend nicht doppelt beschrieben werden.
Das erleichtert die Pflege dieser Doku sicher ungemein.
Die Java Docs werden automatisch erstellt, aus den Klassen und Methodenbeschreibungen. Ich gehe davon aus, dass wxPython das ebenfalls tut. Daher dachte ich, es gäbe vielleicht noch alternative Dokumentationen
JR hat geschrieben:Bei allen Klassen darauf achten, ob dort etwas von "derived from" steht. Dort führt ein Link zu der Klasse, von der die betrachtete Klasse erbt. Das kann über mehrere Ebenen so gehen.
Eben, das ist total unpraktisch, man muss sich erst durch jede Klasse nach oben klicken, schauen ob es da die Methode gibt die man sucht und dann evtl. immer weiter nach oben.
Bei der Java-Doc gibt es bei jeder Klasse einen abschnitt "Methods inherited from <mutterKlasse>", "Methods inherited from <mutterklasse von mutterklasse>" usw. Da stehen eben nur die Funktionen als Links aufgelistet und wenn man draufklickt, landet man direkt bei der entsprechenden Methodenbeschreibung.
JR hat geschrieben:Manchmal erstelle ich auch einfach eine Instanz einer Klasse, von der ich die Methoden kennen möchte und mache dann folgendes.
Beispiel:

Code: Alles auswählen

text = wx.StaticText(panel, -1, 'Test')
for i in dir(text):
  print i
Mach ich - gezwungener Maßen - auch. Find ich aber irgendwie umständlich. Wenn ich ohnehin schon nen Editor, zwei Shells zum testen und dann auch nocht einen Browser für die Doku auf habe (und natürlich die anderen Fenster die man so braucht), will ich nicht auchnoch weitere Fenster aufmachen.
Antworten