布局的中央小部件位置

Central widget position of layout

有没有办法在 qmain 的中央小部件中放置或调整布局 window。

我正在尝试使用 QMainWindow 编写一个应用程序。我在中央小部件中设置了不同的布局,但这些小部件的间距完全不同

class MainApp(QMainWindow):

    def __init__(self,parent = None):
        super().__init__(parent)
    
        self.statusBar().showMessage('Select any option to proceed',3000)
    
        self.setWindowTitle("CH APTMO App")
        self.setGeometry(100,100,1050,600)
        self.setFixedSize(self.size())
    
        self.central_widget = QStackedWidget()
        self.setCentralWidget(self.central_widget)


class InsideWidget(QWidget):
    def __init__(self,parent=None):
        super().__init__(parent)
        self.From = QLabel("From")
        self.To = QLabel("To")
        self.Type = QLabel("Type")
        self.Number = QLabel("Number")
      
        from_list = ["val1","val2","val3"]
        self.fromentry = QComboBox()
        self.fromentry.setEditable(True)
        self.fromentry.addItems(from_list)
        self.toentry = QLineEdit()
        self.typeentry = QLineEdit()
        self.numentry = QLineEdit()
       
        self.receivebaglayout = QGridLayout()
       
        self.receivebaglayout.addWidget(self.From,0,0)
        self.receivebaglayout.addWidget(self.To,0,1)
        self.receivebaglayout.addWidget(self.Type,0,2)
        self.receivebaglayout.addWidget(self.Number,0,3)
    
        self.receivebaglayout.addWidget(self.fromentry,1,0)
        self.receivebaglayout.addWidget(self.toentry,1,1)
        self.receivebaglayout.addWidget(self.typeentry,1,2)
        self.receivebaglayout.addWidget(self.numentry,1,3)
    
        self.receivebaglayout.setSpacing(10)
    
        self.setLayout(self.receivebaglayout)

布局混乱中央小部件中的网格布局是这样的

显示第 1 行和第 2 行间距的图片:

如果我们将许多小部件添加到网格布局,则它已得到适当调整。但是,当小部件较少时,它会遍布中央小部件布局。

我们怎么能阻止这一切?

添加了预期的输出

预期输出:

默认情况下,Qt 使用 sizePolicy 来计算 QGridLayout 每一行的大小。在这种情况下,QLabel 倾向于垂直拉伸,而 QLineEdit 和 QComboBox 看不到这种行为。

由于不清楚OP想要什么,我会根据情况提供几种解决方案:

  • 如果您希望项目位于顶部,则只需在行尾添加一个拉伸:

    self.receivebaglayout.setRowStretch(2, 1)
    

  • 如果您希望项目向中间定位,则只需在行的开头和结尾添加一个拉伸,以便第一行应该是第二行:

    self.receivebaglayout = QGridLayout(self)
    
    self.receivebaglayout.setRowStretch(0, 1)
    
    self.receivebaglayout.addWidget(self.From, 1, 0)
    self.receivebaglayout.addWidget(self.To, 1, 1)
    self.receivebaglayout.addWidget(self.Type, 1, 2)
    self.receivebaglayout.addWidget(self.Number, 1, 3)
    
    self.receivebaglayout.addWidget(self.fromentry, 2, 0)
    self.receivebaglayout.addWidget(self.toentry, 2, 1)
    self.receivebaglayout.addWidget(self.typeentry, 2, 2)
    self.receivebaglayout.addWidget(self.numentry, 2, 3)
    
    self.receivebaglayout.setRowStretch(3, 1)
    
    self.receivebaglayout.setSpacing(10)