2016-11-14 2 views
1

Wenn ich ein QGridLayout erstelle und ein paar Widgets hinzufüge, dehnen sich einige der Widgets nicht aus, um den Abschnitt des Layouts zu füllen, der sie enthält.Warum reichen einige Widgets nicht aus, um den maximalen Platz in einem Layout zu füllen?

class Grid(QGridLayout): 
    def __init__(self, grid_widget): 
     arrow = QPixmap("icons/arrow.png") #initial image is facing up 
     self.arrows = [] 
     locs = [(0,1), 
       (0,2), 
       (1,2), 
       (2,2), 
       (2,1), 
       (2,0), 
       (1,0), 
       (0,0)] 

     for rot in range(len(locs)): 
      transform = QTransform().rotate(45*rot) 
      icon = arrow.transformed(transform, Qt.SmoothTransformation) 
      self.arrows.append(ExpandButton(icon, rot, grid_widget)) #ExpandButton inherits from QPushButton 

     for i, loc in enumerate(locs): 
      self.addWidget(self.arrows[i], loc[0], loc[1]) 

     self.addWidget(grid_widget, 1, 1) 

Result

Wie Sie die QPushButtons an den Seiten sehen können, nicht strecken das Layout wie die QPushButtons an der Spitze zu füllen. Gibt es eine Möglichkeit, dies zu beheben, so dass sich die QPushButtons an den Seiten vertikal ausdehnen, um das Layout zu füllen, so wie sich die oben liegenden horizontal ausdehnen, um das Layout dort zu füllen?

+2

'button.setSizePolicy (QSizePolicy.Expanding, QSizePolicy.Expanding)'? – furas

+0

@furas Diese Lösung funktioniert, danke! Können Sie das unten posten, damit ich es akzeptieren kann? Ich hatte das schon früher versucht, als ich die Knöpfe nicht als eigene Klasse hatte, und es hat nicht funktioniert, also habe ich es nie wieder versucht. –

+0

@furas Weißt du auch, warum Widgets nicht automatisch den maximalen Speicherplatz ausfüllen? –

Antwort

2

Wie ich weiß Tasten (standardmäßig) nur horizontal erweitern - jeder erwarten niedrige Tasten.

Sie müssen vertikal und horizontal erweitern festlegen.

button.setSizePolicy(QSizePolicy.Expanding, QSizePolicy.Expanding) 
+0

Dies scheint nicht in [diesem Fall] zu funktionieren (http://stackoverflow.com/questions/40136655/pyqt-manuelles-resizing-menu-widget-does-nicht-resize-its-content). Irgendeine Idee warum? – ImportanceOfBeingErnest

+0

@ImportanceOfBeingErnest Qt hat visuelle GUI-Builder wie [Qt Designer] (http://doc.qt.io/qt-5/qtdesigner-manual.html) und [Qt Creator] (http://doc.qt.io/ qtcreator/index.html), mit dem Sie GUI erstellen und testen können - es wird für C++ - Code erstellt, nicht für Python, aber Sie können trotzdem verschiedene Eigenschaften (Größenrichtlinien, erweitern, etc.) testen und dann diese Informationen im Python-Code verwenden. – furas

Verwandte Themen