[kivy (python)] [Python] 파이썬 키비(kivy) 앱 개발 - Screen Manager
파이썬 키비 앱 만들기
- Screen Manager -
- 코드 참고, https://kivy.programmingpedia.net/en/tutorial/6097/using-the-screen-manager
위젯(Widget) : Screen Manager 개요
스크린 매니저(Screen Manager)는 애플리케이션의 여러 화면을 관리하기 위한 전용 위젯으로 기본 스크린 매니저는 한 번에 한 화면만 표시하고 TransitionBase를 사용하여 한 화면에서 다른 화면으로 전환한다.
화면 관리자인 스크린 매니저 위젯은 화면 좌표 / 스케일 변경 또는 사용자 지정 셰이더를 사용하여 멋진 애니메이션 수행을 기반으로 여러 전환이 지원한다.
위젯(Widget) : Screen Manager 코드 예제
다음 예제는 스크린 매니저 위젯을 이용해 페이지를 앞 뒤로 이동시켜 페이지 번호를 확인하는 예제다.
- 코드 주소 :
from kivy.app import App from kivy.uix.label import Label from kivy.uix.button import Button from kivy.uix.boxlayout import BoxLayout from kivy.uix.screenmanager import ScreenManager, Screen from kivy.uix.screenmanager import SlideTransition class CustomScreen(Screen): def __init__(self, **kwargs): super(CustomScreen, self).__init__(**kwargs) layout = BoxLayout(orientation='vertical') layout.add_widget(Label(text=self.name, font_size=50)) # Add another layout to handle the navigation # and set the height of navigation to 20% # of the CustomScreen navig = BoxLayout(size_hint_y=0.2) # Create buttons with a custom text prev = Button(text='Previous') next = Button(text='Next') # Bind to 'on_release' events of Buttons prev.bind(on_release=self.switch_prev) next.bind(on_release=self.switch_next) # Add buttons to navigation # and the navigation to layout navig.add_widget(prev) navig.add_widget(next) layout.add_widget(navig) # And add the layout to the Screen self.add_widget(layout) def switch_prev(self, *args): self.manager.transition = SlideTransition(direction="right") self.manager.current = self.manager.previous() def switch_next(self, *args): self.manager.transition = SlideTransition(direction="right") self.manager.current = self.manager.next() class ScreenManagerApp(App): def build(self): root = ScreenManager() for x in range(4): root.add_widget(CustomScreen(name='Screen %d' % x)) return root if __name__ == '__main__': ScreenManagerApp().run()
코드를 실행하면 스크린 1부터 다음 버튼과 이전 버튼을 눌러 화면을 전환할 수 있다. 다음 버튼을 눌러
- 스크린 1 -> 2 -> 3 -> 0 순서로 이동된다.
위젯(Widget) : Screen Manager 코드 분석
|
|
|
|
|
|
from kivy.uix.label import Label
from kivy.uix.button import Button
|
|
from kivy.uix.boxlayout import BoxLayout
|
|
from kivy.uix.screenmanager import ScreenManager, Screen
|
|
from kivy.uix.screenmanager import SlideTransition
|
|
메인 클래스는 ScreenManagerApp으로 root에 스크린 매니저를 선언하고 4번 반복해 스크린을 추가한다.
추가한 클래스는 CustomScreen 클래스다. 각 스크린은 반드시 이름이 부여되어야 한다.
class ScreenManagerApp(App): def build(self): root = ScreenManager() for x in range(4): root.add_widget(CustomScreen(name='Screen %d' % x)) return root if __name__ == '__main__': ScreenManagerApp().run()
CustomScreen 클래스를 나눠 살펴보자. 각 화면 레이아웃은 BoxLayout 구성이며 세로(vertical) 형식으로 설정한다. 각 레이아웃에 화면 이름을 가진 라벨을 50크기로 추가한다.
class CustomScreen(Screen): def __init__(self, **kwargs): super(CustomScreen, self).__init__(**kwargs) layout = BoxLayout(orientation='vertical') layout.add_widget(Label(text=self.name, font_size=50))
구성된 레이아웃에서 navig에도 박스레이아웃으로 설정하며 size_hint는 고정 크기 위젯을 모드 뺀 후 사용 가능한 공간을 사용하도록 설정하는 것이다. navig 아래 이전 버튼과 다음 버튼을 선언하고 버튼을 누르면 수행될 이전과 다음 화면 호출 기능이 담긴 클래스를 바인딩한다.
navig = BoxLayout(size_hint_y=0.2) # Create buttons with a custom text prev = Button(text='Previous') next = Button(text='Next') # Bind to 'on_release' events of Buttons prev.bind(on_release=self.switch_prev) next.bind(on_release=self.switch_next)
# Add buttons to navigation # and the navigation to layout navig.add_widget(prev) navig.add_widget(next) layout.add_widget(navig) # And add the layout to the Screen self.add_widget(layout)
이전과 다음 화면으로 이동할 클래스다. 스크린 매니저 위젯의 previous() 함수와 next() 함수를 이용한다. 이동될 때 이동되기 전에 호출한 SlideTransition 모듈로 direction으로 전환 방향을 설정해 화면 전환을 구성한다.
def switch_prev(self, *args): self.manager.transition = SlideTransition(direction="right") self.manager.current = self.manager.previous() def switch_next(self, *args): self.manager.transition = SlideTransition(direction="right") self.manager.current = self.manager.next()
위젯(Widget) : Screen Manager 제공 함수
|
|
화면이 사용되려고 할 때 시작되는 이벤트: 입력 애니메이션이 시작된다.
화면이 표시될 때 발생하는 이벤트: 입력 애니메이션 완료를 표시한다.
화면이 제거될 때 시작되는 이벤트: 나가는 애니메이션
화면이 제거되면 시작되는 이벤트: 나가는 애니메이션이 완료됨
|
|
|
on_progress: Transition object, progression float
on_complete: Transition object
|
[출처] https://m.blog.naver.com/PostView.naver?blogId=dsz08082&logNo=222065319808&navType=by
[kivy (python)] [Python] 파이썬 키비(kivy) 앱 개발 - Screen Manager
파이썬 키비 앱 만들기
- Screen Manager -
- 코드 참고, https://kivy.programmingpedia.net/en/tutorial/6097/using-the-screen-manager
위젯(Widget) : Screen Manager 개요
스크린 매니저(Screen Manager)는 애플리케이션의 여러 화면을 관리하기 위한 전용 위젯으로 기본 스크린 매니저는 한 번에 한 화면만 표시하고 TransitionBase를 사용하여 한 화면에서 다른 화면으로 전환한다.
화면 관리자인 스크린 매니저 위젯은 화면 좌표 / 스케일 변경 또는 사용자 지정 셰이더를 사용하여 멋진 애니메이션 수행을 기반으로 여러 전환이 지원한다.
위젯(Widget) : Screen Manager 코드 예제
다음 예제는 스크린 매니저 위젯을 이용해 페이지를 앞 뒤로 이동시켜 페이지 번호를 확인하는 예제다.
- 코드 주소 :
from kivy.app import App from kivy.uix.label import Label from kivy.uix.button import Button from kivy.uix.boxlayout import BoxLayout from kivy.uix.screenmanager import ScreenManager, Screen from kivy.uix.screenmanager import SlideTransition class CustomScreen(Screen): def __init__(self, **kwargs): super(CustomScreen, self).__init__(**kwargs) layout = BoxLayout(orientation='vertical') layout.add_widget(Label(text=self.name, font_size=50)) # Add another layout to handle the navigation # and set the height of navigation to 20% # of the CustomScreen navig = BoxLayout(size_hint_y=0.2) # Create buttons with a custom text prev = Button(text='Previous') next = Button(text='Next') # Bind to 'on_release' events of Buttons prev.bind(on_release=self.switch_prev) next.bind(on_release=self.switch_next) # Add buttons to navigation # and the navigation to layout navig.add_widget(prev) navig.add_widget(next) layout.add_widget(navig) # And add the layout to the Screen self.add_widget(layout) def switch_prev(self, *args): self.manager.transition = SlideTransition(direction="right") self.manager.current = self.manager.previous() def switch_next(self, *args): self.manager.transition = SlideTransition(direction="right") self.manager.current = self.manager.next() class ScreenManagerApp(App): def build(self): root = ScreenManager() for x in range(4): root.add_widget(CustomScreen(name='Screen %d' % x)) return root if __name__ == '__main__': ScreenManagerApp().run()
코드를 실행하면 스크린 1부터 다음 버튼과 이전 버튼을 눌러 화면을 전환할 수 있다. 다음 버튼을 눌러
- 스크린 1 -> 2 -> 3 -> 0 순서로 이동된다.
위젯(Widget) : Screen Manager 코드 분석
|
|
|
|
|
|
from kivy.uix.label import Label
from kivy.uix.button import Button
|
|
from kivy.uix.boxlayout import BoxLayout
|
|
from kivy.uix.screenmanager import ScreenManager, Screen
|
|
from kivy.uix.screenmanager import SlideTransition
|
|
메인 클래스는 ScreenManagerApp으로 root에 스크린 매니저를 선언하고 4번 반복해 스크린을 추가한다.
추가한 클래스는 CustomScreen 클래스다. 각 스크린은 반드시 이름이 부여되어야 한다.
class ScreenManagerApp(App): def build(self): root = ScreenManager() for x in range(4): root.add_widget(CustomScreen(name='Screen %d' % x)) return root if __name__ == '__main__': ScreenManagerApp().run()
CustomScreen 클래스를 나눠 살펴보자. 각 화면 레이아웃은 BoxLayout 구성이며 세로(vertical) 형식으로 설정한다. 각 레이아웃에 화면 이름을 가진 라벨을 50크기로 추가한다.
class CustomScreen(Screen): def __init__(self, **kwargs): super(CustomScreen, self).__init__(**kwargs) layout = BoxLayout(orientation='vertical') layout.add_widget(Label(text=self.name, font_size=50))
구성된 레이아웃에서 navig에도 박스레이아웃으로 설정하며 size_hint는 고정 크기 위젯을 모드 뺀 후 사용 가능한 공간을 사용하도록 설정하는 것이다. navig 아래 이전 버튼과 다음 버튼을 선언하고 버튼을 누르면 수행될 이전과 다음 화면 호출 기능이 담긴 클래스를 바인딩한다.
navig = BoxLayout(size_hint_y=0.2) # Create buttons with a custom text prev = Button(text='Previous') next = Button(text='Next') # Bind to 'on_release' events of Buttons prev.bind(on_release=self.switch_prev) next.bind(on_release=self.switch_next)
# Add buttons to navigation # and the navigation to layout navig.add_widget(prev) navig.add_widget(next) layout.add_widget(navig) # And add the layout to the Screen self.add_widget(layout)
이전과 다음 화면으로 이동할 클래스다. 스크린 매니저 위젯의 previous() 함수와 next() 함수를 이용한다. 이동될 때 이동되기 전에 호출한 SlideTransition 모듈로 direction으로 전환 방향을 설정해 화면 전환을 구성한다.
def switch_prev(self, *args): self.manager.transition = SlideTransition(direction="right") self.manager.current = self.manager.previous() def switch_next(self, *args): self.manager.transition = SlideTransition(direction="right") self.manager.current = self.manager.next()
위젯(Widget) : Screen Manager 제공 함수
|
|
화면이 사용되려고 할 때 시작되는 이벤트: 입력 애니메이션이 시작된다.
화면이 표시될 때 발생하는 이벤트: 입력 애니메이션 완료를 표시한다.
화면이 제거될 때 시작되는 이벤트: 나가는 애니메이션
화면이 제거되면 시작되는 이벤트: 나가는 애니메이션이 완료됨
|
|
|
on_progress: Transition object, progression float
on_complete: Transition object
|
[출처] https://m.blog.naver.com/PostView.naver?blogId=dsz08082&logNo=222065319808&navType=by