是否可以在kivy中使用基于文件夹的结构?

时间:2019-11-03 16:21:18

标签: python kivy kivy-language

我正在尝试制作一个应用。我可以在所有文件都位于同一文件夹中的情况下正常工作,但是它变得非常混乱,我想将文件分成以下结构的单独文件夹:Start,Prelogin , and FirebaseLoginScreen`。那我想在基维做些什么吗?

我尝试了#:导入名称xyz作为指针,其中x是文件夹名称,y是kv文件的名称,z是我要导入的kv文件中的类,但是出现了很多奇怪的错误当我尝试这样做时。我几乎已将每个文件夹和所有内容添加到我的PYTHONPATH中,但没有任何效果。

开始包含main.pymain.kv,其中main.kv指向``预登录中的screenmanger''。 Prelogin包含一些由应用程序的标签和文本组成的文件,然后指向FirebaseLoginScreen中的screenmanger。 FirebaseLoginScreen包含许多用于登录系统的文件。

2 个答案:

答案 0 :(得分:1)

是的,我将使用此文件夹结构给您和示例

-Project\
--main.py
--main.kv
--folder1\
----window1.py
----window1.kv
--folder2\
----window2.py
----window3.py
--folder3\
----window4.py
----window4.kv

文件夹\ window1.py 将类似于

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang.builder import Builder
from kivy.uix.widget import Widget

kivy.require("1.11.1")
# Builder is neccesary to work with multiple files
Builder.load_file("folder1/window1.kv")

class login(BoxLayout):    
    def __init__(self, **kwargs):
        super().__init__(**kwargs)

class login_window(App):        
    def build(self):            
        return login() 

if __name__=="__main__":    
    aplicacion=login_window()
    aplicacion.run()
无需指定

folder1 \ window1.kv

main.py 就像

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.lang.builder import Builder
from kivy.uix.widget import Widget

# Import files like
from folder1.window1 import login_window
from folder2.window2 import example2_window
from folder3.window3 import example3_window

class manager(BoxLayout):

    # Add screens to main
    login_widget=login_window()
    example2_widget=example2_window()
    example3_widget=example3_window()        

    def __init__(self, **kwargs):            
        super().__init__(**kwargs)

        # Check kv file to understand these lines
        self.ids.screen_login.add_widget(self.login_widget)
        self.ids.screen_example2.add_widget(self.example2_widget)
        self.ids.screen_example3.add_widget(self.example3_widget)            

class main(App):
    def build(self):
        return manager()

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

main.kv 就像(有ScreenManager!)

#:kivy 1.11.1
<manager>:
    id: main_window

    ScreenManager:
        id: scrn_mngr_main

        Screen:
            id: screen_login
            name:'screen_login'
        Screen:
            id: screen_example2
            name:'screen_example2'
        Screen:
            id: screen_example3
            name:'screen_example3'       

现在,要控制程序流程,您需要在 window1.py

中添加这些行
        self.parent.current='screen_login'
        self.parent.current='screen_example2'
        self.parent.current='screen_example3'

改编自Youtube的3个教程的视频

答案 1 :(得分:0)

答案只是“是”,使用kv语言或使用Kivy时的Python中的导入解析没有什么特别之处。如果您遇到问题,那是因为您要尝试的内容是错误的或不足的,这无法从您提供的信息中进行调试。

如果您想跟进它,请发布另一个问题,并给出一个示例,您认为该示例在使用PYTHONPATH操作后应该可以工作。