Уведомления

Группа в Telegram: @pythonsu

#1 Сен. 1, 2023 11:31:53

Vlad174
Зарегистрирован: 2023-09-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

KivyMD компиляция в EXE

Всем привет! Я новичок) самоучка. Столкнулся с проблемой компиляции под винду. Сообственно испробывал уже всё прежде чем искать ресурс и идти сюда :-)
Собираю через pyinstall.
auto-py-to-exe юзал тоже. Все другое компилится кроме этого. Уже голову сломал..



Вот собственно сам код (python 3.11) + простейшая БД (sqlite3) в аттаче:

main.py

 import sqlite3
from kivy.lang import Builder
from kivy.uix.screenmanager import FadeTransition
from kivy.uix.screenmanager import ScreenManager, Screen
from kivymd.app import MDApp
from kivymd.uix.boxlayout import MDBoxLayout
from kivymd.uix.button import MDRaisedButton
from kivymd.uix.gridlayout import MDGridLayout
from kivymd.uix.label import MDLabel
db = 'testKivy01.db'
# разметка
Builder.load_string("""
<MainMenuScreen>:
    cols: 3
    spacing: 5
<OtherScreen>:
    orientation: 'vertical'
    spacing: 5
""")
class MainMenuScreen(MDGridLayout):
    def __init__(self, **kwargs):
        self.sm = kwargs.pop('sm', None)  # Извлекаем sm из kwargs и сохраняем в self.sm
        super().__init__(**kwargs)
        # ГЛАВНОЕ МЕНЮ - КНОПКИ
        conn = sqlite3.connect(db)
        cursor = conn.cursor()
        cursor.execute("SELECT id, name FROM test")
        buttons = cursor.fetchall()
        for button_data in buttons:
            button_id, button_name = button_data
            button = MDRaisedButton(
                text=button_name,
                size_hint=(1 / 3, 1 / 4),
                height=150,
            )
            button.elevation = 0
            # button.radius = [20, 50, 50, 20]
            button.md_bg_normal = {'radius': [20, 20, 0, 0]}
            button.shadow_color = [0.15, 0.15, 0.15, 1]
            # Изменяем цвет фона каждой второй кнопки
            if button_id % 2 == 0:  # Четные индексы
                button.md_bg_color = [0.25, 0.25, 0.25, 1]  # серый
            else:
                button.md_bg_color = [0.9, 0.5, 0.12, 0.9]  # золотой
            if button_id == 4:
                button.md_bg_color = [1, 0, 0, 0.5]  # красный
                button.md_bg_normal = {'radius': [50, 50, 50, 50]}
            button.bind(on_release=lambda instance, id=button_id: self.switch_screen(id))
            self.add_widget(button)
            if button_id >=12:
                break
        conn.close()
    def switch_screen(self, button_id):
        self.sm.current = f'screen_{button_id}'  # Используем self.sm для переключения экранов
class OtherScreen(MDBoxLayout):
    def __init__(self, screen_name, **kwargs):
        self.sm = kwargs.pop('sm', None)  # Извлекаем sm из kwargs и сохраняем в self.sm
        super().__init__(**kwargs)
        self.orientation = 'vertical'
        return_button = MDRaisedButton(text="Вернуться на главный экран")
        return_button.elevation = 0
        return_button.shadow_color = [0.15, 0.15, 0.15, 1]
        return_button.md_bg_color = [0.55, 0.55, 0.55, 1]
        return_button.bind(on_release=self.return_to_main)
        self.add_widget(return_button)
        label = MDLabel(text=screen_name, font_style='H4', halign='center')
        self.add_widget(label)
    def return_to_main(self, instance):
        self.sm.current = 'main_menu'  # Используем self.sm для переключения экранов
class MyApp(MDApp):
    def on_start(self):
        self.title = "testKivy01"
    def build(self):
        self.sm = ScreenManager(transition=FadeTransition())  # Сохраняем ScreenManager в self.sm
        main_menu_screen = MainMenuScreen(sm=self.sm)  # Передаем ScreenManager в MainMenuScreen
        main_screen = Screen(name='main_menu')
        main_screen.add_widget(main_menu_screen)
        layout = MDBoxLayout(padding=10)
        layout.md_bg_color = [0.15, 0.15, 0.15, 1]
        layout.add_widget(self.sm)  # Добавляем self.sm
        self.sm.add_widget(main_screen)
        conn = sqlite3.connect(db)
        cursor = conn.cursor()
        cursor.execute("SELECT id, name FROM test")
        buttons = cursor.fetchall()
        for button_data in buttons:
            button_id, button_name = button_data
            screen = OtherScreen(screen_name=button_name, sm=self.sm)  # Передаем self.sm в OtherScreen
            self.sm.add_widget(Screen(name=f'screen_{button_id}'))
            self.sm.get_screen(f'screen_{button_id}').add_widget(screen)
        conn.close()
        return layout
if __name__ == '__main__':
    app = MyApp()
    app.run()

kivyTest01.db
 CREATE TABLE "test" (
	"id"	INTEGER,
	"name"	TEXT
);





Отредактировано Vlad174 (Сен. 1, 2023 11:35:20)

Прикреплённый файлы:
attachment testKivy01.zip (22 байта)

Офлайн

#2 Сен. 1, 2023 12:07:50

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2540
Репутация: +  71  -
Профиль   Отправить e-mail  

KivyMD компиляция в EXE

Картинка не читабельна
ЛОг ошибки и команду на создание ЕХЕ файла в студию



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Сен. 1, 2023 12:38:09

Vlad174
Зарегистрирован: 2023-09-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

KivyMD компиляция в EXE

скрин

команда

pyinstaller --noconfirm --onedir --windowed --log-level "DEBUG" --strip --add-data "D:/_apps/testKivy01/testKivy01.db;." --paths "D:/_apps/testKivy01"  "D:/_apps/testKivy01/main.py"

Логи в аттаче

Прикреплённый файлы:
attachment logs.zip (18,4 KБ)

Офлайн

#4 Сен. 8, 2023 08:37:19

Vlad174
Зарегистрирован: 2023-09-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

KivyMD компиляция в EXE

Так никто и не ответил)) смысл этого сообщества
Я уже переписал всё на pyqt и всё компилится как надо. Но конечно мне kivy понравился больше. Удобнее как-то.

Офлайн

#5 Сен. 8, 2023 13:30:00

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1276
Репутация: +  110  -
Профиль   Отправить e-mail  

KivyMD компиляция в EXE

Vlad174
Так никто и не ответил)) смысл этого сообщества
Отключи логирование в киви

Офлайн

#6 Сен. 8, 2023 14:51:21

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9698
Репутация: +  842  -
Профиль   Отправить e-mail  

KivyMD компиляция в EXE

Vlad174
Всем привет! Я новичок) самоучка. Столкнулся с проблемой компиляции под винду. Сообственно испробывал уже всё прежде чем искать ресурс и идти сюда :-)
Собираю через pyinstall.
Здесь писал про установку.

Vlad174
Так никто и не ответил)) смысл этого сообщества
Да устали уже писать две вещи по сто раз. 1) Не используй kivy и питон для смартфона. 2) Не компилируй код, делай установщик.

Vlad174
Я уже переписал всё на pyqt и всё компилится как надо. Но конечно мне kivy понравился больше. Удобнее как-то.
Дальше оно не будет запускаться на всех компьютерах. И ты с этим столкнёшься в самый неожиданный момент - когда прогу запустить надо будет срочно и полюбому, а времени на её переделку не будет вообще.



Офлайн

#7 Сен. 10, 2023 17:43:42

Vlad174
Зарегистрирован: 2023-09-01
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

KivyMD компиляция в EXE

xam1816
Благодарю! Это помогло

py.user.next
Спасибо! Про установщик отличный совет) намотаю на ус

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version