kivy - как подготовить приложение к сенсорным событиям - PullRequest
0 голосов
/ 29 апреля 2020

Я занимаюсь разработкой приложения, использующего Kivy для Android и IOS, я еще не пробовал его на любом мобильном телефоне, но заметил, что мне нужно добавить некие «сенсорные» события, чтобы кнопки, swipes и et c будут работать на мобильном сенсорном экране. Я пытался искать примеры, но я не совсем понял концепцию, и мне было интересно, что именно мне нужно сделать, чтобы она была готова к сенсорным событиям, я думаю сделать «касание пальцем», чтобы двигаться между страницами с обеих сторон, что мне нужно сделать, чтобы это произошло?

1 Ответ

0 голосов
/ 29 апреля 2020

Когда вы хотите пролистывать страницы, как вы уже упоминали. Это может быть хорошим вариантом для использования PageLayout. Проверьте документы: https://kivy.org/doc/stable/api-kivy.uix.pagelayout.html PageLayout, где у вас есть несколько страниц, и вы можете пролистать их. Это может быть подходящим для вас. Вот очень простой пример. Где у вас будет три страницы

PageLayout:
    Button:
        text: 'page1'
    Button:
        text: 'page2'
    Button:
        text: 'page3'

Вот расширенный пример разметки страницы из файла kv. Выходная страница затем состоит из всплывающих окон. Но вы также можете использовать другие макеты

<Example>:
    PageLayout:
        FloatLayout:
            id: string1
            canvas:
                Color:
                    rgb:utils.get_color_from_hex("#2BFFFA")
                Rectangle:
                    size: self.size
                    pos:self.pos


            Image:
                size_hint:.9,1
                pos_hint:{"top": 1,"right": 1}
                source: "string/str1.png"
        FloatLayout:
            canvas:
                Color:
                    rgb:utils.get_color_from_hex("#39FF22")
                Rectangle:
                    size: self.size
                    pos:self.pos
            Image:
                size_hint:.9,1
                pos_hint:{"top": 1,"right": 1}
                source: "string/str1_sol.png"
        FloatLayout:
            canvas:
                Color:
                    rgb:utils.get_color_from_hex("#2BFFFA")
                Rectangle:
                    size: self.size
                    pos:self.pos
            Image:
                size_hint:.9,1
                pos_hint:{"top": 1,"right": 1}
                source: "string/str2.png"

Обратите внимание, что мой основной макет - это макет страницы, и в плавающем макете у меня есть плавающие макеты. Так что теперь у меня есть три страницы, чтобы пролистать

Или вы можете использовать скримменгер для управления вашими экранами. , И тогда вам просто нужно нажать на кнопку, и тогда вы будете автоматически переключаться между экранами. Вот пример. Это лучше, чем разметка страниц.

import kivy


from kivy.app import App
from kivy.uix.screenmanager import Screen, ScreenManager 
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.label import Label
from kivy.uix.button import Button
from kivy.properties import ObjectProperty

class ScreenOne(Screen):

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

        my_box1 = BoxLayout(orientation='vertical')
        my_label1 = Label(text="BlaBlaBla on screen 1", font_size='24dp')
        my_button1 = Button(text="Go to screen 2",size_hint_y=None, size_y=100)
        my_button1.bind(on_press=self.changer)
        my_box1.add_widget(my_label1)
        my_box1.add_widget(my_button1)
        self.add_widget(my_box1)

    def changer(self,*args):
        self.manager.current = 'screen2'

class ScreenTwo(Screen):

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

        my_box1 = BoxLayout(orientation='vertical')
        my_label1 = Label(text="BlaBlaBla on screen 2",font_size='24dp')
        my_button1 = Button(text="Go to screen 1",size_hint_y=None, size_y=100)
        my_button1.bind(on_press=self.changer)
        my_box1.add_widget(my_label1)
        my_box1.add_widget(my_button1)
        self.add_widget(my_box1)

    def changer(self,*args):
        self.manager.current = 'screen1'

class TestApp(App):

        def build(self):
            my_screenmanager = ScreenManager()
            screen1 = ScreenOne(name='screen1')
            screen2 = ScreenTwo(name='screen2')
            my_screenmanager.add_widget(screen1)
            my_screenmanager.add_widget(screen2)
            return my_screenmanager

if __name__ == '__main__':
    TestApp().run()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...