kivy

from kivy.app import App
from kivy.uix.button import Button

def callback(instance):
    print('The button <%s> is being pressed' % instance.text)

bt1=Button(text='Hello World')
bt1.bind(on_press=callback)
class TestApp(App):
    def build(self):
        return bt1

TestApp().run()
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen

Builder.load_string('''
<OneScreen>#kv代码中被<>包裹住的是某个class的名字,这个class需在python代码中声明,它们代表同一个class。
    Button:
        id:one_ask#标记
        text: 'Click me'
        background_color=(0, 0, 1, 1)
        font_size=150
        on_release: root.do_something()#在.kv文件或kv代码里,root只代表其上层被<>包裹住的类,这里root.do_something()就是调用类OneScreen的do_something()
    
''')

class OneScreen(Screen):
    def __init__(self,**kwargs):
        self.author='hfg'    
        super(OneScreen,self).__init__(**kwargs)

    def do_something(self):
        print('ddd')
        self.ids['one_ask'].text=self.author#将id为one_ask的text修改为'hfg'

class TestApp(App):
    def build(self):#build方法继承自App类,build方法返回的控件,在kivy中,称为root widget,kivy将自动缩放根控件,让他填满整个窗口
        return OneScreen()

TestApp().run()
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen

Builder.load_string('''
<ScreenManager>:#
    HomeScreen
    AnotherScreen

<HomeScreen>:
    name: 'home'
    Button:
        text: 'Go to another screen'
        on_release: root.manager.current = 'another'#设置当前Screen为another

<AnotherScreen>:
    name: 'another'
    Button:
        text: "Go back home"
        on_release: root.manager.current = 'home'#设置当前Screen为home
''')

class ScreenManager(ScreenManager):
    pass

class HomeScreen(Screen):
    pass

class AnotherScreen(Screen):
    pass

class TestApp(App):
    def build(self):
        return ScreenManager()

TestApp().run()

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import Screen

from time import gmtime, strftime # this equls cv codes #...

Builder.load_string("""
#:import gmtime time.gmtime
#:import strftime time.strftime

<RootWidget>
    BoxLayout:#布局
        orientation: 'vertical'
        Button:
            id: change_itself
            text: 'I can change myself'
            on_release: root.ids['change_itself'].text = strftime("%a, %d %b %Y %H:%M:%S", gmtime())
        Button:
            id: change_all
            text: 'I can change our behavior'
            on_release: root.change_all()
""")

class RootWidget(Screen):
    def change_all(self):
        print(self.ids)
        for instance_class in self.ids.values():??
            instance_class.text = 'Exit'
            instance_class.bind(on_release=exit)

class TestApp(App):
    def build(self):
        return RootWidget()

if __name__ == '__main__':
    TestApp().run()

Scatter,是实现多点触控的关键,它可以方便地实现移动,缩放,以及旋转的操作

from kivy.app import App
from kivy.uix.scatter import Scatter
from kivy.uix.label import Label
 
class TutorialApp(App):
    def build(self):
        s = Scatter()
        l = Label(text='iPaoMi', font_size=150)
        s.add_widget(l)#将 Label 控件实例添加到 Scatter 控件实例中。这样用户的操作直接影响 Scatter 控件,再由 Scatter 自动将这些影响作用到它内部的子控件(即 Label 控件)上。
        return s
 
if __name__ == "__main__":
    TutorialApp().run()

界面,逻辑分离
kv文件名必须跟类名一致,因为类名为testMarvelApp,所以名为testMarvel.kv

<Marvel>
    Label:
        id: loki
        text: 'loki: I AM YOUR GOD!'
    Button:
        id: hulk
        text: "press to smash loki"
        on_release: root.hulk_smash()

对应的逻辑代码

from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.scatter import Scatter
from kivy.uix.carousel import Carousel
from kivy.uix.button import Button
from kivy.uix.modalview import ModalView
from kivy.uix.scrollview import ScrollView

class Marvel(BoxLayout):
    def hulk_smash(self):
        self.ids.hulk.text = "hulk: puny god!"
        self.ids["loki"].text = "loki: >_<!!!" # alternative syntax

class testMarvelApp(App):
    def build(self):
        return Marvel()

if __name__ == '__main__':
    testMarvelApp().run()
posted @ 2018-07-20 10:00  blog_hfg  阅读(487)  评论(0)    收藏  举报