【问题标题】:PyQt: How to stick a widget to the bottom edge of dialogPyQt:如何将小部件粘贴到对话框的底部边缘
【发布时间】:2014-03-06 19:59:43
【问题描述】:

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

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_()

【问题讨论】:

  • 附注:如果你想要一个对话框,继承自 QDialog 而不是 QMainWindow
  • 不幸的是,QDialog 没有“最小化对话框”按钮(在 OSX 上),而 QMainWindow 有。在 QDialog 上使用 QMainWindow 有什么副作用?为什么会是您建议在 QMainWindow 上使用 QDialog 的原因?
  • 嗯,QDialog 有acceptedrejected 插槽。它可能是模态的(但我也认为是 MainWindow,但不确定)。

标签: python pyqt4 qtgui qtcore qapplication


【解决方案1】:

我建议使用 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_())

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-10
    • 1970-01-01
    • 2023-03-29
    • 2016-04-12
    • 2016-08-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多