Seite 1 von 1

Toolbar ein- und ausblenden?

Verfasst: Freitag 25. August 2006, 13:59
von $uper||man
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

Verfasst: Freitag 25. August 2006, 14:45
von HWK
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

Verfasst: Freitag 25. August 2006, 15:03
von $uper||man
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

Verfasst: Freitag 25. August 2006, 15:22
von pr0stAta
Weil sie schrott ist :)
WX ist nicht sonderlich gut dokumentiert.
Am besten helfen bei Problemen immer
die Demos, Google oder das Forum hier ^^

Verfasst: Freitag 25. August 2006, 17:29
von Francesco
$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.

Verfasst: Freitag 25. August 2006, 19:15
von HWK
Genau Francesco, so ist es. Man muß auch in den übergeordneten Klassen schauen, um eine Übersicht über alle Methoden zu erhalten.

Verfasst: Freitag 25. August 2006, 19:57
von $uper||man
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

Verfasst: Donnerstag 26. Oktober 2006, 00:04
von JR
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

Verfasst: Donnerstag 26. Oktober 2006, 08:18
von Blattlaus
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.

Verfasst: Donnerstag 26. Oktober 2006, 08:30
von JR
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

Verfasst: Donnerstag 26. Oktober 2006, 10:12
von Blattlaus
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.