powered by simpleCommunicator - 2.0.40     © 2025 Programmizd 02
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PyQT5 standalone application for MacOS
3 сообщений из 3, страница 1 из 1
PyQT5 standalone application for MacOS
    #39830054
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый День.

Эх очень давно не задавал вопросов в профильных форумах.

Итак.
В Python-е самый я начинающий.
Разработка велась под Windows


Итак
main.py


Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QMessageBox

from decryptwindow import Ui_Dialog  # importing our generated file

import sys
import os

class mywindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(mywindow, self).__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)


    app = QtWidgets.QApplication([])
    application = mywindow()
    application.show()
    sys.exit(app.exec())



interface file ( decryptwindow.py )

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
# Created by: PyQt5 UI code generator 5.11.3

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, 
QInputDialog, QFileDialog, QListWidget, QMessageBox

from PyQt5.QtCore import pyqtSlot
import os
import configparser

from itertools import filterfalse
from pathlib import Path

import click
import PyPDF2

config = configparser.RawConfigParser()
config.read('config.ini')
path_val = config.get('DEFAULT', 'path')
browsetooltip = config.get('LANGUAGE', 'browsetooltip')
selectbutton = config.get('LANGUAGE', 'selectbutton')

if not os.path.exists(path_val):
    path_val = /Users


class Ui_Dialog(QWidget):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(325, 269)
        self.directory = path_val
        self.BrowsepushButton = QtWidgets.QPushButton(Dialog)
        self.BrowsepushButton.setEnabled(True)
        self.BrowsepushButton.setGeometry(QtCore.QRect(240, 10, 75, 23))
        self.BrowsepushButton.setObjectName("BrowsepushButton")
        self.BrowsepushButton.setToolTip(browsetooltip)
        self.BrowsepushButton.clicked.connect(self.BrowsepushButton_on_click)
        self.fileslistWidget = QtWidgets.QListWidget(Dialog)
        self.fileslistWidget.setGeometry(QtCore.QRect(20, 10, 201, 171))
        self.fileslistWidget.setObjectName("fileslistWidget")
        # fill the fileslistWidget with the files from the folder 
        # The folder is taken from the config.ini
        for file_name in os.listdir(path_val):  
        self.fileslistWidget.addItem(file_name)   
        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)

    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "PDF decrypt/Encrypt utility"))
        self.BrowsepushButton.setText(_translate("Dialog", selectbutton))

    def BrowsepushButton_on_click(self):
        # print('BrowsepushButton button clicked')

        self.directory = QtWidgets.QFileDialog.getExistingDirectory(self, "Choose the folder")
        if self.directory:  
            for file_name in os.listdir(self.directory):  
                self.fileslistWidget.addItem(file_name)  
            # update existing value in ini file with the self.directory
                config.set('DEFAULT', 'Path', self.directory)
            # save last selected folder back to config.ini
                with open('config.ini', 'w') as configfile:
                    config.write(configfile)



ini-file ( config.ini )
Код: sql
1.
2.
3.
4.
5.
6.
[DEFAULT]
path = /documents/files

[LANGUAGE]
browsetooltip = Click to Select the folder
selectbutton = Select folder



Разумеется
python3 main.py отрабатывает как и должно быть.
Данные читаются из ИНИ-файла и пишутся в него

Скомпилировав на Windows машине ( при помощи py2exe ) -
так же работает.

Однако нужно эту же задачу реализовать на macOS Mojave 10.14.4

Установил на VMWare macOS Mojave 10.14.4
Установил Python3.7
так же как и на Windows, из терминала python3 main.py отрабатывает как и должно быть.

Скомпилировал
Код: python
1.
py2applet --make-setup main.py



Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
""
This is a setup.py script generated by py2applet

Usage:
    python setup.py py2app
"""

from setuptools import setup

APP = ['main.py']
DATA_FILES = ['']
OPTIONS = {}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)



Код: python
1.
python3 setup.py py2app



И имеем main.app - stand alone application for Mac OS

Однако main.app файл при запуске крашится с unknown terminal error

Избежать сего удалось только включив config.ini в setup.py,
который теперь выглядит так:

Код: python
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
""
This is a setup.py script generated by py2applet

Usage:
    python setup.py py2app
"""

from setuptools import setup

APP = ['main.py']
DATA_FILES = ['config.ini']
OPTIONS = {}

setup(
    app=APP,
    data_files=DATA_FILES,
    options={'py2app': OPTIONS},
    setup_requires=['py2app'],
)



Все работает.

Однако config.ini теперь разумеется "не для записи" .

Собственно вопрос в том - как скомпилировать, чтоб работало именно с внешним config.ini?

Возможно нужно использовать что-то другое, не py2applet?

Спасибо за советы.
...
Рейтинг: 0 / 0
PyQT5 standalone application for MacOS
    #39830103
mini.weblab
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
justIT,
у меня нет доступа к Мак ОС, но есть подозрение, что программа не находит 'config.ini'

что получается если запустить программу на Маке через терминал, но из директории уровнем выше?
примерно так:
> python3 parent_dir/main.py
...
Рейтинг: 0 / 0
PyQT5 standalone application for MacOS
    #39837318
Фотография justIT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mini.weblabjustIT,
у меня нет доступа к Мак ОС, но есть подозрение, что программа не находит 'config.ini'

что получается если запустить программу на Маке через терминал, но из директории уровнем выше?
примерно так:
> python3 parent_dir/main.py

Вы правы.
Запуск из директории выше указывает на невозможность найти config.ini

Но, появилась еще одна "бяка", по сравнению с которой проблема с ини-файлом вовсе и не проблема :-)

Использование pikepdf
Код: python
1.
import pikepdf



не позволяет скомпилировать проект в stand alone app
Точней проект компилируется, но при запуске получаем несколько ошибок.
Решения пока не нашел.

При запуске из-под python3 все работает как часы.

p.s. Откуда знаю, что проблема в import pikepdf?
Знаю, исключив импорт, stand alone app запускается
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PyQT5 standalone application for MacOS
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]