Seite 1 von 1

wxGlade - Handhabung...

Verfasst: Donnerstag 2. Dezember 2004, 10:30
von jens
Wie aus dem Thread http://python.sandtner.org/viewtopic.php?t=2237 hervorhgegangen ist, scheit für mich wxGlade noch die beste Alternative zu sein, eine GUI zu basteln...
Leider hab ich damit aber noch ein paar Schwirigkeiten... Insbesondere mit dem editieren einer bestehenden GUI...

Damit man nicht, bei einem verwurschteltem Tree, wieder von vorn anfangen muß, hab ich mit überlegt, einfach ein neues Frame zu erstellen und aus dem alten Frame die sachen per Copy&Paste an die richtigen Stellen einzufügen...

Leider wird dabei bei den kopierten Elementen immer ein "_copy" angehängt ... Doch man kann es einfach in der Projektdatei *.wxg per suchen&ersetzten in einem Editor wieder löschen...

Was ich doof finde, man kann nicht gut sehen, wie die Sizer aufgetreilt sind, kann man irgendwie Trennlinien sichtbar machen?

Und vor allem: Ich verstehe die Sizer nicht so ganz... Kann ich mir das vorstellen wie Tabellen beim alten HTML-Gefrickel??? Nur dann verstehe ich nicht, wie ich die Größen der Zellen festlegen kann...
Wie kann ich sagen, diese Zelle soll Minimal größe erhalten, also gerade so groß, das die Elemente reinpassen und die andere Zelle soll den Rest Raum ausfüllen...

Verfasst: Donnerstag 2. Dezember 2004, 14:18
von Leonidas
Was die Tabellen angeht, ich denke es gibt meim erstellen der Sizer eine Möglichkeit sowas wie wx.EXPAND anzugeben (du brauchsts aber andersrum, nur weiß ich den Variablennamen gerade nicht)

Hast du die UsingSizers aus dem Wiki angeschaut? Aja, du solltest dich unbedingt in der wxPython-users Mailingliste anmelden, dort gibt es den besten Support, und viel Traffic.

Verfasst: Donnerstag 2. Dezember 2004, 14:26
von jens
wx.EXPAND maximiert aber nur in der Breite...
Also ich hab einen Sizer mit drei vertikale Spalten:
  • oben - ein einzeiliger Text
    mitte - ein Text-Feld
    unten - drei Buttons (in einem Sizer)
Das Textfeld in der Mitte soll halt groß sein :) Text oben und Buttons unten sollten nur so viel Platz einnehmen, das es eben so passt...

Verfasst: Donnerstag 2. Dezember 2004, 14:54
von Leonidas
Ich habe sowas:

Code: Alles auswählen

self.parabar.Add(self.wordchoice, 1, wx.EXPAND)
Die wx.EXPANDs gibt man durch das ua durch die 1 an, beim erstellen von Sizern, beim Hinzufügen von Wigdets, überall.

Verfasst: Donnerstag 2. Dezember 2004, 15:13
von jens
Also ich hab bei wxGlade bei dem TextFeld "wx.EXPAND" angegeben... aber raus kommt folgende Zeilen:

[...]
self.info_textfeld = wx.TextCtrl(self, -1, "", style=wx.TE_MULTILINE|wx.TE_LINEWRAP)
[...]
self.info_textfeld.SetFont(wx.Font(8, wx.MODERN, wx.NORMAL, wx.NORMAL, 0, ""))
[...]
sizer_2.Add(self.info_textfeld, 0, wx.ALL|wx.EXPAND, 3)
[...]


In der Editor-Ansicht von wxGlade ist das Textfeld auch richtig groß... Wenn ich allerdings auf Preview gehe, ist es nur ein paar Zeilen hoch...

Verfasst: Donnerstag 2. Dezember 2004, 15:21
von Leonidas
Ich habe wxGlade nicht genutzt, teils weil ich sonst den Code den er generiert nicht verstehen würde und das tät mir gar nicht gefallen, deswegen habe ich ja XRCed bevorzugt.

Hast du gespeichert? EXPAND vergrößert es soweit wie der Sizer es zulässt.

Verfasst: Freitag 3. Dezember 2004, 13:51
von jens
Also ich bekomme es immer noch nicht hin.... hier hab ich es mal aus dem *.xrc rausgeschnitten:

Code: Alles auswählen

<object class="wxFrame" name="CDselect" subclass="CDselectFrame">
    <style>wxDEFAULT_FRAME_STYLE</style>
    <size>396, 422d</size>
    <title>CD Auswahl</title>
    <object class="wxBoxSizer">
        <orient>wxVERTICAL</orient>
        <object class="sizeritem">
            <option>1</option>
            <flag>wxEXPAND</flag>
            <object class="wxListCtrl" name="CDliste">
                <style>wxLC_REPORT|wxSUNKEN_BORDER</style>
                <size>390, 50</size>
            </object>
        </object>
        <object class="sizeritem">
            <flag>wxALL</flag>
            <border>3</border>
            <object class="wxStaticText" name="CDname">
                <label>label_1</label>
            </object>
        </object>
        <object class="sizeritem">
            <option>1</option>
            <flag>wxEXPAND</flag>
            <object class="wxListCtrl" name="TitelListe">
                <style>wxLC_REPORT|wxSUNKEN_BORDER</style>
                <size>390, 300</size>
            </object>
        </object>
        <object class="sizeritem">
            <option>1</option>
            <flag>wxEXPAND</flag>
            <object class="wxBoxSizer">
                <orient>wxHORIZONTAL</orient>
                <object class="sizeritem">
                    <flag>wxALL</flag>
                    <border>3</border>
                    <object class="wxButton" name="button_useCD">
                        <label>CD auswählen</label>
                    </object>
                </object>
                <object class="sizeritem">
                    <flag>wxALL</flag>
                    <border>3</border>
                    <object class="wxButton" name="button_abbruch">
                        <label>abbruch</label>
                    </object>
                </object>
            </object>
        </object>
    </object>
</object>

Verfasst: Freitag 3. Dezember 2004, 14:56
von jens
So, ich hab mal versucht über XML-Datei die GUI anzeigen zu lassen:

Code: Alles auswählen

from wxPython.wx  import *
from wxPython.xrc import *



class MyApp( wx.App ):
    def OnInit( self ):
        self.res   = wxXmlResource( "Layout.xrc" )
        self.mainFrame = self.res.LoadFrame( None, "Hauptmenue" )
        self.mainFrame.Show(1)

        return 1

if __name__ == '__main__':
    app = MyApp( redirect=False )
    app.MainLoop()
Ich sehe auch die GUI. Komischerweise ist diese aber ganz anders Skaliert, wenn ich es mit der *.py-Datei vergleiche, die wxGlade ausgespuckt hat :(

Außerdem bekomme ich eine Fehler-Meldung, dach dem das Frame zu sehen ist:

Code: Alles auswählen

14:50:37: Subclass 'mainFrame' not found for resource 'Hauptmenue', not subclassing!
14:50:37: No handler found for XML node 'object', class 'wxMenuItem'!
Die zweite Zeile kann ich vielleicht noch verstehen, da ich überhaupt keine Event-Handler definiert hab... Aber was bedeutet die erste Zeile???

Mir scheint es wesentlich mehr Arbeit zu sein, wenn man übner XML geht, was?