Qt.ScrollBarAsNeeded zeigt die Bildlaufleiste nicht an, wenn sie tatsächlich benötigt wird

8

Ich implementiere eine Python-Anwendung mit PyQt5 und habe einige Probleme bei der Verwendung von QScrollArea festgestellt. Dies ist das Layout meiner Anwendung:

Es besteht aus 2 QScrollArea (linkes und rechtes Fenster) und einem QMdiArea (mittleres Widget), das in einem QHBoxLayout angeordnet ist. Wenn ich die Widgets im linken Bereich durch Klicken auf die Steuerelemente expandiere und die Höhe von QWidget von QScrollArea größer ist als die Höhe von QScrollArea selbst, erscheint die Bildlaufleiste (wie erwartet), aber es ist Überschneidung des Inhalts von QScrollArea . Um dieses Problem zu beheben, habe ich die resizeEvent neu implementiert und den notwendigen Platz für die Bildlaufleiste hinzugefügt (bis zu diesem Punkt funktioniert alles.)

Wenn ich nun das Hauptfenster manuell skaliere, erhält der linke Bereich mehr Platz und die Bildlaufleiste sollte verschwinden (aber nicht) und sie überlappt die Widgets des Bereichs:

Ich habe auch versucht, die Sichtbarkeit der Bildlaufleiste manuell zu ändern (wenn resizeEvent empfangen wird): Wenn ich dies tue, kann ich die Bildlaufleiste erfolgreich ausblenden, aber dann kann ich sie nicht mehr anzeigen (egal, ob ich% co_de aufruft) % in der Bildlaufleiste). Dies führt dazu, dass der Platz für die Bildlaufleiste hinzugefügt wird, die Bildlaufleiste jedoch fehlt und der Inhalt des Bereichs nicht gescrollt werden kann:

Hier ist die Implementierung des Bereichs-Widgets:

%Vor%

Was ich erreichen möchte, ist ziemlich einfach (aber praktisch scheint es nicht so einfach zu sein): Ich möchte die vertikale Bildlaufleiste in meinen linken / rechten Fenster-Widgets nur dann dynamisch anzeigen, wenn sie benötigt wird, und den nötigen Platz für die Bildlaufleiste hinzufügen Es überlappt also nicht die Widgets in setVisible(True) .

Bevor jemand fragt, habe ich bereits versucht, so etwas zu tun:

%Vor%

was dazu führt, dass meine Anwendung abstürzt. Ich hoffe, dass jemand dieses Problem bereits erkannt hat und mir helfen kann.

BEARBEITEN: Ich benutze PyQt5.5 kompiliert gegen Qt5.5 unter OSX Yosemite 10.10.4 mit clang.

    
Daniele Pantaleone 31.08.2015, 18:36
quelle

1 Antwort

3

Alles scheint wie erwartet zu funktionieren, ohne dass es Umgehungsmöglichkeiten gibt. Ich vermute jedoch stark, dass es zusätzliche Einschränkungen in Ihrem echten Code gibt, die Sie in Ihrer Frage nicht angegeben haben.

AKTUALISIEREN

Unten ist ein einfaches Beispiel, das die Größe der Scrollareas ändert, wenn die Scrollbalken ein- / ausgeblendet werden:

%Vor%     
ekhumoro 04.09.2015, 22:26
quelle