首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PyQt4->PyQt5翻译

PyQt4->PyQt5翻译
EN

Stack Overflow用户
提问于 2017-04-05 20:48:56
回答 1查看 531关注 0票数 1

我对表格数据的分页显示很感兴趣。我找到了这个链接:带有由PyQt4编写的有趣代码的https://sateeshkumarb.wordpress.com/2012/04/01/paginated-display-of-table-data-in-pyqt/。我试着在Python3.4上把它翻译成PyQt5。代码如下:

代码语言:javascript
复制
import sys
from PyQt5 import QtWidgets, QtCore

class Person(object):
    """Name of the person along with his city"""
    def __init__(self,name,city):
        self.name = name
        self.city = city
class PersonDisplay(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        super(PersonDisplay, self).__init__(parent)
        #QtWidgets.QMainWindow.__init__(self, parent)
        self.setWindowTitle('Person City')
        view = QtWidgets.QTableView()
        tableData = PersonTableModel()
        view.setModel(tableData)
        self.setCentralWidget(view)
        tableData.addPerson(Person('Ramesh', 'Delhi'))
        tableData.addPerson(Person('Suresh', 'Chennai'))
        tableData.addPerson(Person('Kiran', 'Bangalore'))

class PersonTableModel(QtCore.QAbstractTableModel):
    def __init__(self):
        super(PersonTableModel,self).__init__()
        self.headers = ['Name','City']
        self.persons  = ['Ramesh', 'Delhi']

    def rowCount(self,index=QtCore.QModelIndex()):
        return len(self.persons)

    def addPerson(self,person):
        self.beginResetModel()
        self.persons.append(person)
        self.endResetModel()

    def columnCount(self,index=QtCore.QModelIndex()):
        return len(self.headers)

    def data(self,index,role=QtCore.Qt.DisplayRole):
        col = index.column()
        person = self.persons[index.row()]
        if role == QtCore.Qt.DisplayRole:
            if col == 0:
                return QtWidgets.QVariant(person.name)
            elif col == 1:
                return QtWidgets.QVariant(person.city)
            return QtWidgets.QVariant()

    def headerData(self,section,orientation,role=QtCore.Qt.DisplayRole):
        if role != QtCore.Qt.DisplayRole:
            return QtWidgets.QVariant()

        if orientation == QtCore.Qt.Horizontal:
            return QtWidgets.QVariant(self.headers[section])
        return QtWidgets.QVariant(int(section + 1))

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    appWin = PersonDisplay()
    appWin.show()
    sys.exit(app.exec_())

这看起来是正确的,但是运行停止于: view.setModel(tableData)。我不知道这是因为我的翻译还是代码错误。有什么想法吗?谢谢

EN

回答 1

Stack Overflow用户

发布于 2017-04-06 18:42:50

1) QtWidgets.QVariant正在引发AttributeError,因为QVariantQtCore包下,而不是QtWidgets下。

2)在PyQt5中你不需要显式地使用QVariant,所以你可以完全删除它们。

3)PersonTableModel.data()中,person是一个字符串,person.nameperson.city将产生一个错误。

这里是PersonTableModel的修复版本

代码语言:javascript
复制
class PersonTableModel(QtCore.QAbstractTableModel):
    def __init__(self):
        super(PersonTableModel,self).__init__()
        self.headers = ['Name','City']
        self.persons  = ['Ramesh', 'Delhi']

    def rowCount(self,index=QtCore.QModelIndex()):
        return len(self.persons)

    def addPerson(self,person):
        self.beginResetModel()
        self.persons.append(person)
        self.endResetModel()

    def columnCount(self,index=QtCore.QModelIndex()):
        return len(self.headers)

    def data(self,index,role=QtCore.Qt.DisplayRole):
        col = index.column()
        person = self.persons[index.row()]
        if role == QtCore.Qt.DisplayRole:
            if col == 0:
                return person
            elif col == 1:
                return person
            return None

    def headerData(self,section,orientation,role=QtCore.Qt.DisplayRole):
        if role != QtCore.Qt.DisplayRole:
            return None

        if orientation == QtCore.Qt.Horizontal:
            return self.headers[section]
        return int(section + 1)

P.S.

您的代码引发了此异常:

代码语言:javascript
复制
Traceback (most recent call last):
  File "test.py", line 51, in headerData
    return QtWidgets.QVariant()
AttributeError: module 'PyQt5.QtWidgets' has no attribute 'QVariant'

在问题中包括这一点可能会很有用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43231696

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档