gpt4 book ai didi

python - PyQt4->PyQt5 翻译

转载 作者:太空宇宙 更新时间:2023-11-03 15:25:04 24 4
gpt4 key购买 nike

我对表格数据的分页显示感兴趣。我找到了这个链接:https://sateeshkumarb.wordpress.com/2012/04/01/paginated-display-of-table-data-in-pyqt/使用 PyQt4 编写的有趣代码。我尝试在 python 3.4 上的 PyQt5 中翻译它。代码如下:

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)。不知道是我翻译错误还是代码错误。任何想法?谢谢

最佳答案

1) QtWidgets.QVariant 正在引发 AttributeError,因为 QVariant 位于 QtCore 包不是 QtWidgets

2) 在 PyQt5 中,您不需要显式使用 QVariant,因此您可以完全删除它们。

3)PersonTableModel.data() 中,person 是一个字符串,person.nameperson.city 会报错。

这是 PersonTableModel 的固定版本:

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)

附注

您的代码引发此异常:

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

将其包含在问题中可能会很有用

关于python - PyQt4->PyQt5 翻译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43231696/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com