如何在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
并添加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_())
【讨论】:
【参考方案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个以上的小部件的主要内容,如果未能解决你的问题,请参考以下文章