does not show icons
Asked Answered
C

6

5

I just installed Python3 (3.5.2) and Pyqt5 (5.8.2) and I am following this tutorial to learn and make a GUI: http://zetcode.com/gui/pyqt5/firstprograms/

I'm trying to run the 2nd example but program is returning an error (which also happened on the 1st one, but since it had no image i took no notice) which is the following:

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.

What is the meaning of this? Am i missing some packages?

I installed pyqt first with this command:

sudo -H pip3 install PyQt5

but Python3 was not acknowledging its existence so i searched the apt ubuntu repos and installed with:

sudo apt install python3-PyQt5

I also tried to reference the image by full path /foo/bar/image.png and nothing

What is the problem?

EDIT #1

The code that i am using is from example 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_())

After your post i reinstalled all my packages. The error is slightly different but the result is the same:

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

Screencapture:Screenshot of my result

Cord answered 19/5, 2017 at 23:20 Comment(3)
First things first. Python 2.7 is the default version installed on ubuntu so if you've done a sidelong installation of Python 3+ always make clear which one you're getting packages for. Otherwise you'll have issues. We can help you more if you post your code along with the error message. Two things that I can say with the info you've given so far. 1. The error given sounds like you've done something incorrectly in the code. 2. Linux doesn't handle icons the same way windows does and it's a bit more involved than a line of code in your program.Nunnally
Just comenting in case someone knows how to help me or the edit does not triger response?Cord
I am not familiar with Atom. You never supply a path to the image. Unless the image is in the same directory (folder) as the script you need to provide a path. Even if you've added it as some form of resource file most ide's typically add a local path and or url to the file wich you'd need to provide. But again I don't know anything about Atom so I can't say for sure. I'd also like to point out that you have no errors. What you're presenting is more akin to a warning but not even. It's telling you that style is invalid. Probably do to a bad path... If it was an error it wouldn't run.Nunnally
M
11

Notice that you are having no icons at all for all applications, not just for the PyQt icon example. This is because by default, certain environments turn off the icons in the titlebar. You have to enable them.

For instance in Xfce Desktop Environment, we can use the xfce4-settings-editor tool. In Settings/Settings Editor select xfwm4. Find the show_app_icon option and check it. Change a theme back and forth to see the changes; they are not visible right away.

Settings Editor

After this, you will see the icon in the titlebar of the PyQt5 example.

Application icon

As for the warning; it is a recent thing and it has to do something with the incopatibilities between Qt and GTK theming. I have not found a solution to remove the warning so far.

Monteverdi answered 1/8, 2017 at 13:45 Comment(1)
I just started with pyqt5 today. How do I get to that window in the first place? Where is the 'Settings/Settings Editor'?Easily
N
3

So first off, you have no errors in your code. That's more akin to a warning but not even. What the following line is telling you

QApplication: invalid style override passed, ignoring it

is that your style option is invalid. If that were an error your script wouldn't run at all.

What I see right off the bat is this, you never supply a path to your image.

Now if the image is in the same root directory as the script then it should recognize said image without a path. But if you're attempting to do what I think you are it wouldn't work like that anyway. I think you're trying to create a launcher icon as well as a title bar icon, which typically goes hand in hand.

It appears to me that you've added it to Atom as some form of resource file. In which case most Ide's create a path for that file. Sometimes it's a path, other times a local url. QT its self does both when working with the QT creator.

I've never used Atom so I can't tell you how that works.

What I can say is this. you're using Linux which means .ico files are useless. I told you before linux doesn't handle icon files the same way windows does. This is most likely your problem.

So I sugesst you take a look at this https://askubuntu.com/questions/476981/how-do-i-make-a-desktop-icon-to-launch-a-program

After you read that take a look at this if you have to https://help.ubuntu.com/community/UnityLaunchersAndDesktopFiles#Using_a_text_editor

Both of those links explain how to create a launcher icon for your program.

The following link will explain how to set the icon on the menu bar (title bar) in your program. PyQt4 set windows taskbar icon

I hope this helps you out!

Nunnally answered 24/5, 2017 at 0:1 Comment(0)
S
0

I study PyQt5 from author who give this question,also I have this problem that my icons can't show,I try some ways to catch it,that's what I do,hope it works!

First, it's important that you should use absolute path of the icons,for example:

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

but this not a good idea,so you can use second way like this:

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')))
    # ...

Last, if your icons also can't show, you should check this icon, if it's a legal icon.

In short, the normal images are unlimited so more, they can store many images and transform easily, but the icons have sure size,color kind,and more important,the icons have transparency, that means you can see the background, they have frame(not always straight). So you can use the web online tools to transform your image and try again,that really help me!

Also you should check the icon's source format, ensure you never change it, like .jpg to .png,and other. This will produce problem! Wish you can solve the problem!

Shore answered 2/1, 2019 at 8:42 Comment(0)
M
0

On windows be sure to use a real .ico file and a full path

iconpath = os.path.join(os.getcwd(),'qtlearning','assets','python.ico')  
self.setWindowIcon(QIcon(iconpath))
Mako answered 15/7, 2020 at 16:11 Comment(0)
P
-1

I faced the exact same problem.

First things first. There is no setWindowIcon() method under QWidget or QMainWindow classes, in fact. you should be trying to set the QIcon at the Application level as follows.

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

Second, the icon thus created using this code does not reflect on the title of the window, instead it will reflect as an application icon as shown in the image below. the home.png

https://static.mcmap.net/file/mcmap/ZG-AbGLDKwfpKnMxcF_AZVLQamyA/XdqTR.png

" icon for Application" in Ubuntu and not the " icon over the Window Title"

Finally, the path does not really matter, it can be an absolute path or a relative path, the system will consider either.

Palter answered 6/7, 2020 at 10:3 Comment(1)
This answer is very imprecise. First of all, QWidget does have a setWindowIcon(), and QMainWindow also supports it since it inherits QWidget. Second, as the other answers and comments suggest, the problem has nothing to do with setting the default window icon to the app. Third, the window and taskbar icon behavior might differ depending on the OS implementation. Fourth, the path does matter, and much care must be given for relative paths, as they need to be properly resolved.Filth
H
-1

i just provided the full path of icon as simple as that

Hauger answered 26/8, 2021 at 1:11 Comment(1)
This does not provide an answer to the question. Once you have sufficient reputation you will be able to comment on any post; instead, provide answers that don't require clarification from the asker.Miriam

© 2022 - 2024 — McMap. All rights reserved.