PyQt - Gestión de diseño

Un widget de GUI se puede colocar dentro de la ventana del contenedor especificando sus coordenadas absolutas medidas en píxeles. Las coordenadas son relativas a las dimensiones de la ventana definidas por el método setGeometry ().

sintaxis de setGeometry ()

QWidget.setGeometry(xpos, ypos, width, height)

En el siguiente fragmento de código, la ventana de nivel superior con dimensiones de 300 por 200 píxeles se muestra en la posición (10, 10) del monitor.

import sys
from PyQt4 import QtGui

def window():
   app = QtGui.QApplication(sys.argv)
   w = QtGui.QWidget()
	
   b = QtGui.QPushButton(w)
   b.setText("Hello World!")
   b.move(50,20)
	
   w.setGeometry(10,10,300,200)
   w.setWindowTitle(“PyQt”)
   w.show()
   sys.exit(app.exec_())
	
if __name__ == '__main__':
   window()

UN PushButton El widget se agrega en la ventana y se coloca en una posición 50 píxeles hacia la derecha y 20 píxeles debajo de la posición superior izquierda de la ventana.

Esta Absolute Positioning, sin embargo, no es adecuado debido a las siguientes razones:

  • La posición del widget no cambia incluso si se cambia el tamaño de la ventana.

  • Es posible que la apariencia no sea uniforme en diferentes dispositivos de visualización con diferentes resoluciones.

  • La modificación en el diseño es difícil ya que puede necesitar rediseñar todo el formulario.

La API de PyQt proporciona clases de diseño para una gestión más elegante del posicionamiento de los widgets dentro del contenedor. Las ventajas de los administradores de diseño sobre el posicionamiento absoluto son:

  • Los widgets dentro de la ventana cambian de tamaño automáticamente.

  • Garantiza una apariencia uniforme en dispositivos de visualización con diferentes resoluciones.

  • Es posible agregar o eliminar widgets dinámicamente sin tener que rediseñar.

Aquí está la lista de clases que discutiremos una por una en este capítulo.

No Señor. Clases y descripción
1 QBoxLayout

La clase QBoxLayout alinea los widgets vertical u horizontalmente. Sus clases derivadas son QVBoxLayout (para organizar widgets verticalmente) y QHBoxLayout (para organizar widgets horizontalmente).

2 QGridLayout

Un objeto de clase GridLayout se presenta con una cuadrícula de celdas dispuestas en filas y columnas. La clase contiene el método addWidget (). Se puede agregar cualquier widget especificando el número de filas y columnas de la celda.

3 QFormLayout

QFormLayout es una forma conveniente de crear un formulario de dos columnas, donde cada fila consta de un campo de entrada asociado con una etiqueta. Como convención, la columna de la izquierda contiene la etiqueta y la columna de la derecha contiene un campo de entrada.