【发布时间】:2020-07-16 14:48:00
【问题描述】:
我对 QTreeWidget 有点迷失了,我无法从找到的主题中获取相关信息(例如:how to set QTreeView background image with QStyle::StandardPixmap in stylesheet method? 或 Python: PyQt QTreeview example - selection 或 Styling Qt QTreeView with CSS 或 Displaying tabular data in Qt5 ModelViews)。
我有两个文件,一个是gui,一个是工人阶级:
界面:
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
self.tree = QtWidgets.QTreeWidget(Dialog)
self.tree.setGeometry(QtCore.QRect(10, 60, 760, 480))
self.tree.setHeaderLabels(['circ', 'state', 'test'])
self.tree.setSortingEnabled(True)
工人:
class AppWindow(QDialog):
def __init__(self, fullscreen=False):
super().__init__()
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.show()
self.timer = QTimer()
self.timer.setInterval(500)
self.timer.timeout.connect(self.refresh_gui)
self.timer.start()
def refresh_gui(self):
self.painter = QPainter(self)
tmp = {0: {"state": 1, "info": "hello"}, 1: {"state": 0, "info": "world"}}
for i in tmp:
if tmp[i]["state"] == 0:
painter.setPen(QPen(Qt.red, 8, Qt.SolidLine))
else:
painter.setPen(QPen(Qt.green, 8, Qt.SolidLine))
circ = painter.drawEllipse(2,2,20,20)
item = QtWidgets.QTreeWidgetItem(self.ui.tree, [circ, tmp[i]["state"], "empty"])
item.setText(2, "circ painted")
我想实现,如果state == 0 第一列中显示一个红色圆圈,如果state == 1 一个绿色圆圈。我不知道如何将 QTreeWidgetItem 交给 PyQt5.QtGui.QPainter 对象而不是字符串。
另外,我确实得到了错误:
QStandardPaths: XDG_RUNTIME_DIR not set, defaulting to '/tmp/runtime-root'
QWidget::paintEngine: Should no longer be called
QPainter::begin: Paint device returned engine == 0, type: 1
QPainter::setPen: Painter not active
QPainter::end: Painter not active, aborted
还有一些更低的行(因为它):QPainter::setPen: Painter not active
因为我打电话给self.painter = QPainter(self),这是在讨论in this git issue from matplotlib,但我没有在我的代码中修复它。我发现了这个QPainter tutorial,它在 QPixmap 上绘制,它也适用于我,但不是我在这里寻找的。
【问题讨论】:
-
您得到的画家错误与 matplotlib 问题无关:您不能随时在小部件上调用 QPainter,因为它只能在 Qt 创建的
paintEvent内完成(由系统请求“显示”小部件触发,或在调用update()或repaint()后触发)。如果要在项目视图中显示其他内容,则必须继承 QStyledItemDelegate 并覆盖其paint()方法。
标签: python-3.x pyqt5 qpainter qtreewidget