gpt4 book ai didi

python - 使用我的应用程序的透明背景制作全屏绘画程序

转载 作者:行者123 更新时间:2023-12-04 12:38:51 25 4
gpt4 key购买 nike

我的目标是制作一个小的 PC/Windows 程序,它可以让我在屏幕上逐字绘制并将结果保存为具有透明背景的 png。喜欢Epic Pen等软件或 gInk但我的方式。全部使用 Python 3.7 和 PyQt5。

到目前为止,我设法获得了一个功能绘图应用程序(基本上遵循 this tutorial ),因为我正在同时学习 PyQt。我设法将我的草稿保存为具有透明背景的 png。我可以使绘图板全屏无边框。

现在的问题是,我找不到使整个背景透明的方法。虽然我已经找到了使用这些方法使窗口透明且无边框的方法:

Window = Window()
Window.setStyleSheet("background:transparent;")
Window.setAttribute(Qt.WA_TranslucentBackground)
Window.setWindowFlags(Qt.FramelessWindowHint)
Window.show()

它可以工作......直到我有一个绘图区。我可以在上面画画,它会以透明背景保存,但它显示为黑色。

所以我正在寻找那个解决方案。即使没有 PyQt,我也不在乎,只要我能让我的程序正常工作。

所以这就是我所拥有的(我向您展示了带有框架的窗口以便于解释):
enter image description here

这就是我想要的:
enter image description here

这是我的代码:

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QMenuBar, QMenu, QAction, QShortcut, QFileDialog
from PyQt5.QtGui import QIcon, QImage, QPainter, QPen
from PyQt5.QtCore import Qt, QPoint


class Window(QMainWindow):
def __init__(self):
super().__init__()

top = 400
left = 400
width = 800
height = 600

icon = "icons/icon.png"

self.setWindowTitle("ScreenPen drawing board")
self.setGeometry(top, left, width, height)
self.setWindowIcon(QIcon(icon))

# ---------- sets image ----------
self.image = QImage(self.size(), QImage.Format_RGBA64)
self.image.fill(Qt.transparent)

# ---------- init drawing state ----------
self.drawing = False
self.brushSize = 2
self.brushColor = Qt.red
self.lastPoint = QPoint()

# ---------- Define Menus ----------
# mainmenu
mainMenu = self.menuBar()
fileMenu = mainMenu.addMenu("File")
toolMenu = mainMenu.addMenu("Tool")
toolColor = mainMenu.addMenu("Color")
# smenu save
saveAction = QAction(QIcon("icons/save.png"), "Save", self)
saveAction.setShortcut("Ctrl+S")
fileMenu.addAction(saveAction)
saveAction.triggered.connect(self.saveFrame)
# smenu clear frame
clearFrameAction = QAction(QIcon("icons/clear.png"), "Clear Frame", self)
clearFrameAction.setShortcut("Ctrl+Del")
fileMenu.addAction(clearFrameAction)
clearFrameAction.triggered.connect(self.clearFrame)
# smenu Tool Pen
toolPenAction = QAction(QIcon("icons/toolPen.png"), "Pen", self)
# clearAction.setShortcut("Ctrl+Del")
toolMenu.addAction(toolPenAction)

# ---------- Catch Mouse Down --------

def mousePressEvent(self, event):
if event.button() == Qt.LeftButton:
self.drawing = True
self.lastPoint = event.pos()

# ---------- Catch Mouse Move --------
def mouseMoveEvent(self, event):
if (event.buttons() & Qt.LeftButton) & self.drawing:
painter = QPainter(self.image)
painter.setPen(QPen(self.brushColor, self.brushSize, Qt.SolidLine, Qt.RoundCap, Qt.RoundJoin))
painter.drawLine(self.lastPoint, event.pos())
self.lastPoint = event.pos()
self.update()

# ---------- Catch Mouse Up --------
def mouseReleaseEvent(self, event):
if event.button == Qt.LeftButton:
self.drawing = False

# ---------- Paint --------
def paintEvent(self, event):
canvasPainter = QPainter(self)
canvasPainter.drawImage(self.rect(), self.image, self.image.rect())

# ---------- Save Action ----------
def saveFrame(self):
filePath, _ = QFileDialog.getSaveFileName(self, "Save Image", "", "PNG(*.png);;JPEG(*.jpg *.jpeg);; ALL Files(*.*)")
if filePath == "":
return
self.image.save(filePath)

# ---------- Clear Frame Action ----------
def clearFrame(self):
self.image.fill(Qt.white)
self.update()

if __name__ == "__main__":
app = QApplication(sys.argv)
Window = Window()
# Window style
Window.setStyleSheet("background:transparent;")
Window.setAttribute(Qt.WA_TranslucentBackground)
# Window.setWindowFlags(Qt.FramelessWindowHint)
Window.show()
app.exec()

最佳答案

我不确定这是否可能。作为一种解决方法,您可以使用 python 截取相关区域的屏幕截图并将其用作背景。当然,如果您移动窗口,则必须更新屏幕截图。

在windows上用python截图:Get screenshot on Windows with Python?

关于python - 使用我的应用程序的透明背景制作全屏绘画程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58157159/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com