【问题标题】:does not show icons不显示图标
【发布时间】:2017-10-20 04:27:48
【问题描述】:

我刚刚安装了 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.

截屏:

【问题讨论】:

  • 第一件事。 Python 2.7 是安装在 ubuntu 上的默认版本,因此如果您已经完成了 Python 3+ 的侧面安装,请务必明确您正在获取哪个软件包。否则你会有问题。如果您将代码与错误消息一起发布,我们可以为您提供更多帮助。到目前为止,我可以根据您提供的信息说两件事。 1. 给出的错误听起来像是你在代码中做错了什么。 2. Linux 处理图标的方式与 windows 不同,它比程序中的一行代码更复杂。
  • 只是发表评论以防有人知道如何帮助我或编辑没有触发响应?
  • 我对 Atom 不熟悉。您永远不会提供图像的路径。除非图像与脚本位于同一目录(文件夹)中,否则您需要提供路径。即使您已将其添加为某种形式的资源文件,大多数 ide 通常也会将本地路径和/或 url 添加到您需要提供的文件中。但同样我对 Atom 一无所知,所以我不能肯定地说。我还想指出你没有错误。您所呈现的内容更类似于警告,但甚至不是。它告诉你风格是无效的。可能是走错路了……如果是错误,它就不会运行。

标签: python pyqt pyqt5 qicon


【解决方案1】:

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

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

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

至于警告;这是最近的事情,它必须做点什么 与 Qt 和 GTK 主题之间的不兼容。我还没有找到 到目前为止删除警告的解决方案。

【讨论】:

  • 我今天刚开始使用pyqt5。我首先如何到达那个窗口? “设置/设置编辑器”在哪里?
【解决方案2】:

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

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 set windows taskbar icon

希望对你有帮助!

【讨论】:

    【解决方案3】:

    我从提出这个问题的作者那里学习 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 等。这会产生问题! 希望你能解决问题!

    【讨论】:

      【解决方案4】:

      在 Windows 上一定要使用真实的 .ico 文件和完整路径

      iconpath = os.path.join(os.getcwd(),'qtlearning','assets','python.ico')  
      self.setWindowIcon(QIcon(iconpath))
      

      【讨论】:

        【解决方案5】:

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

        首先要做的事情。实际上,QWidget 或 QMainWindow 类下没有 setWindowIcon() 方法。您应该尝试在应用程序级别设置 QIcon,如下所示。

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

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

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

        最后,路径无所谓,可以是绝对路径,也可以是相对路径,系统都会考虑。

        【讨论】:

        • 这个答案非常不精确。首先,QWidget确实有一个setWindowIcon(),而且QMainWindow也支持它,因为它继承了QWidget。其次,正如其他答案和 cmets 所暗示的那样,该问题与将默认窗口图标设置为应用程序无关。第三,窗口和任务栏图标的行为可能因操作系统实现而异。第四,路径确实很重要,并且必须非常注意相对路径,因为它们需要正确解析。
        【解决方案6】:

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

        【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-05-19
        • 2016-09-12
        • 2021-08-14
        • 2019-11-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多