首页 > 解决方案 > PyQT5:如何在表单行中将按钮与行编辑对齐?

问题描述

我正在尝试创建一个将生成我所有小部件的类。目前,我被卡住了,因为我想让我的行编辑与按钮对齐(典型的是你在文件上传窗口中看到的),但按钮在下一行。我如何排列它们?

生成表单小部件的类:

class CreateFormElements(QtWidgets.QWidget):
    def __init__(self, *args, **kwargs):
        super(CreateFormElements, self).__init__(*args, **kwargs)

    def create_form_row(self, label, fieldType, *args, **kwargs):
        layout = QFormLayout()
        # this arguments will tell me if I want a button, and if the button should open a file window
        connectType = kwargs.get('connectType', None)
        _fieldType = kwargs.get('_fieldType', None)
        # if this is a button that should open up a file window, call the create_file_window() function to make a
        # file window. currently no button is visible and the file window is opening up directly.
        if connectType == 'file' and _fieldType == 'button':
            filePath = layout.addWidget(QLineEdit())
            fieldType.setText("Browse")
            fieldType.clicked.connect(create_file_window)

        layout.addRow(QLabel(label), fieldType)
        self.setLayout(layout)

主窗口:

class MainWindow(QMainWindow):

    def __init__(self, *args, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.myWindow()

    def myWindow(self):
        self.setWindowTitle("My Awesome App")
        sizeObject = QtWidgets.QDesktopWidget().screenGeometry(-1)
        print(" Screen size : " + str(sizeObject.height()) + "x" + str(sizeObject.width()))

        self.width = 600
        self.height = 480
        self.left = 0
        self.top = 0
        self.setGeometry(self.left, self.top, self.width, self.height)
        layout = QVBoxLayout()
        elm = CreateFormElements()
        elm.create_form_row("Object Name: ", QPushButton(), connectType='file', _fieldType='button')
        layout.addWidget(elm)
        widget = QWidget()
        widget.setLayout(layout)
        self.setCentralWidget(widget)

提前致谢。

标签: pythonpython-3.xpyqt5

解决方案


您可以将QLineEditandQButton放在 aQHBoxLayout中,并将其添加到您的表单布局中,例如

lineEdit = QLineEdit()
fieldType.setText("Browse")

hlayout = QHBoxLayout()
hlayout.addWidget(lineEdit)
hlayout.addWidget(fieldType)

layout.addRow(label, hlayout)

推荐阅读