Форум сайта python.su
Всем привет! Я новичок) самоучка. Столкнулся с проблемой компиляции под винду. Сообственно испробывал уже всё прежде чем искать ресурс и идти сюда :-)
Собираю через 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()
CREATE TABLE "test" ( "id" INTEGER, "name" TEXT );
Отредактировано Vlad174 (Сен. 1, 2023 11:35:20)
Прикреплённый файлы:
testKivy01.zip (22 байта)
Офлайн
Картинка не читабельна
ЛОг ошибки и команду на создание ЕХЕ файла в студию
Офлайн
Офлайн
Так никто и не ответил)) смысл этого сообщества
Я уже переписал всё на pyqt и всё компилится как надо. Но конечно мне kivy понравился больше. Удобнее как-то.
Офлайн
Vlad174Отключи логирование в киви
Так никто и не ответил)) смысл этого сообщества
Офлайн
Vlad174Здесь писал про установку.
Всем привет! Я новичок) самоучка. Столкнулся с проблемой компиляции под винду. Сообственно испробывал уже всё прежде чем искать ресурс и идти сюда :-)
Собираю через pyinstall.
Vlad174Да устали уже писать две вещи по сто раз. 1) Не используй kivy и питон для смартфона. 2) Не компилируй код, делай установщик.
Так никто и не ответил)) смысл этого сообщества
Vlad174Дальше оно не будет запускаться на всех компьютерах. И ты с этим столкнёшься в самый неожиданный момент - когда прогу запустить надо будет срочно и полюбому, а времени на её переделку не будет вообще.
Я уже переписал всё на pyqt и всё компилится как надо. Но конечно мне kivy понравился больше. Удобнее как-то.
Офлайн
xam1816Благодарю! Это помогло
py.user.nextСпасибо! Про установщик отличный совет) намотаю на ус
Офлайн