【问题标题】:How to remove a selected row from QListView?如何从 QListView 中删除选定的行?
【发布时间】:2020-02-13 00:30:12
【问题描述】:

我不知道如何从 QLineEdit (list1) 中删除选定的行。我知道通过使用 QStandardModel 我可以使用 removeRow() 删除某个索引处的行,但我似乎无法弄清楚如何确定所选行的特定索引。

import sys
from PyQt5.QtWidgets import(QApplication,QListWidget,QTreeView, 
QTreeWidget,QLabel,QLineEdit,QWidget, QPushButton, 
QHBoxLayout,QVBoxLayout, QLineEdit, QListView)
from PyQt5.QtGui import QStandardItemModel, QStandardItem

class MainWindow(QWidget):
    def __init__(self):
        super().__init__()
    self.setWindowTitle("CS2316 Help Desk Queue") 
    self.button1=QPushButton("Add",self,enabled=False)     
    self.button2=QPushButton("Remove",self,enabled=False)  
    self.LabelA=QLabel("TAs on duty")
    self.text1=QLineEdit()
    self.list1=QListView(self)
    self.list1.resize(260,260)
    self.list1.TopToBottom
    self.LabelB=QLabel("Enter your Name")
    self.model=QStandardItemModel(self.list1)
    self.text2=QLineEdit()


    if self.text2.textChanged[str]:
        self.text2.textChanged[str].connect(lambda: self.button1.setEnabled(self.text2.text()!=""))
    if self.list1.clicked:
        self.list1.clicked.connect(lambda: self.button2.setEnabled(True))

    self.button1.clicked.connect(self.add1)
    self.button2.clicked.connect(self.remove)


    hbox1 = QHBoxLayout() 
    hbox1.addWidget(self.LabelA)
    hbox1.addWidget(self.text1)

    vbox1=QVBoxLayout()
    vbox1.addWidget(self.list1)


    hbox2=QHBoxLayout()
    hbox2.addWidget(self.LabelB)
    hbox2.addWidget(self.text2)

    vbox2=QVBoxLayout()
    vbox2.addWidget(self.button1)
    vbox2.addWidget(self.button2)


    vbox=QVBoxLayout()
    vbox.addLayout(hbox1)
    vbox.addLayout(vbox1)
    vbox.addLayout(hbox2)
    vbox.addLayout(vbox2)

    self.setLayout(vbox)
    self.show()


def add1(self):
    name=self.text2.text()
    newname=QStandardItem(name)
    self.model.appendRow(newname)
    self.list1.setModel(self.model)
    self.text2.clear()

def remove(self):
    for index in range(self.model.rowCount()):
        if self.list1.clicked:
            self.model.removeRow(index)
    self.list1.setModel(self.model)

if __name__ == '__main__':    
app = QApplication(sys.argv)    
main = MainWindow()    
main.show()    
sys.exit(app.exec_())

【问题讨论】:

    标签: python pyqt5 qlineedit qstandarditemmodel


    【解决方案1】:

    选择功能有视图所以可以通过selectedIndexes()方法获取选中行的QModelIndex,并且QModelIndex关联了行号可以用来移除:

    def remove(self):
        indexes = self.list1.selectedIndexes()
        if indexes:
            index = indexes[0]
            self.model.removeRow(index.row())
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-10-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 1970-01-01
      相关资源
      最近更新 更多