如何在pyqt5中连续插入2个以上的小部件

Posted

技术标签:

【中文标题】如何在pyqt5中连续插入2个以上的小部件【英文标题】:how to insert more then 2 widgets in a row in pyqt5 【发布时间】:2020-02-03 15:54:50 【问题描述】:

我想创建一个在一行中有 3 个元素的 GUI。标签、文本编辑和按钮

我用于布局QFormLayout()

当我尝试使用layout.addRow(label,textEdit, button) 在行中插入 3 个元素时 我收到了TypeError: ..too many arguments

如何在使用表单布局时插入 3 个元素?还是我需要使用其他布局?

下面是整个代码

class MainWindow(qtw.QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        # your code will go here


        self.resize(700, 410)
        self.setWindowTitle("Youtube_mp3_Converter")

        # Widgets

        # Top Label
        top_label = qtw.QLabel()
        top_label.setText("Youtube_mp3_Converter")

        speicherort_label = qtw.QLabel()
        speicherort_label.setText("welcher Speicherort")
        test_label = qtw.QLabel()
        test_label.setText("test")

        # line edit
        self.speicherort_input = qtw.QLineEdit()

        # push buttons
        self.speicherort_button = qtw.QPushButton("Speicherort_bestaetigen")

        # layout
        layout = qtw.QFormLayout()
        self.setLayout(layout)

        layout.addRow(top_label)
        layout.addRow(self.speicherort_input, self.speicherort_button )



        self.show()


【问题讨论】:

【参考方案1】:

创建self.widget并添加textEditbutton,然后layout.addRow (top_label, self.widget)

from PyQt5.Qt import *

class MainWindow(QWidget):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.resize(700, 410)
        self.setWindowTitle("Youtube_mp3_Converter")

        # Widgets

        # Top Label
        top_label = QLabel()
        top_label.setText("Youtube mp3 \nConverter")   # +

        ''' 
        speicherort_label = QLabel()                       
        speicherort_label.setText("welcher Speicherort")
        test_label = QLabel()
        test_label.setText("test")
        '''

        self.widget = QWidget()                                 # +
        layout_h = QHBoxLayout(self.widget)                     # +

        # line edit
        self.speicherort_input = QLineEdit()
        # push buttons
        self.speicherort_button = QPushButton("Speicherort_bestaetigen")

        layout_h.addWidget(self.speicherort_input)              # +
        layout_h.addWidget(self.speicherort_button)             # +

        # layout
        layout = QFormLayout()
        self.setLayout(layout)
        layout.addRow(top_label, self.widget)                   # +
#        layout.addRow(self.speicherort_input, self.speicherort_button )


if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    app.setStyle('fusion')
    w = MainWindow()  
    w.show()
    sys.exit(app.exec_())

【讨论】:

【参考方案2】:

您可以将行编辑和按钮放在单独的HBoxLayout 中,并将此布局添加到表单布局中,例如

class MainWindow(qtw.QWidget):
    def __init__(self, *args, **kwargs):

        ... 

        layout2 = qtw.QHBoxLayout()
        layout2.addWidget(self.speicherort_input)
        layout2.addWidget(self.speicherort_button)

        layout.addRow(top_label, layout2)

        ...

【讨论】:

以上是关于如何在pyqt5中连续插入2个以上的小部件的主要内容,如果未能解决你的问题,请参考以下文章

如何在 python 中使用 pyqt5 显示 2 个按钮和 2 个标签?

如何在pyqt5中为一个小部件制作一个清晰的板子功能

如何在pyqt5 ui小部件代码中使用python脚本

从不同类添加的小部件内的 PyQt5 停止计时器

如何保存和恢复每个小部件实例唯一的小部件属性?

PyQt5:如何将回溯显示到小部件中?