PyQt5 теперь показывает значки?
Я только что установил python3 (3.5.2) и Pyqt5(5.8.2), и я следую этому руководству, чтобы изучить и создать графический интерфейс:
http://zetcode.com/gui/pyqt5/firstprograms/
Я пытаюсь запустить 2-й пример, но программе выдается ошибка (которая также произошла на 1-м, но так как у нее не было изображения, я не заметил), которая заключается в следующем:
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 и установил с помощью 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_())
После вашего поста я перепроверил все свои пакеты (удалил все pyqt и снова установил). Ошибка немного отличается, но результат тот же
python3 example_02.py
QApplication: invalid style override passed, ignoring it.
6 ответов
Обратите внимание, что у вас нет значков для всех приложений, а не только для примера значков PyQt. Это связано с тем, что по умолчанию определенные среды отключают значки в заголовке окна. Вы должны включить их.
Например, в среде рабочего стола Xfce мы можем использовать xfce4-settings-editor
инструмент. В настройках / редакторе настроек выберите xfwm4
, Найти show_app_icon
вариант и проверьте его. Измените тему назад и вперед, чтобы увидеть изменения; они не видны сразу.
После этого вы увидите значок в заголовке примера PyQt5.
Что касается предупреждения; это недавняя вещь, и она имеет отношение к несовместимости между темами Qt и GTK. Я не нашел решения, чтобы удалить предупреждение до сих пор.
Итак, во-первых, у вас нет ошибок в вашем коде. Это больше похоже на предупреждение, но не даже. Что следующая строка говорит вам
QApplication: invalid style override passed, ignoring it
в том, что ваша опция стиля неверна. Если бы это было ошибкой, ваш скрипт вообще не запустился бы.
Сразу видно, что вы никогда не указываете путь к своему изображению.
Теперь, если изображение находится в том же корневом каталоге, что и скрипт, тогда оно должно распознавать указанное изображение без пути. Но если вы пытаетесь сделать то, что я думаю, это не сработает так или иначе. Я думаю, что вы пытаетесь создать значок запуска, а также значок строки заголовка, который обычно идет рука об руку.
Мне кажется, что вы добавили его в Atom в виде файла ресурсов. В этом случае большинство идей создают путь для этого файла. Иногда это путь, иногда местный 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
Обе эти ссылки объясняют, как создать значок запуска для вашей программы.
Следующая ссылка объяснит, как установить значок в строке меню (строке заголовка) в вашей программе. PyQt4 установить значок панели задач Windows
Я надеюсь, что это помогает вам!
Я изучаю 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'))
...
Наконец, если ваши значки также не могут отображаться, вы должны проверить этот значок, если это разрешенный значок. Короче говоря, обычные изображения не ограничены, поэтому они могут хранить много изображений и легко трансформироваться, но значки имеют определенный размер, цвет и, что более важно, значки имеют прозрачность, то есть вы можете видеть фон, они имеют рамку (не всегда прямой). Таким образом, вы можете использовать веб-инструменты онлайн, чтобы преобразовать свое изображение и попробовать еще раз, это действительно поможет мне!
Также , вы должны проверить исходный формат иконки, убедитесь, что вы никогда не меняете его, например.jpg на.png и т. Д. Это создаст проблему! Жаль, что вы не можете решить эту проблему!
В Windows обязательно используйте настоящий ICO-файл и полный путь
iconpath = os.path.join(os.getcwd(),'qtlearning','assets','python.ico')
self.setWindowIcon(QIcon(iconpath))
Я столкнулся с той же проблемой.
Перво-наперво. Фактически, в классах QWidget или QMainWindow нет метода setWindowIcon(). вам следует попытаться установить QIcon на уровне приложения следующим образом.
app = QApplication(sys.argv)
app.setWindowIcon(QtGui.QIcon('home.png'))
Во-вторых, значок, созданный таким образом с помощью этого кода, не отражается в заголовке окна, вместо этого он будет отображаться как значок приложения, как показано на изображении ниже. the home.png
"значок приложения" в Ubuntu, а не "значок над заголовком окна"
Наконец, путь на самом деле не имеет значения, это может быть абсолютный путь или относительный путь, система будет учитывать их оба.