Search code examples
pythonpyqtpyqt5pygui

Pyqt5 Widgets get shifted to center using GridLayout


So I am basically creating a grid layout for my application. However after I change width of the textbox the entire widgets get shifted to center which I don't want. Please help me :

enter image description here

    def createlayout(self):
    self.label1=QLabel(self.label,self)
    self.label2=QLabel(self.label2,self)
    self.textbox2 = QLineEdit(self)
    self.textbox = QLineEdit(self)
    txbx=[self.textbox2,self.textbox]

    [tx.setFixedWidth(90) for tx in txbx]

    #self.textbox.setFixedWidth(120)
    vbox=QGridLayout()
    #vbox=QVBoxLayout()
    vbox.addWidget(self.label1,0,0,1,1)

    vbox.addWidget(self.textbox,1,0,1,1)

    vbox.addWidget(self.label2,2,0,1,1)

    vbox.addWidget(self.textbox2, 3, 0, 1, 1)

    #vbox.setContentsMargins(0,0,0,0)
    #vbox.setAlignment('AlignCenter')
    vbox.setRowStretch(4,1)

Solution

  • QGridLayout::addWidget(QWidget *widget, int fromRow, int fromColumn, int rowSpan, int columnSpan, Qt::Alignment alignment = Qt::Alignment())

    This version adds the given widget to the cell grid, spanning multiple rows/columns. The cell will start at fromRow, fromColumn spanning rowSpan rows and columnSpan columns.

    The widget will have the given alignment.

    import sys
    from PyQt5.Qt import *
    
    class Window(QWidget):
        def __init__(self):
            super().__init__()
            
            self.createlayout()
    
        def createlayout(self):
            self.label1 = QLabel('Pressure Drop')
            self.label2 = QLabel('Flow Rate')
            self.textbox2 = QLineEdit()
            self.textbox2.setFixedWidth(90)
            self.textbox = QLineEdit()
            self.textbox.setFixedWidth(90)
    
            vbox = QGridLayout(self)
            vbox.addWidget(self.label1, 0, 0, 1, 1, alignment=Qt.AlignLeft)
            vbox.addWidget(self.textbox, 1, 0, 1, 1, alignment=Qt.AlignLeft)
            vbox.addWidget(self.label2, 2, 0, 1, 1, alignment=Qt.AlignLeft)
            vbox.addWidget(self.textbox2, 3, 0, 1, 1, alignment=Qt.AlignLeft)
            vbox.setRowStretch(4, 1)
    
            
    if __name__ == '__main__':
        app = QApplication(sys.argv)
        w = Window()
        w.resize(300, 200)
        w.show()
        sys.exit(app.exec_())
    

    enter image description here