Как создать несколько файлов python и импортировать их в один файл python в kivy - PullRequest
1 голос
/ 10 июля 2020

Я разрабатываю игру с kivy, у которой есть разные уровни, у каждого уровня есть свой python файл kivy. Я использую диспетчер экрана для перехода с одного уровня экрана на другой. Проблема в том, как импортировать этот файл python Kivy, содержащий каждый уровень внутри файла main.py, с помощью kivy. Я не использую файл .kv.

# level1.py

import kivy
from kivy.app import App
from kivy.uix.floatlayout import Floatlayout
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.label import Label 


class Level1(FloatLayout):
    def __init__(self, **kwargs):
        super(Level1, self).__init__(**kwargs)

         
        self.btn1=Button(text='level 1', size_hint=(0.5, 0.5), 
        on_press=self.click_b1))
      
     self.add_widget(self.btn1)
        
             
           
        def click_b1(self, instance):
             pass
       
class Level1App(App):
    def build(self):
        return Level1()

if __name__ == '__main__':
    Level1App().run()
# level2.py

import kivy
from kivy.app import App
from kivy.uix.floatlayout import Floatlayout
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.label import Label 


class Level2(FloatLayout):
    def __init__(self, **kwargs):
        super(Level2, self).__init__(**kwargs)

         
        self.btn1=Button(text='level 2', size_hint=(0.5, 0.5), 
        on_press=self.click_b1))
      
     self.add_widget(self.btn1)
        
             
           
        def click_b1(self, instance):
             pass
       
class Level2App(App):
    def build(self):
        return Level1()

if __name__ == '__main__':
    Level2App().run()

Как импортировать level1.py и level2.py внутри main.py, в котором есть диспетчер экрана (без .kv)

# main.py with screen manager 

from kivy.app import App
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.floatlayout import FloatLayout
from kivy.uix.screenmanager import ScreenManager, Screen, FadeTransition


class ScreenManagement(ScreenManager):
    def __init__(self, **kwargs):
        super(ScreenManagement, self).__init__(**kwargs)


class Level1Window(Screen):
    def __init__(self, **kwargs):
        super(Level1Window, self).__init__(**kwargs)

# run level1.py file here
        

class level2Window(Screen):
        def __init__(self, **kwargs):
            super(Level2Window, self).__init__(**kwargs)
            
# run level2.py file here

class Application(App):
    def build(self):
        sm = ScreenManagement(transition=FadeTransition())
        sm.add_widget(Level1Window(name='#'))
        sm.add_widget(Level2Window(name='#'))
        return sm


if __name__ == "__main__":
    Application().run()

1 Ответ

0 голосов
/ 10 июля 2020

Вы используете класс Application (App) для своей основной игры. Из-за этого я никогда не вызываю разные файлы .py под экранами. Поэтому я предлагаю вам закодировать классы экрана для вашей игры ниже. Потому что он вам нужен. Например, если вам нужен счет после перехода игрока на следующий уровень, вы можете отправить свой текущий счет. Диспетчер экранов имеет полезные функции:

on_pre_enter (перед загрузкой страницы), on_enter (после загрузки страницы), on_leave и on_pre_leave .

Итак, вы просто нужно указать имя и id для ваших страниц. Код, если вы хотите отправить счет и другие значения ниже on_pre_leave или on_leave функции . И переключите страницу, например:

self.manager.current = 'page2name'

Получить значения с предыдущей страницы с помощью on_enter или on_pre_enter fun c.:

score = self.manager.ids.page1id.score

Если есть другой короткий путь, я надеюсь научиться, но я думаю, что это лучший и самый быстрый способ их кодирования.

...