Adding items to QlistView

↘锁芯ラ 提交于 2021-02-04 14:58:08

问题


I'm using pyqt4 with python 2.7 and I have a list view widget that I can't add items to it

# -*- 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_())

As you guys can see i used

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

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

But it gave me an error that is talking about arguments and data types:

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]

Also, is it right to use ListView here or I should use listwidget?

In general, what is the difference between both !!


回答1:


QListWidget is a class of higher level that makes the developer can handle it easily, for example QListWidget has a model of type QStantandardItemModel that can not be accessed, in addition to built the QListWidgetItem to handle the data, as you have seen is simple add data through functions like addItem() or addItems().

On the other hand QListView, from which QListWidget inherits, is of lower level, where you can customize many things, using custom models, etc.

You can use both:

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)


来源:https://stackoverflow.com/questions/49385525/adding-items-to-qlistview

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!