ScreenManager를 사용하는 올바른 .kv 코드를 외부 .kv 파일에 넣을 때 작동하지 않는 이유는 무엇입니까?

marue

완벽하게 기능하는 코드 :

from kivy.app import App
from kivy.lang import Builder

from kivy.uix.screenmanager import ScreenManager, Screen, NoTransition

Builder.load_string("""
#:kivy 1.8

<StartScreen>:
    BoxLayout:
        Label:
            text: "Press Button to"
        Button:
            text: "Start Server"
            on_press:
                root.start_server()
                root.manager.current='stopscreen'

<StopScreen>:
    BoxLayout:
        Label:
            text: "Press Button to"
        Button:
            text: "Stop Server"
            on_press:
                root.stop_server()
                root.manager.current='startscreen'
""")

class StartScreen(Screen): 
    def start_server(self):
        print('Server started.')


class StopScreen(Screen):  
    def stop_server(self):
        print('Server stopped.')


sm = ScreenManager(transition=NoTransition())
sm.add_widget(StartScreen(name='startscreen'))
sm.add_widget(StopScreen(name='stopscreen'))


class MySpecialApp(App):

    def build(self):
        return sm


MySpecialApp().run()

이제 Kivy Docs에 따르면이 코드의 시작 부분에로드 된 문자열을 외부 파일 인 myspecial.kv에 넣는 것이 가능해야합니다. 그렇게하면 화면이 비어 있고 버튼도 텍스트도 없습니다. 그 이유는 무엇이며 어떻게 작동하도록 할 수 있습니까?

험악한

myspecial.kv파일은 응용 프로그램이 시작될 때로드,하지만 당신은 그 전에 위젯을 초기화한다. 을 실행하는 지점에서 sm = ScreenManager(transition=NoTransition())kv가 아직로드되지 않았으므로 ScreenManager에 예상 된 스타일이 없습니다.

대신 build메서드 내에서 위젯을 만들어야합니다 . 이 메서드가 실행되기 전에 kv 파일이로드되므로 모든 것이 제대로 작동해야합니다.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

Related 관련 기사

뜨겁다태그

보관