为了账号安全,请及时绑定邮箱和手机立即绑定

openPersitentEditor 的 PyQt5 类型错误

openPersitentEditor 的 PyQt5 类型错误

PHP
扬帆大鱼 2023-11-09 21:11:59
大家好,我正在使用 PYQT5 做一些考试准备,我根据工作簿中的练习创建了一个应用程序,我们必须让它显示课程列表,当您单击它们时,它会打开一个带有课程名称的消息框,也有一个按钮,以便用户可以将课程添加到列表中。添加按钮应该在 listWidget 中的最后一项上打开 QlineEdit,因此用户可以编辑该字段,但我不断收到 TypeError 消息:第 67 行,在 onAddButton self.mylistWidget.openPersistentEditor(self, modelItem) TypeError: openPersistentEditor(self, QListWidgetItem): 参数 1 具有意外类型 'UNISACourses'import sysfrom PyQt5.QtWidgets import (QListWidget, QLineEdit, QWidget, QMessageBox, QHBoxLayout, QAbstractItemView,                             QApplication, QVBoxLayout, QPushButton, QButtonGroup)from PyQt5.QtCore import pyqtSlotfrom PyQt5 import Qt, QtGuiclass 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)
查看完整描述

1 回答

?
临摹微笑

TA贡献1982条经验 获得超2个赞

您传递了两个不正确的参数(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, Qt

from PyQt5 import QtGui


查看完整回答
反对 回复 2023-11-09
  • 1 回答
  • 0 关注
  • 110 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信