如何在鼠标cli上的FigureCanvasQTAgg上绘制圆

2024-04-25 11:34:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我是Qt新手,我正在尝试做一个程序,我以前在tkinter中做过,来学习如何使用它。我在Qt窗口中嵌入了一个FigureCanvasQtAgg。我已经计划好了。现在我想在这个画布上,在用户的鼠标点击上画一个圆圈。在

我在Tkinter上所做的是使用:

self.canvas.get_tk_widget().create_oval()

有没有一种简单的方法可以在PySide2中得到相同的结果?在

下面是一个我尝试过的简单代码:

^{pr2}$

我在tkinter中所做的(当我单击画布时,会出现一个绿色的点):

^{3}$

有什么办法在QT中得到这个结果吗?谢谢!在


Tags: 用户self程序gettkinter画布鼠标qt
1条回答
网友
1楼 · 发布于 2024-04-25 11:34:16

与tkinter不同,Qt没有实现像create_oval()这样的函数来生成圆,因此另一种选择是使用matplotlib的工具。在

from PySide2 import QtCore, QtGui, QtWidgets

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
import matplotlib.pyplot as plt

import numpy as np


class MyPaintWidget(QtWidgets.QWidget):
    def __init__(self):
        super().__init__()

        self.figure = plt.gcf()
        self.canvas = FigureCanvas(self.figure)
        self.canvas.mpl_connect("button_press_event", self._on_left_click)
        self.axes = self.figure.add_subplot(111)
        x = np.arange(0, 10, 0.1)
        y = np.cos(x)
        self.axes.plot(x, y)

        layout_canvas = QtWidgets.QVBoxLayout(self)
        layout_canvas.addWidget(self.canvas)

    def _on_left_click(self, event):
        self.axes.scatter(event.xdata, event.ydata)
        self.figure.canvas.draw()


if __name__ == "__main__":
    import sys

    app = QtWidgets.QApplication(sys.argv)

    w = MyPaintWidget()
    w.show()
    sys.exit(app.exec_())

enter image description here

另一个可能的解决方案是实现从FigureCanvas类继承的create_oval()方法:

^{pr2}$

enter image description here

相关问题 更多 >