pyqt 相关问题

PyQt是一套用于Qt公司Qt应用程序框架的Python v2和v3绑定,可在Qt支持的所有平台上运行,包括Windows,macOS,Linux,iOS和Android

如何在PyQt6中为图像制作遮罩并将其变成不同的颜色?

我有下面的图片。 我用 javascript 将其设置为蒙版,这样我就可以将图像转换为我想要的每种颜色。这是代码。 索引.html 我有下面的图片。 我用 JavaScript 将其设置为蒙版,这样我可以将图像转换为我想要的每种颜色。这是代码。 index.html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body style="background-color: darkgray;"> <canvas id="theCanvas" style="background-color: lightgray;"></canvas> <script src="main.js"></script> </body> </html> main.js const theCanvas = document.getElementById("theCanvas"); const ctx = theCanvas.getContext("2d"); theCanvas.width = 150; theCanvas.height = 150; const image = new Image(); image.onload = drawImageActualSize; image.src = "image.png"; color = "red"; function drawImageActualSize() { ctx.fillStyle = color; ctx.rect(0, 0, theCanvas.width, theCanvas.height); ctx.fill(); ctx.globalCompositeOperation = "destination-atop"; ctx.drawImage(this, 0, 0, theCanvas.width, theCanvas.height); ctx.globalCompositeOperation = "multiply"; ctx.drawImage(image, 0, 0, theCanvas.width, theCanvas.height); } 这给了我下面的图片。 现在我想使用 Python 在 PyQt6 中做同样的工作,但是我应该如何在 pyqt6 中制作图像蒙版? 到目前为止,我在下面的代码中做到了这一点。 主.py from sys import argv from sys import exit as ex from pathlib2 import Path from PyQt6.QtWidgets import QApplication, QWidget, QSizePolicy, QVBoxLayout from PyQt6.QtCore import Qt, QRectF, QTimer from PyQt6.QtGui import QPaintEvent, QPainter, QImage, QPen, QColor, QBrush class PaintWidget(QWidget): def __init__(self, parent=None) -> None: super().__init__() self.setSizePolicy( QSizePolicy(QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding) ) self.image = QImage(str(Path(Path(__file__).parent, "image.png"))) self.image.scaledToWidth(150) self.timer = QTimer(self) self.timer.timeout.connect(self.update) self.timer.start(17) def paintEvent(self, event: QPaintEvent | None) -> None: painter = QPainter() painter.begin(self) painter.setPen(QPen(QColor(169, 169, 169), 0, Qt.PenStyle.SolidLine)) painter.setBrush(QBrush(QColor(169, 169, 169), Qt.BrushStyle.SolidPattern)) painter.drawRect(0, 0, 1920, 1080) rect = QRectF(0, 0, self.image.width(), self.image.height()) painter.drawImage(rect, self.image) painter.end() return super().paintEvent(event) class MainWindow(QWidget): def __init__(self) -> None: super().__init__() self.setup_ui() self.show() def setup_ui(self) -> None: self.showFullScreen() self.main_window_layout = QVBoxLayout() self.painter_widget = PaintWidget() self.main_window_layout.addWidget(self.painter_widget) self.setLayout(self.main_window_layout) if __name__ == "__main__": app = QApplication(argv) main_window = MainWindow() ex(app.exec()) 这给了我这个。 我尝试这个代码 self.masking = self.image.createMaskFromColor(0, Qt.MaskMode.MaskInColor) painter.drawImage(rect, self.masking) 但它把一切都变成黑白并给了我这个。 实现此类效果的方法有多种,这取决于多个方面,包括源图像的实际构成方式。 在您的具体情况下,您有一个完全透明的alpha通道,因此您可以使用QPainter的合成模式,该模式在概念上与javascript画布的模式类似,但工作方式略有不同。 您的尝试不起作用,原因很简单:createMaskFromColor()仅创建一个基本的单色位图(像素为0或1),并且此类图像通常应用作mask,而不是直接绘制。 一种可能是绘制图像,然后根据图像alpha的掩模设置clip区域,并设置CompositionMode_Multiply。 请注意,这仅在“边框”为全黑时才有效,并且不是 100% 准确,因为您会清楚地看到形状周围有“红色”边缘;巧合的是,这也是你从 javascript 代码中得到的。 class PaintWidget(QWidget): def __init__(self, parent=None) -> None: super().__init__(parent) self.setSizePolicy( QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Expanding ) image = QPixmap(str(Path(Path(__file__).parent, "image.png"))) self.image = image.scaledToWidth( 150, Qt.TransformationMode.SmoothTransformation ) self.setMinimumSize(self.image.size()) def paintEvent(self, event: QPaintEvent) -> None: painter = QPainter(self) painter.fillRect(self.rect(), QColor(169, 169, 169)) rect = self.image.rect() painter.drawPixmap(rect, self.image) mask = self.image.toImage().createAlphaMask() painter.setClipRegion(QRegion(QBitmap.fromImage(mask))) painter.setCompositionMode( painter.CompositionMode.CompositionMode_Multiply) painter.fillRect(rect, Qt.GlobalColor.red) 请注意,我对您的代码做了一些更改;最重要的是: scaledToWidth() 返回图像,不调整自身大小(注意它被命名为“scaled”); 在屏幕上绘画时,通常使用 QPixmap 而不是 QImage 更好;为了稍微提高性能,您可以在__init__中创建遮罩(将QPixmap转换为QImage有点昂贵); 使用与画笔颜色相同的 0 宽度笔来绘制彩色矩形是完全没有意义的:使用 QPainter.fillRect() 代替; QRectF(0, 0, self.image.width(), self.image.height()) 也毫无意义,因为你可以只使用 self.image.rect(); 如果您要重写绘画,则不应调用基本实现(super().paintEvent(event));返回它也是毫无意义的,因为它是隐式的 None; 考虑到上述情况,您还可以通过在其构造函数中使用小部件创建画家来简化代码,并避免 end() 调用,该调用在函数返回后立即隐式调用(因为画家将被垃圾收集); 不需要使用计时器来更新小部件,除非内容实际发生变化; 在小部件的构造函数中不调用self.show()也是一个好习惯,即使它的目的是作为一个窗口;

回答 1 投票 0

想用Python制作笔压查看器

我想用Python制作一个笔压查看器。它在那个窗口中工作: 但当我在 Photoshop 或其他软件中绘图时,它不起作用。 当我画画的时候我怎样才能使它工作......

回答 1 投票 0

QTableView 不会完全正确地显示单行文本

这是一个 MRE: 导入系统、日志记录、日期时间 从 PyQt5 导入 QtWidgets、QtCore、QtGui 从 PyQt5.Qt 导入 QVBoxLayout 类 MainWindow(QtWidgets.QMainWindow): def __init__(自身): 是...

回答 1 投票 0

PyQt5 未在另一个函数中将项目添加到列表小部件

我有以下简单的代码,由于某种原因,addItem() 不会在 exec_all() 函数中将项目添加到应用程序 UI 中的列表小部件中。 add_item() 在此之外工作得很好

回答 1 投票 0

从 Qt Designer 将操作链接到 PyQt 中的菜单栏

我是QT Designer和PyQt的新手,但我似乎正在尝试做一些太简单而无法提及或太罕见的事情! 我使用 QT Designer 创建了一个简单的窗口。在那个窗口中有两个菜单

回答 1 投票 0

PyQt 应用程序中的图标未显示

我很难让应用程序中的图标在运行时可见。我已经尝试了所有可以搜索的方法,但仍然不知道出了什么问题。我当前的目录如下所示: 我的...

回答 2 投票 0

PyQt:为应用程序的所有文本提供颜色

我想更改 PyQt 中应用程序的外观。例如,我希望所有文本(按钮、标签等)都是白色的,所有按钮都是某种颜色。 我可以改变吗...

回答 2 投票 0

如何在 QTextEdit 小部件的顶部插入文本?

我有一个简单的 QTextEdit 表单,我将其用作一种日志。事件被记录在表单中,以便用户可以查看历史事件。 我正在使用 textEdit.append() 将新行添加到...

回答 1 投票 0

如何使用pyqt在GUI的选项卡中添加公司的图像或徽标

在此输入图像描述 我想要徽标位于 logo.png 的位置及其右侧 GUI 的选项卡。我该怎么办。

回答 1 投票 0

在 Mac 上使用 Qt Designer 使用 & 字符创建快捷方式

我目前正在学习有关在 Mac Yosemite 上使用 Qt Designer 5 结合 Pycharm 3.4 设计 GUI 的教程。 根据文本道具之前的(基于 Windows 的)教程...

回答 1 投票 0

创建资源文件以在 Qt Designer 中使用它

我想向小部件添加背景图像,因此我需要一个资源文件,但我无法在 Qt Designer 中创建它。这是我所做的: 从小部件中,我进入资源浏览器并单击...

回答 3 投票 0

在 pyqt 设计器中创建的对象上查找Child

我的 pyqt 遇到以下问题: 假设我在 Qt Designer 中创建一个对象并将其保存为 .ui 文件。然后我使用 pyuic 将其转换为 .py 文件。因为我想融入...

回答 3 投票 0

Qt Designer UI (python) 到 JSON

我最近开始使用 qt 构建 python GUI。我有两个问题我无法找到解决方案。下面的代码是我需要构建的示例。 1:检查l中的哪个单选按钮...

回答 2 投票 0

如何配置 Qt Designer 在 OSX 中加载 PyQt 小部件?

以前,我在 Windows 中广泛使用 PyQt:其附带的 PyQt 包括 PyQt Designer,它将加载使用 Python 开发的任何 PyQt Designer 插件。这让我可以轻松拖放那些...

回答 1 投票 0

将 PyQt Widget 图像传输到 ffmpeg

我有一个 PyQt 窗口,其中的小部件会发生变化。我想制作一个视频。我发现这个答案非常有用,但是似乎不可能在...中使用子进程 PIPE 作为目标

回答 1 投票 0

如何在使用 netgraph 的 EditableGraph 构建图形时检索图形上的信息

我是Qt和Netgraph的新手,我想开发一个以图形构建为核心的Qt应用程序。 NetGraph 的 EditableGraph 功能符合我的期望,看起来很棒。不过,我也...

回答 1 投票 0

PyQt4 到 PyQt5 迁移

在过去的几天里,我读了很多关于新旧类型的信号和槽的文章。现在看来更容易了,但我坚持了一个问题。 在我的项目中,旧代码根据名称 passe 生成动态信号...

回答 1 投票 0

当PyQt4中的QRunner的QThreadPool执行完毕时获取通知

我进行了这个快速而肮脏的测试,我在 Python 2.7 上的 PyQt4 中一个接一个地运行 QThreadPool 中的 QRunner 线程。基本上看起来运行良好,但是线程/池......

回答 1 投票 0

如何检查QTreeWidgetItem是否选中或未选中? (PyQt4/Python)

我创建了一个带有项目(父项、子项)的 QTreeWidget,并且设置了一个复选框(如代码所示)。当检查一个项目时,我想使用 SQL 数据库执行命令。 (我知道...

回答 1 投票 0

右键单击 QTableWidget 获取标题列

我有一个 QTableWidget,其中有许多列只是复选框(有些不是)。我正在尝试实现一项功能,以便当用户右键单击与“

回答 2 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.