【发布时间】:2020-04-29 18:45:40
【问题描述】:
我正在使用 Kivy 为 Android 和 IOS 开发应用程序,我还没有在任何移动设备上尝试过,但我注意到我需要添加一些“触摸”事件,以便按钮、滑动等将在移动触摸屏上工作。 我试过四处寻找例子,但我并没有完全理解这个概念,我想知道我到底需要做什么才能为触摸事件做好准备,我正在考虑进行“滑动触摸”来移动在两边的页面之间,我需要做什么才能做到这一点?
【问题讨论】:
我正在使用 Kivy 为 Android 和 IOS 开发应用程序,我还没有在任何移动设备上尝试过,但我注意到我需要添加一些“触摸”事件,以便按钮、滑动等将在移动触摸屏上工作。 我试过四处寻找例子,但我并没有完全理解这个概念,我想知道我到底需要做什么才能为触摸事件做好准备,我正在考虑进行“滑动触摸”来移动在两边的页面之间,我需要做什么才能做到这一点?
【问题讨论】:
当您想要浏览您提到的页面时。使用 PageLayout 可能是一个不错的选择。查看文档:https://kivy.org/doc/stable/api-kivy.uix.pagelayout.html PageLayout 是您拥有多个页面的地方,您可以在其中滑动浏览它们。它可能适合你。 这是一个非常简单的示例。您将拥有三个页面
PageLayout:
Button:
text: 'page1'
Button:
text: 'page2'
Button:
text: 'page3'
这是一个来自 kv 文件的高级页面布局示例。 pagelyout 然后由浮动布局组成。但是你也可以使用其他布局
<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()
【讨论】: