基本上我希望能够在按住鼠标按钮时“在屏幕上”(在透明的全屏窗口上)进行绘制。然而,当我尝试下面的代码时,我只得到一个跟随我的鼠标的点,但实际上并没有画一条线
我希望它在“绘图模式”激活时画一条线,当绘图模式关闭时,我希望能够与下面的窗口进行交互(因为窗口是透明的)。 pyqt 是否可以做到这一点,如果可以,我该怎么做?
import sys
from copy import deepcopy
from PyQt5.QtCore import Qt,QPoint
from PyQt5.QtGui import QMouseEvent,QPainter,QPen
from PyQt5.QtWidgets import QApplication,QMainWindow
# from widgets import Toolbar
class Canvas(QMainWindow):
"""The main canvas to draw on"""
def __init__(self) -> None:
super().__init__()
self.begin = QPoint()
self.end = QPoint()
self.setGeometry(0,1920,1080)
self.initUI()
def initUI(self):
# self.setWindowOpacity(0.3)
self.setWindowflags(Qt.Window | Qt.CustomizeWindowHint | Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
# If I uncomment this next line,I can't get the dot to follow my mouse at all
# self.setattribute(Qt.WA_TranslucentBackground)
def paintEvent(self,event):
painter = QPainter()
painter.begin(self)
painter.setPen(QPen(Qt.magenta,5,Qt.SolidLine))
painter.drawLine(self.begin,self.end)
painter.end()
def mousePressEvent(self,event: QMouseEvent) -> None:
self.begin = event.pos()
def mouseMoveEvent(self,event: QMouseEvent):
if event.buttons() and Qt.LeftButton:
self.begin = deepcopy(self.end)
self.end = event.pos()
self.update()
def mouseReleaseEvent(self,event: QMouseEvent):
if event.button == Qt.LeftButton:
self.begin = QPoint()
self.end = QPoint()
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Canvas()
window.show()
sys.exit(app.exec_())