Seite 1 von 1
QListWidget/QScrollArea mit einigen QGroupbox füllen
Verfasst: Mittwoch 25. September 2013, 10:22
von Tyll
Hi Leute

,
Ich bin immoment für ein Programm die GUI am verfeinern (schönheits korrekturen, bessere übersichtlichkeit...)
So jetzt zu dem Problem ! Es können der GUI je nach bedarf Groupbox Elemente hinzugefügt werden, da die Anzahl unbeschränkt ist kann es vorkommen das die GUI zu groß wird und nicht mehr komplett auf dem Bildschirm angezeigt werden kann.
Dem möchte ich entgegenwirken, indem ich diese Elemente einem QListWidget/QScrollArea hinzufüge, leider können diese Beiden keine QLayout verwenden. Habt ihr viellecht ne idee wie ich das umgehen kann oder eine Andere möglichkeit mein Problem zu lösen!
Re: QListWidget/QScrollArea mit einigen QGroupbox füllen
Verfasst: Mittwoch 25. September 2013, 11:15
von BlackJack
@Tyll: Ich weiss nicht ob ich das Problem richtig verstehe aber kann es sein dass Du einfach noch nicht darauf gekommen bist die Sachen nicht direkt in das ScrollArea zu stecken sondern in ein Widget und das dann in das ScrollArea!?
Re: QListWidget/QScrollArea mit einigen QGroupbox füllen
Verfasst: Mittwoch 25. September 2013, 12:40
von Madmartigan
Tyll hat geschrieben:Dem möchte ich entgegenwirken, indem ich diese Elemente einem QListWidget/QScrollArea hinzufüge, leider können diese Beiden keine QLayout verwenden
Das ist so nicht ganz korrekt, nur funktionieren gerade diese beiden QWidgets etwas anders, was Child-Elemente anbelangt. QGroupbox Widgets als Items in ein QListWidget zu packen, halte ich nicht für sinnvoll. Machbar ist es zwar, aber wozu der Aufwand?
QScrollArea ist doch der ideale Kandidat für expandierende UIs. Schau dir die
Referenz zur QScrollArea und speziell
setWidget() an, dann siehst du wie das Widget verwendet wird. Die Kontrolle über die Anordung der Items per QLayout ist definitiv möglich.
Re: QListWidget/QScrollArea mit einigen QGroupbox füllen
Verfasst: Montag 30. September 2013, 15:44
von Tyll
Also ich hab jetzt ein paar kleine Änderungen gemacht die leider das Problem noch nicht ändern.
Ich füge jetzt dem QScrollArea ein QGroupBox hinzu, so lange es bei einer GroupBox bleibt funktioniert es auch.
Die Funktion setWidget() von QScrollArea ersetzt aber leider immer das vorher hinzugefügte Objekt mit dem neunen.
Ich habe auch schon versucht dem QScrollArea erst ein LayOut zu zuweisen und dann diesem Layout mehrere meiner Groupboxen.
Das funktioniert auch ohne Fehlermeldung leider werden keine Objekte angezeigt :/
Vielleicht stehe ich nur auf dem Schlauch aber irgentwie sehe ich keine schnelle lösung für mein Problem!
Re: QListWidget/QScrollArea mit einigen QGroupbox füllen
Verfasst: Montag 30. September 2013, 16:16
von Madmartigan
Tyll hat geschrieben:[...]Die Funktion setWidget() von QScrollArea ersetzt aber leider immer das vorher hinzugefügte Objekt mit dem neunen.[...]
Richtig, damit macht die Funktion aber exakt das, was sie machen soll.
Du benötigst ein QWidget, QFrame oder was auch immer du als Container verwenden möchtest, du setzt dessen SizePolicy entsprechend auf
Expanding, gibst dem Objekt das gewünschte Layout, dem Layout fügst du deine GroupBoxen hinzu und rufst dann die Funktion
QScrollArea.setWidget(DeinContainerWidget) auf.
Re: QListWidget/QScrollArea mit einigen QGroupbox füllen
Verfasst: Dienstag 1. Oktober 2013, 09:10
von Tyll
Danke für die Hilfe hab es jetzt auch so umgesetzte aber leider wird weiterhin kein Element in dem ScrollArea dargestellt!
Re: QListWidget/QScrollArea mit einigen QGroupbox füllen
Verfasst: Dienstag 1. Oktober 2013, 09:15
von BlackJack
@Tyll: Dann bräuchten wir wohl mal ein minimales aber lauffähiges Beispiel Deines Problems.
Re: QListWidget/QScrollArea mit einigen QGroupbox füllen
Verfasst: Dienstag 1. Oktober 2013, 14:40
von Tyll
So ich hoffe das ist ok so sonst muss ich es noch mehr kurzen und ich habe in diesem Fall eine leere grouobox hinzugefügt
Code: Alles auswählen
from __future__ import unicode_literals
import sys, os, random
from PyQt4 import QtGui, QtCore, Qt
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import numpy as np
import pyqtgraph as pg
import serial
import io
import time
import threading
class ApplicationWindow(QtGui.QMainWindow):
#GUI Elemente
EinstellungenCombo = None
statusLabel = None
#Klassen Objekte
Einstellungen = []
LadeEinstellungen = None
#Eigenschaften
baudratenListe = '2400 4800 9600 14400 19200 28800 38400 57600 76800 115200 230400 250000'
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.setWindowTitle("application main window")
#Erstelle Menuepunt Quit
self.file_menu = QtGui.QMenu('&File', self)
#Erstelle Menuepunkt Help
self.main_widget = QtGui.QWidget(self)
mainGuiLayoutSettings = QtGui.QGridLayout()
PlotAnzahlButton = QtGui.QPushButton("Plot hinzufuegen")
PlotAnzahlButton.clicked.connect(lambda: containerLayout.addWidget(QtGui.QGroupBox()))
darstellungButton = QtGui.QPushButton("Darstellungs Einstellungen hinzufuegen")
geraetButton = QtGui.QPushButton("Geraet Einstellungen hinzufuegen")
mainGuiLayoutSettings.addWidget(PlotAnzahlButton ,0,0)
mainGuiLayoutSettings.addWidget(darstellungButton ,0,1)
mainGuiLayoutSettings.addWidget(geraetButton ,0,2)
GUILayout = QtGui.QVBoxLayout(self.main_widget)
mainBlub = QtGui.QGridLayout()
GUILayout.addLayout(mainGuiLayoutSettings)
scrollArea = QtGui.QScrollArea()
GUILayout.addWidget(scrollArea)
containerWidget = QtGui.QWidget()
containerWidget.setSizePolicy(QtGui.QSizePolicy.Expanding,QtGui.QSizePolicy.Expanding)
containerLayout = QtGui.QBoxLayout(QtGui.QBoxLayout.TopToBottom)
containerWidget.setLayout(containerLayout)
scrollArea.setWidget(containerWidget)
self.main_widget.setFocus()
scrollArea.show()
self.setCentralWidget(self.main_widget)
self.statusBar().showMessage("All hail matplotlib!", 2000)
print QtGui.QDesktopWidget().screenGeometry()
print "----------------------"
print "Programm -> Start"
print "----------------------"
qApp = QtGui.QApplication(sys.argv)
aw = ApplicationWindow()
aw.setWindowTitle("Test")
aw.show()
print "Programm -> GUI Gestartet"
sys.exit(qApp.exec_())
#qApp.exec_()
print "----------------------"
print "Programm -> Ende"
Re: QListWidget/QScrollArea mit einigen QGroupbox füllen
Verfasst: Dienstag 1. Oktober 2013, 16:15
von BlackJack
@Tyll: Bei
http://qt-project.org/doc/qt-4.8/qscrol ... nd-layouts steht im zweiten Absatz was man machen muss wenn man dynamisch Widgets hinzufügen möchte, damit die auch angezeigt werden.

Re: QListWidget/QScrollArea mit einigen QGroupbox füllen
Verfasst: Dienstag 1. Oktober 2013, 20:37
von Madmartigan
Also, abgesehen von der Nonkonformität des Codes ist das einzige Problem, welches du hast, ein Problem der Anzeige.
Setze QScrollArea.setWidgetResizable(True) und dein Beispiel funktioniert.
Re: QListWidget/QScrollArea mit einigen QGroupbox füllen
Verfasst: Dienstag 8. Oktober 2013, 10:52
von Tyll
Ja jetzt klappt es -.-
Habs wohl überlesen und nicht richtig verstanden
Danke für die Hilfe
