pyqt 相关问题

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

PySide6 QWebEngineView:外部获取请求失败

我正在开发一个项目,其中使用 PySide6 的 QWebEngineView 来显示需要来自 Neo4j 数据库的数据的 D3.js 图形可视化。 HTML 页面使用 JavaScript 的 fetch API 来发布re...

回答 1 投票 0

Qt 小部件的深色主题?

背景 我正在构建一个 PyQt5 应用程序,我想要一个深色主题。以前我从事过 Android 开发工作,其中有一个黑暗主题,我可以为整个应用程序设置......

回答 7 投票 0

Pyqt5 名称错误

我试图找出为什么这会给我一个名称错误。类名App(QDialog):是有错误的类。我完全按照 YouTube 视频进行操作,虽然他的代码可以工作,但我的却不行。 我可以尝试什么

回答 1 投票 0

PyQt5 窗口运行几秒钟后自动关闭 - “进程已完成,退出代码 -1073741819 (0xC0000005)”

我正在尝试使用 PyQt5 制作一个利用网络摄像头的桌面应用程序。我在 YouTube 上看到了一个视频,其中那个人使用线程来实现这一点。我根据我的用例修改了代码。修改...

回答 2 投票 0

如何将 Flask 简单应用程序转换为 EXE 文件(Flask 应用程序位于 PyQt 应用程序中)?

假设我有一个app.py文件(它基本上是一个包含路由和简单方法的Flask应用程序),这个文件导入/需要一个db_manager.py(一个处理数据库查询和..)

回答 1 投票 0

如何让两个mouseMoveEvents一起工作

我有一个QGraphicsEllipseItem和一个QGraphicsScene,它们都有自定义的mouseMoveEvent和mousePressEvent函数。然而,由于某种原因, mouseMoveEvent 似乎只适用于

回答 1 投票 0

为什么子QObject没有被删除?

为了了解有关 PyQt 的更多信息,我编写了一个小脚本: 创建一个 QObject 创建一个 QObject b,以 a 作为其父级 删除一个 此时我期望名称 b 所指向的对象...

回答 1 投票 0

如何解决 Macos 上的 PyQt6 导入问题?

我正在尝试在 MacOS 上运行我的 Python3 .pyw 脚本,该脚本曾经运行正常,但现在出现错误。 (谷歌搜索没找到解决方案) 我的 .pyw 文件中的代码... 导入操作系统 输入信号 来自 PyQt6....

回答 1 投票 0

PyQt,QTableView 中的扩展编辑器

我正在开发一个使用 PyQt 的项目,我对 QTableView 及其项目编辑器有疑问。我的 TableModel 有 2 列,其中的数据紧密耦合并且必须同时更改。 ...

回答 1 投票 0

如何在PyQt5中的QTableWidget中复制和粘贴多个单元格?

我有一个 Qtablewidget,如下所示。我想从表中复制多个单元格并粘贴到同一个表中的其他行中。 到目前为止,我可以在单细胞上做同样的事情,但是有没有办法我可以做 mu...

回答 5 投票 0

如何在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

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