【问题标题】:Basic Kivy Q, Positioning Canvas Child {kivy language}基本 Kivy Q,定位画布子 {kivy 语言}
【发布时间】:2014-01-18 19:29:46
【问题描述】:

大家晚上好

只是想知道是否有人可以分享信息,开始玩 kivy,我只是想拥有一个基本的画布小部件并在屏幕顶​​部放置一个矩形,使用 co-ord 0,0 绘制它作为底部。

它还提出了一个问题,即我可以通过使用 0、400 将其设置在顶部附近,但是如何使其始终处于顶部且与分辨率无关。我正在尝试制作一个小型应用程序,作为学习它的一部分,并强化我迄今为止在 python 中学到的知识。

感谢您的任何见解

canvas:
        Rectangle:
            pos: self.pos
            size: self.width , self.height / 10

    Label:
        font_size: 25
        top: root.top
        text:"Score"


    Label:
        font_size: 25
        top: root.top
        text:"4000 points"

【问题讨论】:

    标签: python canvas kivy


    【解决方案1】:

    在 kivy 画布中,点 (0, 0) 实际上是左下角。您可以自己轻松计算最高位置:

    from kivy.app import App
    from kivy.uix.widget import Widget
    from kivy.lang import Builder
    from kivy.properties import ListProperty
    
    kv_string = '''
    <MyWidget>:
        r_size: [root.size[0]/2, root.size[1]/2]
        canvas:
            Color:
                rgb: 0.1, 0.6, 0.3
            Rectangle:
                size: root.r_size
                pos: 0, root.size[1]-root.r_size[1]
    '''
    
    Builder.load_string(kv_string)
    
    class MyWidget(Widget):
        r_size = ListProperty([0, 0])
    
    class TestApp(App):
        def build(self):
            return MyWidget()
    
    if __name__ == '__main__':
        TestApp().run()
    

    您还可以使用FloatLayout,使用pos_hintsize_hint 属性设置与分辨率无关的子小部件大小和位置,然后在每个此类小部件的边界内绘制一些东西:

    from kivy.app import App
    from kivy.uix.floatlayout import FloatLayout
    from kivy.lang import Builder
    
    kv_string = '''
    <MyWidget>:
        Widget:
            pos_hint: {'center_y': 0.5, 'center_x': 0.5}
            size_hint: 0.2, 0.2
            canvas:
                Color:
                    rgb: 0.1, 0.6, 0.3
                Rectangle:
                    size: self.size
                    pos: self.pos
        Widget:
            pos_hint: {'center_y': 0.5, 'center_x': 0.2}
            size_hint: 0.2, 0.2
            canvas:
                Color:
                    rgb: 0.1, 0.6, 0.3
                Rectangle:
                    size: self.size
                    pos: self.pos
        Widget:
            pos_hint: {'center_y': 0.5, 'center_x': 0.8}
            size_hint: 0.2, 0.2
            canvas:
                Color:
                    rgb: 0.1, 0.6, 0.3
                Rectangle:
                    size: self.size
                    pos: self.pos
        Widget:
            pos_hint: {'center_y': 0.2, 'center_x': 0.5}
            size_hint: 0.2, 0.2
            canvas:
                Color:
                    rgb: 0.1, 0.6, 0.3
                Rectangle:
                    size: self.size
                    pos: self.pos
        Widget:
            pos_hint: {'center_y': 0.8, 'center_x': 0.5}
            size_hint: 0.2, 0.2
            canvas:
                Color:
                    rgb: 0.1, 0.6, 0.3
                Rectangle:
                    size: self.size
                    pos: self.pos
    '''
    
    Builder.load_string(kv_string)
    
    class MyWidget(FloatLayout):
        pass
    
    class TestApp(App):
        def build(self):
            return MyWidget()
    
    if __name__ == '__main__':
        TestApp().run()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-01-16
      • 1970-01-01
      • 1970-01-01
      • 2019-01-08
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多