在 PyQt5 中使用 QListWidget、QLabel 和 QComboBox 创建自定义小部件?
Create a Custom Widget with QListWidget,QLable and QCombo Box in PyQt5?
想要使用 QListWidget、Qlabels 和 QCombo 框创建一个自定义小部件。
在我的代码中,包含一个 QListwidget,
三个标签显示QListWidget中的项目数,第一个是QListWidget中的总可用项目,第二个是过滤条件(项目开始),第三个也是显示项目的数量过滤器(匹配包含)。
还有一个用于设置 QListWidget 默认视图的组合框。如何制作。
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
items = ["item001","item002","item003","item004","item005","001item","002item","new001item","new003item"]
class CustomWidget(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Cutom Widget")
self.txtbox = QLineEdit()
self.lstbox = QListWidget()
self.lstbox.clicked.connect(self.select_item)
self.lbl_Total = QLabel("Total Available Items :")
self.lbl_start = QLabel("Item Starts with :")
self.lbl_contain = QLabel("Items Contains With:")
self.lbl_Total_count = QLabel("99,999")
self.lbl_start_count = QLabel("99,999")
self.lbl_contain_count = QLabel("99,999")
self.combox = QComboBox()
self.combox.addItem("Item Starts")
self.combox.addItem("Item Contains")
self.combox.addItem("Item Ends")
self.lbl_combo_deatils = QLabel("Default View :")
self.lstbox.addItems(items)
total_item = self.lstbox.count()
self.lbl_Total_count.setText(str(total_item))
self.vbox = QVBoxLayout()
self.vbox.addSpacing(4)
self.vbox.setAlignment(Qt.AlignCenter)
self.vbox.setContentsMargins(0,0,0,0)
self.fbox = QFormLayout()
self.fbox.addRow(self.lbl_Total,self.lbl_Total_count)
self.fbox.addRow(self.lbl_start,self.lbl_start_count)
self.fbox.addRow(self.lbl_contain,self.lbl_contain_count)
self.fbox.addRow(self.lbl_combo_deatils,self.combox)
self.vbox.addWidget(self.lstbox)
self.vbox.addLayout(self.fbox)
self.hbox = QHBoxLayout()
self.hbox.addWidget(self.txtbox)
self.hbox.setAlignment(Qt.AlignTop)
self.hbox.addStretch(10)
self.hbox.addLayout(self.vbox)
self.setLayout(self.hbox)
def select_item(self):
self.txtbox.setText(self.lstbox.currentItem().text())
if __name__ =='__main__':
app = QApplication(sys.argv)
test = CustomWidget()
test.show()
sys.exit(app.exec_())
我很难理解这种情况下的实际问题是什么。您已经拥有自定义 class。如果您想要自定义小部件的多个副本,只需创建多个实例即可,即
if __name__ =='__main__':
app = QApplication(sys.argv)
main_widget = QWidget()
layout = QGridLayout(main_widget)
for row in range(2):
for column in range(4):
widget = CustomWidget()
layout.addWidget(widget, row, column)
main_widget.show()
app.exec()
想要使用 QListWidget、Qlabels 和 QCombo 框创建一个自定义小部件。
在我的代码中,包含一个 QListwidget,
三个标签显示QListWidget中的项目数,第一个是QListWidget中的总可用项目,第二个是过滤条件(项目开始),第三个也是显示项目的数量过滤器(匹配包含)。
还有一个用于设置 QListWidget 默认视图的组合框。如何制作。
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
items = ["item001","item002","item003","item004","item005","001item","002item","new001item","new003item"]
class CustomWidget(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("Cutom Widget")
self.txtbox = QLineEdit()
self.lstbox = QListWidget()
self.lstbox.clicked.connect(self.select_item)
self.lbl_Total = QLabel("Total Available Items :")
self.lbl_start = QLabel("Item Starts with :")
self.lbl_contain = QLabel("Items Contains With:")
self.lbl_Total_count = QLabel("99,999")
self.lbl_start_count = QLabel("99,999")
self.lbl_contain_count = QLabel("99,999")
self.combox = QComboBox()
self.combox.addItem("Item Starts")
self.combox.addItem("Item Contains")
self.combox.addItem("Item Ends")
self.lbl_combo_deatils = QLabel("Default View :")
self.lstbox.addItems(items)
total_item = self.lstbox.count()
self.lbl_Total_count.setText(str(total_item))
self.vbox = QVBoxLayout()
self.vbox.addSpacing(4)
self.vbox.setAlignment(Qt.AlignCenter)
self.vbox.setContentsMargins(0,0,0,0)
self.fbox = QFormLayout()
self.fbox.addRow(self.lbl_Total,self.lbl_Total_count)
self.fbox.addRow(self.lbl_start,self.lbl_start_count)
self.fbox.addRow(self.lbl_contain,self.lbl_contain_count)
self.fbox.addRow(self.lbl_combo_deatils,self.combox)
self.vbox.addWidget(self.lstbox)
self.vbox.addLayout(self.fbox)
self.hbox = QHBoxLayout()
self.hbox.addWidget(self.txtbox)
self.hbox.setAlignment(Qt.AlignTop)
self.hbox.addStretch(10)
self.hbox.addLayout(self.vbox)
self.setLayout(self.hbox)
def select_item(self):
self.txtbox.setText(self.lstbox.currentItem().text())
if __name__ =='__main__':
app = QApplication(sys.argv)
test = CustomWidget()
test.show()
sys.exit(app.exec_())
我很难理解这种情况下的实际问题是什么。您已经拥有自定义 class。如果您想要自定义小部件的多个副本,只需创建多个实例即可,即
if __name__ =='__main__':
app = QApplication(sys.argv)
main_widget = QWidget()
layout = QGridLayout(main_widget)
for row in range(2):
for column in range(4):
widget = CustomWidget()
layout.addWidget(widget, row, column)
main_widget.show()
app.exec()