Unpräzises Compilen von .ui in .py

Python und das Qt-Toolkit, erstellen von GUIs mittels des Qt-Designers.
Antworten
Benutzeravatar
styleart
User
Beiträge: 5
Registriert: Sonntag 15. Juli 2012, 00:16

Hallo Freunde!

Bin hier (und auch was Python angeht) neu und bin da mal auf eine Frage gestoßen...

Ich entwickle gerade eine GUI in Qt Designer und habe gemerkt, dass nach dem compilen (pyuic4 gui.ui -o gui.py) die Elemente auf der Oberfläche anders geordnet werden. Hier mal 2 Screenshots zum Vergleich - links ist die Vorschau aus Qt, rechts die ausgeführte Version von Eclipse:

Bild Bild

Also man sieht oben dass die beiden Labels jetzt um 1px unterscheiden, wobei es so nicht sein soll. Und links im "Menu" gehen die Anordnungen von Buttons verloren. Einmal sieht man da das Label, was unter den Button gehen sollte, dann halt die Buttons selbst, einige wurden "höher" gelegt, somit erscheinen da solche Linien.

Mache ich da was falsch oder ist mit solchen Fehlern bei Umwandlung zu rechnen?

Gruß
BlackJack

@styleart: Wie hast Du denn Label und Buttons platziert? Normalerweise steckt man so etwas in Layouts und die kümmern sich dann darum das alles ordentlich angeordnet ist. Label ”unter” etwas zu verschieben klingt auch nicht gerade nach einer guten Idee.
Benutzeravatar
styleart
User
Beiträge: 5
Registriert: Sonntag 15. Juli 2012, 00:16

@BlackJack, für mich war es irgendwie die einfachste Lösung um bei diesem einen Label oben abgerundete Kanten zu bekommen und unten die gerade-abgeschnittenen. Wie ich das mit CSS realisieren kann, hab ich im Internet nicht finden können... Da muss ich mich wohl nochmal an die Suche machen.

Zum Layout - ich habe da kein Layout angelegt sondern Frames benutzt. Standardweise wird da wohl auch kein Layout geben. Kann ja sein (oder ist), dass es doof war, bin ja auch Anfänger :) Die Frage ist nur: hat denn das Layouten damit was zu tun, dass einige Elemente einfach in Ebenen verschoben werden (also höher/tiefer)?
BlackJack

@styleart: Frames und Layouts sind Orthogonal. Und Layouts muss man im Designer IIRC immer explizit pro Container-Widget festlegen. Automatisch werden die nicht gesetzt.

Falls Du also die Elemente alle per Maus an absolute Positionen verschoben und eine Grösse festgelegt hast, dann solltest Du die GUI noch einmal überarbeiten.
Benutzeravatar
styleart
User
Beiträge: 5
Registriert: Sonntag 15. Juli 2012, 00:16

Alles klar, danke für die Hilfe!

#edit
@BlackJack, es hat übrigens nach deinem Tipp super geklappt, alles ist jetzt ordentlich. Außer, dass ich halt mit dem Layouten an sich klarkommen muss, da es ja auch ein wenig tricky ist, wenn man sich nicht auskennt :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dafür funktioniert die App immer noch wenn man das Fenster größer oder kleiner macht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
styleart
User
Beiträge: 5
Registriert: Sonntag 15. Juli 2012, 00:16

Leonidas hat geschrieben:Dafür funktioniert die App immer noch wenn man das Fenster größer oder kleiner macht.
Genau das funktioniert ja soweit erstmal nicht. Ich habe es schon mit verschiedenen Ansätzen versucht, kriege aber immer das gleiche als Ergebnis: ziehe ich das Fenster größer, vergrößern sich die Elemente mit der MainWindow nicht. Aber ich tippe eher auf falschen Ansatz. Wie ist es denn nun richtig? Aus der Dokumentation von Qt ist es schlecht ersichtlich, bzw. funktioniert es so, wie es dort gezeigt wird nicht mehr. Könnt ihr mir paar Fragen beantworten?

1) Wie lege ich ein Top-Level Layout an? Grid oder andere auf Fenstergröße zu vergrößern ist definitiv falsch, weil es sich dann nicht auf Fenstergröße bei Vergrößerung/Verkleinerung anpasst.
2) Wie lege ich in einem Top-Level Layout weitere Layouts an (also Layouts in Layouts)? Muss ich auf Top-Level erstmal Widget hinzufügen?
Und noch eine Frage, aber nicht direkt zum Layout:
3) Wenn ich sagen wir mal ein "Frame" in der Mitte habe, in welchem dann je nach Buttonclick verschiedene Inhalte gezeigt werden sollen (Text Edit, Label, QWebView etc) - wie organisiere ich das in Qt? Was lege ich da als Hauptelement an? Widget?

In den ganzen Tutorials die man im Internet findet wird nichts mit Layouts gezeigt. Die Leute schieben einfach Buttons und Labels ins Fenster und alles ist schön...

Gruß
lunar

@styleart

Ad 1) Du musst dem Fenster im Designer eben das richtige Layout zuweisen. Dazu klickst Du in den leeren Bereich des Fensters – also nicht auf ein darin befindliches Steuerlement – oder selektierst das Fenster in der "Objektanzeige", und wählst anschließend aus der Werkzeugleiste das gewünschte Layout aus.
Ad 2) Entweder ziehst Du das gewünschte Layout aus der "Widget Box" auf das Fenster, und ziehst anschließend Deine Steuerelemente in das so platzierte Layout, oder Du ziehst die Steuerelemente so in das Fenster, selektierst sie anschließend alle, und wählst dann aus der Werkzeugleiste das gewünschte Layout aus. Bei beiden Wegen kannst Du auch nachträglich weitere Widgets in das bereits platzierte Layout einfügen.
Ad 3) Dafür verwendet man normalerweise "QStackedWidget" ("Stacked Widget" im Designer). Dieses Steuerelement dient als Container für mehrere andere, zeigt aber immer nur eines an.
Benutzeravatar
styleart
User
Beiträge: 5
Registriert: Sonntag 15. Juli 2012, 00:16

@lunar, danke, jetzt hab ich es. Hab mich erstmal gewundert, warum die Werkzeugleiste bei mir inaktiv war, aber habs dann rausbekommen :)
Das mit Stacked Widget - ist super Tipp, ist echt toll das Element!
Aber zu 2) Ist doch gar nicht möglich so alles hinzufügen, wie man es haben möchte. Wenn man das Top-Level Layout festgelegt hat, werden alle Elemente oder Layouts die man versucht in das Fenster einzufügen automatisch auf die Größe des Top-Level Layouts vergrößert (also auf volles Fenster). Man kann dann in Eigenschaften ein wenig rumfummeln, dann bringt man das in die richtige Position, fügt man aber noch was anderes ein - verschiebt er schon wieder alles. Ich werd bald wahnsinnig! Mittlerweile gucke ich das Programm wie der Kater auf dem Avatar an :)
lunar

@styleart: Deinen Einwand zu 2) verstehe ich nicht. Zeige doch bitte einen Screenshot, oder besser noch die UI-Datei selbst, und erkläre genau, was Du möchtest, und was Du stattdessen erhältst.

Jedenfalls kannst Du wie gesagt unterhalb des Toplevel-Layouts weitere Layouts einfügen, indem Du sie aus der Widget-Box in das Fenster ziehst. Alternativ kannst Du auch Container-Widgets verwenden. Möchtest Du verhindern, dass das Layout den gesamten Raum einnimmt, kannst Du Spacer verwenden, um neben dem Layout Leerraum einzufügen.
Benutzeravatar
xWolf
User
Beiträge: 62
Registriert: Sonntag 2. November 2008, 01:21
Wohnort: China

styleart hat geschrieben:...Ich werd bald wahnsinnig! Mittlerweile gucke ich das Programm wie der Kater auf dem Avatar an :)
Also dieser Thread ist schon etwas in den Tagen...
Ist das Problem nun geloest?
Ansonsten haette ich vielleicht was??!!
Antworten