wxGlade - Handhabung...

Plattformunabhängige GUIs mit wxWidgets.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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>
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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?
Antworten