python - 将 QPainter 与 QScrollArea 一起使用时的工件
问题描述
我正在尝试使用QPainter
在QScrollArea
.
虽然我成功了,但当我向上或向下滚动时,绘图会被伪影扭曲:
下面是一个最小的可重现示例:
from PyQt5 import QtWidgets, QtGui, QtCore
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.setFixedHeight(200)
self.setFixedWidth(200)
w = QtWidgets.QWidget()
layout = QtWidgets.QVBoxLayout()
w.setLayout(layout)
self.setCentralWidget(w)
scroll = QtWidgets.QScrollArea()
layout.addWidget(scroll)
scrollLayout = QtWidgets.QVBoxLayout()
scrollW = QtWidgets.QWidget()
scrollW.setLayout(scrollLayout)
scrollLayout.setAlignment(QtCore.Qt.AlignTop)
scroll.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
scroll.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
scroll.setWidgetResizable(True)
scroll.setWidget(scrollW)
label = QtWidgets.QLabel()
canvas = QtGui.QPixmap(400, 300)
label.setPixmap(canvas)
scrollLayout.addWidget(label)
def paintEvent():
painter = QtGui.QPainter(label.pixmap())
painter.setRenderHint(QtGui.QPainter.Antialiasing)
painter.setPen(QtCore.Qt.red)
painter.setBrush(QtCore.Qt.white)
painter.drawArc(0, 0, 100, 100, 1440, -2880)
painter.end()
paintEvent()
self.show()
app = QtWidgets.QApplication([])
window = MainWindow()
app.exec_()
我该如何解决这个问题?
解决方案
这个问题可以通过使QPixmap
区域透明来解决:
canvas.fill(QtCore.Qt.transparent)
推荐阅读
- python - 从 Jupyter 运行时,外部函数返回 DataFrames 但不返回变量
- sap-successfactors - 工作申请的成功因素状态更新
- php - 如何在 Yii 的一个查询中执行选择和计数
- sql - 基于优先级显示的 Oracle SQL 查询
- php - Laravel Eloquent:获取相关表的值而不是外键
- c# - 如何在 MySqlConnection 中为服务 WCF 的用户隐藏密码
- python - python中的count方法不能忽略空字符串
- dynamics-crm - 无需更改功能区即可导入解决方案
- jsf - 使用 sec:authentication 的连接面中的 Spring 安全标记库
- docker - 使用 localhost 但不使用域名运行的 Docker - 如何将域名分配给 docker 中的容器 - Windows 10