Ändern der Größe eines Dialogs mit PyQt4

8

Ich habe dieses Beispielcode:

%Vor%

Ich führe es aus und wenn moreButton geklickt hat, erscheint oder verschwindet die ComboBox. Die Größe von Dialog ändert sich ebenfalls. Aber wenn ich die Methode zu ändern:

%Vor%

(um die Anfangsgröße festzulegen, wenn Combo ausgeblendet ist) funktioniert die Größenanpassung nicht. Wenn ich jedoch auf resizeButton klicke - was mit der gleichen Methode verbunden ist - funktioniert die Größenanpassung richtig.

Ich weiß, dass es andere Möglichkeiten gibt, ein solches Ergebnis zu erzielen (zB. layout.setSizeConstraint (QLayout.SetFixedSize)), aber ich möchte die Größe explizit deklarieren.

Was mache ich falsch?

    
ilstam 22.12.2011, 18:59
quelle

4 Antworten

5

Meine Vermutung ist, dass Sie versuchen, die QDialog zu skalieren, bevor sie Zeit hat, ihre Größe nach dem Ausblenden von Inhalten anzupassen. Wenn also resize aufgerufen wird, hat es eine minimumSize , die sicherstellt, dass die Schaltflächen und die Combobox sichtbar sind. Wenn du es nach einiger Zeit nennst , hat es jetzt richtig miminumSize und reagiert richtig.

Eine schnelle Lösung überschreibt minimumSize vor der Größenänderung manuell:

%Vor%

Aber wenn ich das angehen würde, würde ich die Verwaltung der Größenanpassung einfach dem Layout überlassen und sizeConstraint verwenden. Das ist, was diese Layouts für sowieso.

    
Avaris 22.12.2011, 20:40
quelle
3

Diese Frage und die Antworten waren in meiner Situation hilfreich: Automatische Größenanpassung eines QDialogs mit QLayout / QVBoxLayout, das eine QLabel mit Inhalt / Nachricht variabler Größe an den Benutzer enthält, während der Doppelpfeilcursor am Rand des gesamten QDialog-Containers vermieden wird . Die sizePolicy des Dialogs selbst wurde auf Fixed gesetzt und dennoch würden die Pfeile erscheinen, obwohl sie nicht in der Größe verändert werden können (würde sich nicht bewegen). Und obwohl das innere Layout automatisch / magisch die Größe ändert, hat die Verwendung von SetFixedSize auf dem Layout (Überraschung, Überraschung) die lästigen Doppelpfeile des gesamten QDialogs verschwinden lassen.

%Vor%

... und jetzt passt sich das Dialogfeld dem Volumen an, das im Etikett enthalten ist, aber der Dialog selbst ist (scheinbar) nicht in der Größe des Benutzers veränderbar, was gut für Informationen und Fehlermeldungen ist.

schien mir nicht einleuchtend, also dachte ich, dass es wert wäre, hier für andere hinzukommen.
Ein bisschen mehr Detail ...

%Vor%     
gseattle 10.05.2012 17:16
quelle
2

Dieses Problem scheint durch die Reihenfolge verursacht zu werden, in der Ereignisse verarbeitet werden.

Hier ist eine einfache Lösung:

%Vor%     
ekhumoro 22.12.2011 20:54
quelle
1

hast du das versucht? es sei denn, ich missverstehe das, was du tun willst.

%Vor%

edit: Die endgültige Antwort ist layout3.setSizeConstraint (QLayout.SetNoConstraint)

    
NotCamelCase 22.12.2011 19:33
quelle

Tags und Links