es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

PyQt5: disposición de botones con ancho de columna igual.

Estaba utilizando PyQt5 para crear un diseño de cuadrícula para mi nombre de usuario, etiquetas de contraseña y campos de entrada, y para mi botón de envío y cancelar. Agregué el mismo ancho de fila de 1 para todos mis widgets, sin embargo, para mi botón de cancelar y enviar, quiero que sean del mismo ancho de celda. Esto es lo que intenté: Sin embargo, esto me da donde esperaba que cancelar e iniciar sesión tuvieran el mismo ancho.

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Para que los botones de cancelar y enviar tengan el mismo ancho en la disposición de la cuadrícula, puede establecer su extensión de columna en ser la misma. En este caso, puede establecer su extensión de columna en 1 para ambos botones:

    layout.addWidget(cancel_button, 2, 0, 1, 1) # establece la extensión de la columna en 1 para cancel_button
    layout.addWidget(submit_button, 2, 1, 1, 1) # establece la extensión de la columna en 1 para submit_button
    

    Esto hará que ambos botones ocupen solo una columna en la disposición de la cuadrícula y tengan un ancho igual.

    El código actualizado se vería así:

    from PyQt5 import QtWidgets as qtw
    from PyQt5 import QtCore as qtc
    from PyQt5 import QtGui as qtg
    import sys
    
    class MainWindow(qtw.QWidget):
    
        def __init__(self, *arg, **kwargs):
            super().__init__(*arg, **kwargs)
            # código personalizado va aquí
            username_label = qtw.QLabel('Nombre de Usuario')
            password_label = qtw.QLabel('Contraseña')
    
            username_input = qtw.QLineEdit()
            password_input = qtw.QLineEdit(echoMode=qtw.QLineEdit.Password)
    
            cancel_button = qtw.QPushButton('Cancelar')
            submit_button = qtw.QPushButton('Iniciar Sesión')
    
            layout = qtw.QGridLayout()
            layout.addWidget(username_label, 0, 0, 1, 2) # celda 0,0, extensión de fila: 1, extensión de columna: 2
            layout.addWidget(username_input, 0, 1, 1, 3) # celda 0, 1
            layout.addWidget(password_label, 1, 0, 1, 2) # celda 1, 0
            layout.addWidget(password_input, 1, 1, 1, 3) # celda 1, 1
            layout.addWidget(cancel_button, 2, 0, 1, 1) # establecer extensión de columna en 1 para cancel_button
            layout.addWidget(submit_button, 2, 1, 1, 1) # establecer extensión de columna en 1 para submit_button
    
            self.setLayout(layout)
            self.show()
    
    if __name__ == '__main__':
        app = qtw.QApplication(sys.argv)
        w = MainWindow()
        sys.exit(app.exec_())
    

    Esto debería darle el resultado deseado:

    enter image description here

Comments are closed.