5

我刚刚安装了 Python3 (3.5.2) 和 Pyqt5 (5.8.2),我正在按照本教程学习和制作 GUI:http: //zetcode.com/gui/pyqt5/firstprograms/

我正在尝试运行第二个示例,但程序返回一个错误(这也发生在第一个示例中,但由于它没有图像,我没有注意到),如下所示:

QApplication: invalid style override passed, ignoring it.
No XVisualInfo for format QSurfaceFormat(version 2.0, options QFlags<QSurfaceFormat::FormatOption>(), depthBufferSize -1, redBufferSize 1, greenBufferSize 1, blueBufferSize 1, alphaBufferSize -1, stencilBufferSize -1, samples -1, swapBehavior QSurfaceFormat::SwapBehavior(SingleBuffer), swapInterval 1, profile  QSurfaceFormat::OpenGLContextProfile(NoProfile))
Falling back to using screens root_visual.

这是什么意思?我错过了一些包裹吗?

我首先使用以下命令安装了 pyqt:

sudo -H pip3 安装 PyQt5

但是 Python3 没有承认它的存在,所以我搜索了 apt ubuntu repos 并安装了:

sudo apt install python3-PyQt5

我还尝试通过完整路径 /foo/bar/image.png 来引用图像,但什么也没有

问题是什么?

编辑#1

我使用的代码来自示例 2:

#!/usr/bin/python3
# -*- coding: utf-8 -*-

"""
ZetCode PyQt5 tutorial

This example shows an icon
in the titlebar of the window.

author: Jan Bodnar
website: zetcode.com
last edited: January 2015
"""

import sys
import os
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5.QtGui import QIcon

base_dir = os.path.dirname(os.path.abspath(__file__))
os.chdir(base_dir)

class Example(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):

        self.setGeometry(300, 300, 300, 220)
        self.setWindowTitle('Icon')
        self.setWindowIcon(QIcon('image.png'))

        self.show()


if __name__ == '__main__':

    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())

在您发布后,我重新安装了所有软件包。错误略有不同,但结果相同:

python3 example_02.py 
QApplication: invalid style override passed, ignoring it.

屏幕截图:我的结果截图

4

6 回答 6

11

请注意,所有应用程序都没有图标,而不仅仅是 PyQt 图标示例。这是因为默认情况下,某些环境会关闭标题栏中的图标。您必须启用它们。

例如在 Xfce 桌面环境中,我们可以使用该xfce4-settings-editor工具。在设置/设置编辑器中选择xfwm4. 找到show_app_icon选项并检查它。来回更改主题以查看更改;它们不会立即可见。

设置编辑器

之后,您将在 PyQt5 示例的标题栏中看到该图标。

应用程序图标

至于警告;这是最近发生的事情,它必须与 Qt 和 GTK 主题之间的不相容性有关。到目前为止,我还没有找到消除警告的解决方案。

于 2017-08-01T13:45:54.433 回答
3

因此,首先,您的代码中没有错误。这更类似于警告,但甚至不是。以下行告诉你什么

QApplication: invalid style override passed, ignoring it

是您的样式选项无效。如果这是一个错误,您的脚本根本不会运行。

我立即看到的是,您从不提供图像的路径。

现在,如果图像与脚本位于同一根目录中,那么它应该识别出没有路径的图像。但是,如果您尝试做我认为您应该做的事情,那无论如何都不会那样工作。我认为您正在尝试创建一个启动器图标以及一个标题栏图标,这通常是齐头并进的。

在我看来,您已将它作为某种形式的资源文件添加到 Atom。在这种情况下,大多数 Ide 都会为该文件创建路径。有时是路径,有时是本地 url。与 QT 创建者一起工作时,QT 它自己会做这两件事。

我从来没有使用过 Atom,所以我不能告诉你它是如何工作的。

我能说的就是这个。您使用的是 Linux,这意味着 .ico 文件是无用的。我之前告诉过你,linux 处理图标文件的方式与 windows 不同。这很可能是您的问题。

所以我建议你看看这个 https://askubuntu.com/questions/476981/how-do-i-make-a-desktop-icon-to-launch-a-program

读完之后,如果你必须https://help.ubuntu.com/community/UnityLaunchersAndDesktopFiles#Using_a_text_editor看看这个

这两个链接都说明了如何为您的程序创建启动器图标。

以下链接将解释如何在您的程序中设置菜单栏(标题栏)上的图标。 PyQt4设置windows任务栏图标

我希望这可以帮助你!

于 2017-05-24T00:01:21.687 回答
0

在 Windows 上,请务必使用真实的 .ico 文件和完整路径

iconpath = os.path.join(os.getcwd(),'qtlearning','assets','python.ico')  
self.setWindowIcon(QIcon(iconpath))
于 2020-07-15T16:11:45.723 回答
0

我从给出这个问题的作者那里学习 PyQt5,我也有这个问题,我的图标无法显示,我尝试了一些方法来捕捉它,这就是我所做的,希望它有效!

首先,重要的是你应该使用图标的绝对路径,例如:

self.setWindowIcon(QIcon("F:/Workspace/PyQT5-Study/images/web.png"))

但这不是一个好主意,所以你可以像这样使用第二种方式:

from PyQt5.QtCore import QFileInfo
# ...
def initUI(self):
    # ...
    root = QFileInfo(__file__).absolutePath()
    self.setWindowIcon(QIcon(root+'/images/web.png'))
    # or
    # import os
    # current_dir = os.path.dirname(os.path.realpath(__file__))
    # self.setWindowIcon(QIcon(os.path.join(current_dir, 'images/web.png')))
    # ...

最后,如果你的图标也不能显示,你应该检查这个图标,如果它是一个合法的图标

简而言之,普通图片是无限多的,可以存储很多图片,很容易转换,但是图标有一定的大小,颜色种类,更重要的是,图标有透明度,也就是说你可以看到背景,他们有框架(并不总是笔直的)。所以你可以使用网络在线工具来转换你的图像,然后再试一次,这对我很有帮助!

此外,您应该检查图标的源格式,确保永远不会更改它,例如 .jpg 到 .png 等。这会产生问题!祝你能解决问题!

于 2019-01-02T08:42:01.197 回答
-1

我只是提供了图标的完整路径,就这么简单

于 2021-08-26T01:11:19.493 回答
-1

我遇到了完全相同的问题。

第一件事。实际上,QWidget 或 QMainWindow 类下没有 setWindowIcon() 方法。您应该尝试在应用程序级别设置 QIcon,如下所示。

app = QApplication(sys.argv)
app.setWindowIcon(QtGui.QIcon('home.png'))

其次,使用此代码创建的图标不会反映在窗口的标题上,而是会反映为应用程序图标,如下图所示。家.png

https://i.stack.imgur.com/XdqTR.png

Ubuntu 中的“应用程序图标”而不是“窗口标题上方的图标”

最后,路径并不重要,可以是绝对路径,也可以是相对路径,系统都会考虑。

于 2020-07-06T10:03:38.633 回答