代码之家  ›  专栏  ›  技术社区  ›  alphanumeric

PyQt:如何将小部件粘贴到对话框的底部边缘

  •  3
  • alphanumeric  · 技术社区  · 10 年前

    运行此代码将创建一个带有标签、lineedit和两个按钮的简单对话框。 所有的小部件都能很好地响应对话框水平调整大小。但是当垂直调整对话框窗口的大小时,对话框底部的按钮不会粘在对话框窗口的下边缘。确保按钮始终位于对话框底部边缘的可能解决方案是什么?

    from PyQt4 import QtCore, QtGui
    app = QtGui.QApplication(sys.argv)
    
    
    
    class mainWindow(QtGui.QMainWindow):
    
        def __init__(self):
            super(mainWindow, self).__init__()
    
            mainQWidget = QtGui.QWidget()
            mainLayout=QtGui.QFormLayout()
            mainLayout.setFieldGrowthPolicy(QtGui.QFormLayout.AllNonFixedFieldsGrow)
    
            label = QtGui.QLabel('My Label')  
            lineEdit = QtGui.QLineEdit()
            mainLayout.addRow(label, lineEdit)
    
            ButtonBox = QtGui.QGroupBox()
            ButtonsLayout = QtGui.QHBoxLayout()
    
            Button_01 = QtGui.QPushButton("Close")
            Button_02 = QtGui.QPushButton("Execute")
    
            ButtonsLayout.addWidget(Button_01)
            ButtonsLayout.addWidget(Button_02)
    
            ButtonBox.setLayout(ButtonsLayout)
            mainLayout.addRow(ButtonBox)
    
            mainQWidget.setLayout(mainLayout)
            self.setCentralWidget(mainQWidget)
    
    
    if __name__ == '__main__':
        window = mainWindow()
        window.show()
        window.raise_() 
        window.resize(480,320)
        app.exec_()
    
    1 回复  |  直到 10 年前
        1
  •  2
  •   SoylentFuchsia    10 年前

    我建议使用QVBoxLayout作为主布局,在QFormLayout和按钮的QHBoxLayout之间进行拉伸。

    基于当前对话框的示例:

    import sys
    from PyQt4 import QtGui
    
    
    class MainWindow(QtGui.QMainWindow):
    
        def __init__(self):
            super(MainWindow, self).__init__()
    
            label = QtGui.QLabel('My Label')
            line_edit = QtGui.QLineEdit()
    
            form_layout = QtGui.QFormLayout()
            form_layout.addRow(label, line_edit)
    
            close_button = QtGui.QPushButton('Close')
            execute_button = QtGui.QPushButton('Execute')
    
            button_layout = QtGui.QHBoxLayout()
            button_layout.addWidget(close_button)
            button_layout.addWidget(execute_button)
    
            main_layout = QtGui.QVBoxLayout()
            main_layout.addLayout(form_layout)
            main_layout.addStretch()
            main_layout.addLayout(button_layout)
    
            central_widget = QtGui.QWidget()
            central_widget.setLayout(main_layout)
            self.setCentralWidget(central_widget)
    
    
    if __name__ == '__main__':
        app = QtGui.QApplication(sys.argv)
        window = MainWindow()
        window.resize(480, 320)
        window.show()
        sys.exit(app.exec_())