猿问

openPersitentEditor 的 PyQt5 类型错误

大家好,我正在使用 PYQT5 做一些考试准备,我根据工作簿中的练习创建了一个应用程序,我们必须让它显示课程列表,当您单击它们时,它会打开一个带有课程名称的消息框,也有一个按钮,以便用户可以将课程添加到列表中。添加按钮应该在 listWidget 中的最后一项上打开 QlineEdit,因此用户可以编辑该字段,但我不断收到 TypeError 消息:


第 67 行,在 onAddButton self.mylistWidget.openPersistentEditor(self, modelItem) TypeError: openPersistentEditor(self, QListWidgetItem): 参数 1 具有意外类型 'UNISACourses'


import sys

from PyQt5.QtWidgets import (QListWidget, QLineEdit, QWidget, QMessageBox, QHBoxLayout, QAbstractItemView,

                             QApplication, QVBoxLayout, QPushButton, QButtonGroup)

from PyQt5.QtCore import pyqtSlot

from PyQt5 import Qt, QtGui



class MyListWidget(QListWidget, QLineEdit, QWidget):

    """

    Subclassed QListWidget to allow for the closing of open editors and other modifications

    """


    def __init__(self, parent=None):

        super().__init__(parent=parent)

        self.setSelectionMode(QAbstractItemView.ExtendedSelection)


    def keyPressEvent(self, event):

        if event.key() == Qt.Key_Return:

            print("Closing any persistent editor")

            self.closePersistentEditor(self.model().index(self.count() - 1))

        else:

            super().keyPressEvent(event)



class UNISACourses(QWidget):


    def __init__(self):

        super().__init__()

        self.initUI()


    def initUI(self):

        # Main Window Settings

        self.setGeometry(300, 300, 350, 250)

        self.setWindowTitle('Courses')


        # Layout

        self.main_layout = QVBoxLayout(self)

        self.setLayout(self.main_layout)


        # Main Widget

        self.mylistWidget = MyListWidget()

        self.mylistWidget.addItems(["COS1511", "COS1521", "COS1512", "MNB1512", "INF1505", "FAC1502"])

        self.main_layout.addWidget(self.mylistWidget)



扬帆大鱼
浏览 111回答 1
1回答

临摹微笑

您传递了两个不正确的参数(self和一个 QModelIndex)来QListWidget.openPersistentEditor接受一个QListWidgetItem。使用QListWidget.item方法来获取物品。您还可以添加,QListWidget.setCurrentItem以便立即选择它并准备进行编辑。def onAddButton(self):    self.mylistWidget.addItem('')    modelItem = self.mylistWidget.item(self.mylistWidget.count() - 1)    self.mylistWidget.openPersistentEditor(modelItem)    self.mylistWidget.setCurrentItem(modelItem)此处同样修复:def keyPressEvent(self, event):    if event.key() == Qt.Key_Return:        print("Closing any persistent editor")        self.closePersistentEditor(self.item(self.count() - 1))    else:        super().keyPressEvent(event)此外,Qt 命名空间类Qt.Key_Return位于 QtCore 模块内部。from PyQt5.QtCore import pyqtSlot, Qtfrom PyQt5 import QtGui
随时随地看视频慕课网APP
我要回答