如何解决委托在 QTableView 中显示不正确
我正在尝试实现 PySide2 文档中列出的示例代码。
import sys
import os
from PySide2.QtWidgets import (
QApplication,QMainWindow,QTableView,QVBoxLayout,QWidget,QStyleOptionProgressBar,QStyledItemDelegate,QStyle
)
from PySide2.QtCore import QAbstractTableModel,QModelIndex,QSortFilterProxyModel
from PySide2.QtGui import Qt
data = [
['123','456','789'],['456','123',['789','789','123'],]
class WidgetDelegate(QStyledItemDelegate):
def __init__(self):
super(WidgetDelegate,self).__init__()
def paint(self,painter,option,index):
if index.column() == 2:
progress = 50
self.progressBarOption = QStyleOptionProgressBar()
self.progressBarOption.rect = option.rect
self.progressBarOption.minimum = 0
self.progressBarOption.minimum = 100
QApplication.style().drawControl(QStyle.CE_ProgressBar,self.progressBarOption,painter)
else:
QStyledItemDelegate.paint(self,index)
class TableModel(QAbstractTableModel):
headerLabels = ['Header1','Header2','Header3']
def __init__(self,input_data = None):
super(TableModel,self).__init__()
self.tableData = input_data
if self.tableData is None:
self.tableData = list()
def rowCount(self,parent = QModelIndex):
try:
row_count = len(self.tableData)
return row_count
except:
return 0
def columnCount(self,parent = QModelIndex):
try:
column_count = len(self.tableData[0])
return column_count
except:
return 0
def headerData(self,section,orientation,role=Qt.DisplayRole):
if role == Qt.DisplayRole and orientation == Qt.Horizontal:
return self.headerLabels[section]
return QAbstractTableModel.headerData(self,role)
def data(self,index,role = Qt.DisplayRole):
if role == Qt.DisplayRole or role == Qt.EditRole:
return self.tableData[index.row()][index.column()]
class TableView(QTableView):
def __init__(self):
super(TableView,self).__init__()
self.setSelectionBehavior(self.SelectRows)
class MainWindow(QMainWindow):
def __init__(self):
super(MainWindow,self).__init__()
self.tableView = TableView()
self.delegate = WidgetDelegate()
self.tableView.setItemDelegate(self.delegate)
self.initUi()
self.tableModel = TableModel(data)
self.tableView.setModel(self.tableModel)
def initUi(self):
#----- Init UI -----
mainLayout = QVBoxLayout()
mainLayout.addWidget(self.tableView)
mainWidget = QWidget()
mainWidget.setLayout(mainLayout)
self.setCentralWidget(mainWidget)
self.resize(650,350)
if __name__ == "__main__":
app = QApplication(sys.argv)
window = MainWindow()
window.show()
sys.exit(app.exec_())
而不是最后一列中的 ProgressBars 我得到了一个损坏的布局:
布局截图:
更新:
它看起来像是 MacOS 的 PySide2 和 PySide6 中的错误。 我提交了一个错误报告: https://bugreports.qt.io/browse/PYSIDE-1464
解决方法
感谢您的帮助 eyllanesc。 它看起来像是 PySide2 和 PySide6 以及 MacOS 的 PyQt5 中的错误。我已提交错误报告:https://bugreports.qt.io/browse/PYSIDE-1464
截至目前,我没有任何可行的方法来实现 QProgressBar 委托。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。