Форум сайта python.su
Tseka
Делаю так : 1) В designer создаю файл ресурсов “rc.grc” вставляю туда иконку.2) с помощью pyrcc5.exe преобразую в rc_rc.py код файл ресурсов “C:\Program Files\Python36\Scripts\pyrcc5.exe” rc.qrc -o rc_rc.py3) import rc_rc
Офлайн
from PyQt5 import QtCore, QtGui, QtWidgets class Ui_MainWindow(object): def setupUi(self, MainWindow): MainWindow.setObjectName("MainWindow") MainWindow.resize(1097, 520) icon = QtGui.QIcon() icon.addPixmap(QtGui.QPixmap(":/icon/name.ico"), QtGui.QIcon.Normal, QtGui.QIcon.Off) MainWindow.setWindowIcon(icon) ............................... .............................
Отредактировано Tseka (Сен. 6, 2018 15:22:33)
Офлайн
Tseka
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName(“MainWindow”)
MainWindow.resize(1097, 520)
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(“icon/name.ico”), QtGui.QIcon.Normal, QtGui.QIcon.Off)
MainWindow.setWindowIcon(icon)
………………………….
………………………..
Отредактировано DarkNocturne (Сен. 7, 2018 12:13:05)
Офлайн
В пиинсталлере есть опция –add-data позволяющая запихнуть в ваш екзешник любые файлы.
https://pyinstaller.readthedocs.io/en/v3.3.1/spec-files.html#adding-files-to-the-bundle
Но при запуске этого экзешника оно же все содержимое раcпакует куданить в %TEMP%\_MEIXXXX.
Однако пиинсталлер добавляет атрибут sys._MEIPASS, который содержит абсолютный путь к временной папке, вот оотудова нужно достать вашу иконку типа такого:
... icon = 'icon.ico' try: ico_path = sys._MEIPASS except AttributeError: ico_path = '.' icon_file = os.path.join(ico_path, icon) ...
[code python][/code]
Отредактировано PEHDOM (Сен. 7, 2018 18:09:07)
Офлайн
PEHDOM
или как вариант создать просто модуль назовем его icons.py, куда запихнуть иконку в “текстовом” виде , а потом сделать from icons import icon, (тогда пиинсталлер сам затянет нужный модуль) и сковертировать обратно и установить, примерно так https://www.programcreek.com/2013/09/convert-image-to-string-in-python/
Traceback (most recent call last): File "C:\programm\icons.py", line 9, in <module> fh.write(ico.decode('base64')) TypeError: a bytes-like object is required, not 'str'
import sys, os import base64 with open("icon.png", "rb") as imageFile: ico = base64.b64encode(imageFile.read()) print(ico) fh = open("icon.png", "wb") fh.write(ico.decode('base64')) fh.close()
Отредактировано DarkNocturne (Сен. 7, 2018 17:56:33)
Офлайн
DarkNocturneпопробуй так
При декодировании выдает вот это
fh.write(base64.b64decode(ico))
[code python][/code]
Отредактировано PEHDOM (Сен. 7, 2018 18:06:11)
Офлайн
PEHDOM
попробуй такfh.write(base64.b64decode(ico))
Python 3.6.0 (v3.6.0:41df79263a11, Dec 23 2016, 07:18:10) [MSC v.1900 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. >>> ========================= RESTART: C:\programm\p.py ========================= b'' Traceback (most recent call last): File "C:\programm\p.py", line 679, in <module> ex = mainframe() File "C:\programm\p.py", line 34, in __init__ self.initUI() File "C:\programm\p.py", line 228, in initUI self.setWindowIcon(ico) TypeError: setWindowIcon(self, QIcon): argument 1 has unexpected type 'bytes' >>>
import sys, os import base64 with open("icon.png", "rb") as imageFile: ico = base64.b64encode(imageFile.read()) print(ico) fh = open("icon.png", "wb") fh.write(base64.b64decode(ico)) fh.close()
self.setFixedSize(960, 540) self.center() self.setWindowIcon(ico) self.setWindowTitle('|Event Matrix|PC edition|')
Отредактировано DarkNocturne (Сен. 10, 2018 08:26:59)
Офлайн
DarkNocturneэто что такое? это же был только пример как сохранить картинку “как текст” и как ее обратно преобразовать в картинку. Вам нужно то что будет после print(ico) скопировать и вставить эту строку в модуль, а в основном модуле считать ее, преобразовать в “картинку” и скормить ее уже QImage -жу либо через BytesIO, либо у QImage есть чтото типа LoadImageFromBytes()(название метода точно не помню…)
Код icons.py:
import sys, os
import base64
with open(“icon.png”, “rb”) as imageFile:
ico = base64.b64encode(imageFile.read())
print(ico)
fh = open(“icon.png”, “wb”)
fh.write(base64.b64decode(ico))
fh.close()
[code python][/code]
Отредактировано PEHDOM (Сен. 10, 2018 18:13:24)
Офлайн
PEHDOM
это что такое? это же был только пример как сохранить картинку “как текст” и как ее обратно преобразовать в картинку. Вам нужно то что будет после print(ico) скопировать и вставить эту строку в модуль, а в основном модуле считать ее, преобразовать в “картинку” и скормить ее уже QImage -жу либо через BytesIO, либо у QImage есть чтото типа LoadImageFromBytes()(название метода точно не помню…)
import sys, os, os.path ... if hasattr(sys, "_MEIPASS"): icondir = os.path.join(sys._MEIPASS, 'img/icon.png') else: icondir = 'img/icon.png' icon = QIcon(icondir) self.setWindowIcon(icon)
added_files = [ ( 'img/icon.png', 'img' ) ] a = Analysis(['p.py'], pathex=['C:\\programm'], binaries=[], datas= added_files, hiddenimports=[], hookspath=[], runtime_hooks=[], excludes=[], win_no_prefer_redirects=False, win_private_assemblies=False, cipher=block_cipher) ...
Отредактировано DarkNocturne (Сен. 11, 2018 13:12:44)
Офлайн