Python 布局的中心位置

Python 布局的中心位置,python,pyqt5,qmainwindow,Python,Pyqt5,Qmainwindow,是否有办法在qmain窗口的中心小部件中定位或调整布局 我正在尝试用QMainWindow编写一个应用程序。我在中央部件中设置了不同的布局,但这些部件的间距完全不同 class MainApp(QMainWindow): def __init__(self,parent = None): super().__init__(parent) self.statusBar().showMessage('Select any option to pro

是否有办法在qmain窗口的中心小部件中定位或调整布局

我正在尝试用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行之间间距的图片:

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

我们怎样才能阻止这一切

已添加预期的输出

预期的输出:

默认情况下,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)
    

您的问题不清楚,1)您在代码2中显示了不相关的类,因此建议您提供a,2)您想要的结果不清楚,您能否放置一个图像来说明您想要获得什么?代码太大。让我解释一下。我有一个主窗口类,其中I j=有一个堆叠的centralwidget。当使用网格布局设置中心小部件时,按钮和文本的间距分布在中心小部件上。是否有一种方法可以根据我们使用的布局按钮专门调整中心小部件的大小。或者布局应该调整它并设置中心小部件?确切地说,如果项目的代码太大,那么您必须工作,使其成为MRE。请阅读并查看上图中的@eyllanesc,您可以看到输入字段位于底部,文本位于顶部。但我希望它们被放置在中央部件的顶部位置。您的描述不清楚,因此除了MRE外,还需要一张图像来说明您想要获得的内容(使用绘画或任何类似工具,并创建您想要获得的内容的轮廓),感谢您的帮助。对于将来的学习,是否有任何页面可以让我根据布局设计了解这些细节。那可以帮助我花时间在learning@T2Square如果你想知道一个函数、类等是如何工作的,那么你应该去哪里寻找呢?例如,在文档中,先生,另外还有数百个教程涉及这个主题。你能检查一下这个问题吗[