python - 特定 Qframe 上的 PaintEvent
问题描述
我有下面的代码。我正在尝试在特定的 qframe 上绘制并每 16 毫秒更新一次。
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_test_app(object):
def setupUi(self, test_app):
test_app.setObjectName("test_app")
test_app.resize(800, 600)
self.main_widget = QtWidgets.QWidget(test_app)
self.main_widget.setObjectName("main_widget")
self.verticalLayoutWidget = QtWidgets.QWidget(self.main_widget)
self.verticalLayoutWidget.setGeometry(QtCore.QRect(9, 480, 781, 71))
self.verticalLayoutWidget.setObjectName("verticalLayoutWidget")
self.btn = QtWidgets.QVBoxLayout(self.verticalLayoutWidget)
self.btn.setContentsMargins(0, 0, 0, 0)
self.btn.setObjectName("btn")
self.pushButton = QtWidgets.QPushButton(self.verticalLayoutWidget)
self.pushButton.setObjectName("pushButton")
self.btn.addWidget(self.pushButton)
self.canvas = QtWidgets.QFrame(self.main_widget)
self.canvas.setGeometry(QtCore.QRect(120, 30, 541, 331))
self.canvas.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.canvas.setFrameShadow(QtWidgets.QFrame.Raised)
self.canvas.setObjectName("canvas")
test_app.setCentralWidget(self.main_widget)
self.menubar = QtWidgets.QMenuBar(test_app)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 22))
self.menubar.setObjectName("menubar")
test_app.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(test_app)
self.statusbar.setObjectName("statusbar")
test_app.setStatusBar(self.statusbar)
self.simulation_timer = QtCore.QTimer(
interval=16, timeout=self.perform_simulation_iteration
)
self.simulation_timer.start()
QtCore.QMetaObject.connectSlotsByName(test_app)
def perform_simulation_iteration(self):
print('run sim')
self.canvas.update()
def paintEvent(self,event):
print('run paint')
painter = QtGui.QPainter(self)
painter.setPen(QtGui.QPen(QtCore.Qt.red))
painter.drawArc(QtCore.QRectF(250, 250, 10, 10), 0, 5760)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
test_app = QtWidgets.QMainWindow()
ui = Ui_test_app()
ui.setupUi(test_app)
test_app.show()
sys.exit(app.exec_())
如果我在没有主窗口的情况下做同样的事情,只有一个 qwidget 和一个 qframe 它可以工作,所以我假设它与不与 qframe 关联的paintevent有关,但我不知道该怎么做。
解决方案
推荐阅读
- google-sheets - 在 Google 表格中重复单元格“x”的次数
- python - 在长时间运行的过程中,Flask 会不会对新的请求不敏感?
- azure-pipelines - Azure 数据工厂数据流“设备上没有剩余空间”
- c# - 为什么 Entity Framework Core 显示异步方法?
- c# - 数据库更新语句中的无效列名错误
- ubuntu - 如何在 ubuntu DigitalOcean 上配置 Apache2 以正确重定向除一条路径之外的所有路径
- http - 如何在 POST 请求中获取参数
- javascript - 未捕获的类型错误:current.distance 不是函数
- python - 我们在使用 Buildozer 构建 APK 时遇到了 Python Kivy 的问题
- spring-boot - SpringBoot无法使用thymeleaf打开页面白标错误