首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python / Kivy:.kv文件中的条件设计

Python / Kivy:.kv文件中的条件设计
EN

Stack Overflow用户
提问于 2016-12-18 01:37:30
回答 2查看 2.9K关注 0票数 6

在Kivy中可以使用类似于下面示例的方法吗?

发布的代码显然不起作用,这只是一个例子:我需要根据某个属性绘制不同的布局。

你建议如何解决这个问题?

代码语言:javascript
复制
BoxLayout:
    number: 0
    if self.number > 3:
        Label:
            text: 'number is bigger than 3'
        Button:
            text: 'click here to decrease'
            on_press: root.number -= 1
    else:
        Label:
            text: 'number is smaller than 3'
        Button:
            text: 'click here to increase'
            on_press: root.number += 1
EN

回答 2

Stack Overflow用户

发布于 2016-12-18 04:07:46

KV lang只有一个有限的功能,所以如果你想要更多的控制,你应该把你的逻辑放在Python代码中。例如,您可以将布局移动到单独的小部件中,然后使用add_widget()remove_widget()从Python代码中动态选择合适的布局。

代码语言:javascript
复制
from kivy.app import App
from kivy.uix.boxlayout import BoxLayout
from kivy.properties import NumericProperty
from kivy.lang import Builder

Builder.load_string('''
<SubWidget1>:
    Label:
        text: 'number is bigger than 3'
    Button:
        text: 'click here to decrease'
        on_press: root.parent.number -= 1

<SubWidget2>:
    Label:
        text: 'number is smaller than 3'
    Button:
        text: 'click here to increase'
        on_press: root.parent.number += 1

<MyWidget>
    number: 0
''')

class SubWidget1(BoxLayout):
    pass

class SubWidget2(BoxLayout):
    pass

class MyWidget(BoxLayout):
    number = NumericProperty()

    def __init__(self, *args):
        super(MyWidget, self).__init__(*args)
        self.widget = None
        self._create_widget()

    def _create_widget(self):
        print(self.number)
        if self.widget is not None:
            self.remove_widget(self.widget)
        if self.number > 3:
            self.widget = SubWidget1()
        else:
            self.widget = SubWidget2()
        self.add_widget(self.widget)

    def on_number(self, obj, value):
        self._create_widget()

class MyApp(App):
    def build(self):
        return MyWidget()

if __name__ == '__main__':
    MyApp().run()
票数 2
EN

Stack Overflow用户

发布于 2016-12-18 04:03:18

我会选择ScreenManager或Carousel,一个简单的例子可能是:

代码语言:javascript
复制
Carousel: 
    index: 1# or a "certain property" :)
    scroll_timeout: 0.0 # disable the user ability to mess with the widgets layout 
    BoxLayout: #first option
        Label:
        Button:
    BoxLayout: #2nd option
        Button:
        Label:

如果您将索引绑定到您选择的属性,它将自动切换布局:)...

基于ScreenManager的方法将非常类似,主要的变化只是绑定current_screen属性,而不是索引

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41201276

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档