如何在qlistview中正确地添加和删除项?

2024-09-29 22:27:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在qlistview和qlistwiget中都这样做,添加是可以的,但是删除,我甚至在阅读了文档之后也无法理解。如果有人能解释一下如何做这件事,我将不胜感激。下面是我的代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

from PyQt4 import QtCore, QtGui


class Try(QtGui.QDialog):
    def __init__(self):
        super(Try, self).__init__()
        self.setWindowTitle("Trying stuff")
        self.list_view = QtGui.QListView(self)
        self.lview = QtGui.QListWidget(self)
        self.EditText = QtGui.QLineEdit()
        self.EditText.setPlaceholderText("add stuff")
        self.EditText.setMaximumWidth(200)
        self.setWindowFlags(QtCore.Qt.Window)
        self.model = QtGui.QStandardItemModel(self.list_view)
        self.resize(600, 500)
        self.font = QtGui.QFont()
        self.font.setBold(True)
        self.font2 = QtGui.QFont()
        self.font2.setBold(False)
        palette = QtGui.QPalette()
        palette.setColor(QtGui.QPalette.Foreground, QtCore.Qt.red)
        self.label = QtGui.QLabel()
        self.buttonRemove = QtGui.QPushButton()
        self.buttonAdd = QtGui.QPushButton()
        self.buttonCommit = QtGui.QPushButton()
        self.buttonRemove.setText("Remove from list")
        self.buttonRemove.clicked.connect(self.removeItems)
        self.buttonAdd.setText("Add to list")
        self.buttonAdd.clicked.connect(self.addItems)
        self.buttonCommit.setText("print all item in list")

        horizontalLayout = QtGui.QHBoxLayout()
        horizontalLayout.addWidget(self.EditText)
        horizontalLayout.addWidget(self.buttonAdd)

        horizontalLayout.setAlignment(QtCore.Qt.AlignRight)
        horizontalLayout2 = QtGui.QHBoxLayout()
        horizontalLayout2.addWidget(self.buttonRemove)
        horizontalLayout2.addWidget(self.buttonCommit)
        horizontalLayout2.setAlignment(QtCore.Qt.AlignRight)

        verticalLayout = QtGui.QVBoxLayout(self)
        verticalLayout.addLayout(horizontalLayout)
        verticalLayout.addWidget(self.list_view)
        verticalLayout.addWidget(self.lview)
        verticalLayout.addWidget(self.label)
        verticalLayout.addLayout(horizontalLayout2)


    def addItems(self):
        x = self.EditText.text()
        self.lview.addItem(x)
        self.lview.setAutoScroll(True)
        item = QtGui.QStandardItem(x)
        item.setCheckable(True)
        item.setCheckState(QtCore.Qt.Unchecked)
        self.model.appendRow(item)
        self.list_view.setModel(self.model)
        self.EditText.clear()

    def removeItems(self):
        x = self.EditText.text()
        item = QtGui.QStandardItem(x)
        todelete = self.list_view.selectionModel().currentIndex().data().toString()
        print todelete
        self.model.removeRow(todelete)
        self.lview.takeItem(item.row())
        #self.model.removeRow(item.row())

        self.list_view.setModel(self.model)
        self.EditText.clear()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    t = Try()
    t.show()
    sys.exit(app.exec_())

Tags: selfviewmodelitemqtlistqtguiqtcore
1条回答
网友
1楼 · 发布于 2024-09-29 22:27:50

对于Qlistwidget, 迭代Qlistwidget。如果在中选择了项目 Qlistwidget通过Qlistwidget.takeItem()方法

def removeItems(self):
    for item in self.lview.selectedItems():
        self.lview.takeItem(self.lview.row(item))

对于Qlistview,遍历Qlistview行,通过将其引用到Qlistview中的一行来定义该项QStandardItemModel.item(世界其他地区)。 如果选中项,则通过删除行QStandardItemModel.removeRow(世界其他地区)。这个 方法是递归的,以便删除多个选中项。在

^{pr2}$

相关问题 更多 >

    热门问题