как вставить более двух виджетов подряд в pyqt5 - PullRequest
0 голосов
/ 03 февраля 2020

Я хочу создать GUI с 3 элементами в одной строке. Метка, текст и кнопка

, которые я использовал для макета QFormLayout()

, когда я пытаюсь вставить 3 элемента в строке с помощью layout.addRow(label,textEdit, button), я получаю 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()


Ответы [ 2 ]

0 голосов
/ 03 февраля 2020

Создайте self.widget и добавьте textEdit и button к нему, а затем 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_())

enter image description here

0 голосов
/ 03 февраля 2020

Вы можете поместить строку редактирования и кнопку в отдельном 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)

        ...
...