setgeometry python qt layout pyqt qmainwindow

python - setgeometry - qwidget pyqt4



Cambia el tamaño de QMainWindow a un tamaño mínimo después del contenido de los cambios de diseño (1)

Puede cambiar el tamaño de la ventana a minimumSizeHint() después de que se minimumSizeHint() la cantidad de widgets:

self.resize(minimumSizeHint())

Esto reducirá la ventana al tamaño mínimo. Pero debe considerar que el tamaño mínimo no se computa hasta que algunos eventos se procesen en el ciclo de eventos. Entonces, cuando se cambia la cantidad de botones, solo procesa el ciclo de eventos para algunas iteraciones y luego redimensiona al mínimo.

Es como :

for i in range(0, 10): QApplication.processEvents() self.resize(minimumSizeHint())

Otra opción es disparar un solo QTimer que llama a un espacio en el que cambia el tamaño de la ventana al mínimo. De esta manera, al cambiar el tamaño de la ventana, la sugerencia de tamaño mínimo se calcula correctamente.

Estoy usando una subclase de QMainWindow , en la cual declaro un widget central. Este widget contiene, entre otras cosas, un QGridLayout , que contiene un conjunto de botones. La cantidad de botones puede crecer o reducirse, dependiendo de la entrada del usuario. El espaciado se establece en cero, por lo que todos los botones se agrupan. Por defecto, se ve así:

Si se aumenta la cantidad de botones, la cuadrícula y la ventana también crecerán; sin embargo, si se reduce la cantidad de botones, se verá así:

Ahora me gustaría cambiar el tamaño de la ventana / diseño / widget para que todos los botones puedan usar el espacio mínimo. He intentado varias cosas, pero todo fue en vano. Eché un vistazo a esta y a esta pregunta, así como a varios hilos en el tablero de Qt, pero ninguno de ellos funcionó para mí.

Mi diseño es construir de la siguiente manera:

self.grid = QtGui.QGridLayout() self.grid.setSpacing(0) hBox = QtGui.QHBoxLayout() hBox.addWidget(...) vBox = QtGui.QVBoxLayout(self.widget) vBox.addLayout(hBox) vBox.addLayout(self.grid) self.setCentralWidget(self.widget)

Intenté cambiar el tamaño con ...

self.widget.layout().activate() self.resize(self.minimumSize()) # self.resize(self.sizeHint())

... y varios otros métodos. También intenté establecer la política de tamaño de mi ventana y cuadrícula.