python - 向 QlistView 添加项目

标签 python pyqt pyqt4 qlistwidget qlistview

我在 python 2.7 中使用 pyqt4,我有一个 ListView 小部件,我无法向它添加项目

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'add_category.ui'
#
# Created: Mon Mar 19 23:22:30 2018
#      by: PyQt4 UI code generator 4.10
#
# WARNING! All changes made in this file will be lost!

from PyQt4 import QtCore, QtGui

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s

try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_Dialog1(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName(_fromUtf8("Dialog"))
        Dialog.resize(608, 460)
        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap(_fromUtf8(":/media/media/in.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        Dialog.setWindowIcon(icon)
        self.gridLayout = QtGui.QGridLayout(Dialog)
        self.gridLayout.setObjectName(_fromUtf8("gridLayout"))
        self.lineEdit = QtGui.QLineEdit(Dialog)
        self.lineEdit.setObjectName(_fromUtf8("lineEdit"))
        self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 1)
        self.pushButton = QtGui.QPushButton(Dialog)
        self.pushButton.setIcon(icon)
        self.pushButton.setObjectName(_fromUtf8("pushButton"))
        self.gridLayout.addWidget(self.pushButton, 0, 6, 1, 1)
        self.label = QtGui.QLabel(Dialog)
        font = QtGui.QFont()
        font.setFamily(_fromUtf8("Adobe Arabic"))
        font.setPointSize(24)
        self.label.setFont(font)
        self.label.setObjectName(_fromUtf8("label"))
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        self.listView = QtGui.QListView(Dialog)
        self.listView.setObjectName(_fromUtf8("listView"))
        entries = ['one','two', 'three']

        for i in entries:
            item = QtGui.QListView(i)
            self.listView.addItem(item)
        self.gridLayout.addWidget(self.listView, 1, 0, 1, 2)
        self.pushButton_2 = QtGui.QPushButton(Dialog)
        icon1 = QtGui.QIcon()
        icon1.addPixmap(QtGui.QPixmap(_fromUtf8(":/media/media/ok.png")), QtGui.QIcon.Normal, QtGui.QIcon.Off)
        self.pushButton_2.setIcon(icon1)
        self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
        def go_back(self):
            Dialog.hide()
        self.pushButton_2.clicked.connect(go_back)
        self.gridLayout.addWidget(self.pushButton_2, 2, 1, 1, 1)

        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(_translate("Dialog", "إضافة فئة", None))
        self.lineEdit.setPlaceholderText(_translate("Dialog", "هنا يكتب الاسم الفئة الجديدة", None))
        self.pushButton.setText(_translate("Dialog", "إضافة", None))
        self.label.setText(_translate("Dialog", "إسـم الفئة الجديدة", None))
        self.pushButton_2.setText(_translate("Dialog", "موافق", None))

import resrcs

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Dialog = QtGui.QDialog()
    ui = Ui_Dialog1()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

你们可以看到我用过

entries = ['one','two', 'three']

for i in entries:
    item = QtGui.QListView(i)
    self.listView.addItem(item)

但它给了我一个关于参数和数据类型的错误:

Traceback (most recent call last):
  File "C:\python\townoftechwarehouse\add_category.py", line 84, in <module>
    ui.setupUi(Dialog)
  File "C:\python\townoftechwarehouse\add_category.py", line 54, in setupUi
    item = QtGui.QListView(i)
TypeError: QListView(QWidget parent=None): argument 1 has unexpected type 'str'
[Finished in 1.7s]

还有,这里用ListView好还是我应该用listwidget好?

总的来说,两者有什么区别!!

最佳答案

QListWidget 是一个更高级别的类,使开发人员可以轻松处理它,例如 QListWidget 有一个 QStantandardItemModel 类型的模型,它无法访问,除了构建 QListWidgetItem 来处理数据,如您所见,通过 addItem()addItems( )

另一方面,QListWidget 继承的 QListView 是较低级别的,您可以在其中自定义很多东西,使用自定义模型等。

你可以同时使用:

QListView

self.listView = QtGui.QListView(Dialog)
self.listView.setObjectName(_fromUtf8("listView"))

entries = ['one', 'two', 'three']

model = QtGui.QStandardItemModel()
self.listView.setModel(model)

for i in entries:
    item = QtGui.QStandardItem(i)
    model.appendRow(item)

self.gridLayout.addWidget(self.listView, 1, 0, 1, 2)

QListWidget

self.listwidget = QtGui.QListWidget(Dialog)

entries = ['one', 'two', 'three']

self.listwidget.addItems(entries)

self.gridLayout.addWidget(self.listwidget, 1, 0, 1, 2)

关于python - 向 QlistView 添加项目,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49385525/

相关文章:

python - 如何在qt设计器中创建切换开关按钮?

python - Pyside,PyQt4 : How to set a validator when editing a cell in a QTableView

python - 如何增加 QListWidget 中缩略图的大小

python - 用re解析python文件

python - 启动通过套接字编程处理 HTTP 请求的 python 脚本时,CPU 达到 100%?

python - 我无法理解的 Python 打印行为

python - 区分循环中的多个导出点

python - 如何知道ui窗体中的哪个qwidget在pyqt中获得了焦点

python - QCheckbox 检查所有其他 QCheckBoxes

python - PyQt4 和 Python 3 - 显示来自 URL 的图像