如何使用Python kivy在启动时确定微调器值

如何使用Python kivy在启动时确定微调器值,python,kivy,kivy-language,Python,Kivy,Kivy Language,我正在用Python kivy制作GUI。 我想在启动时在GUI上显示一个随机值 我认为应该在uu init uu函数中完成,并尝试了以下代码 test.py import random from kivy.config import Config from kivy.app import App from kivy.uix.widget import Widget Config.set('graphics', 'width', 300) Config.set('graphics', 'hei

我正在用Python kivy制作GUI。 我想在启动时在GUI上显示一个随机值

我认为应该在uu init uu函数中完成,并尝试了以下代码

test.py

import random
from kivy.config import Config
from kivy.app import App
from kivy.uix.widget import Widget

Config.set('graphics', 'width', 300)
Config.set('graphics', 'height', 300)
Config.set('graphics', 'resizable', False)

class TestWidget(Widget):
    def __init__(self, **kwargs):
        super(TestWidget, self).__init__(**kwargs)
        first = random.random()
        second = random.random()
        third = random.random()
        self.ids.spinner_test.values = [str(first),str(second),str(third)]

class TestApp(App):
    def __init__(self, **kwargs):
        super(TestApp, self).__init__(**kwargs)
        self.title = 'random value'

    def build(self):
        return TestWidget()

if __name__ == '__main__':
    TestApp().run()
测试.kv

TestWidget:

<TestWidget>:
    BoxLayout:
        size:root.size
        orientation: 'vertical'

        Spinner:
            id:spinner_test
            text: ""
            values: []

        Label:
            text: ""

        Label:
            text: ""

        Label:
            text: ""

问题是TestWidget构造函数在.kv之前使用,因此id“spinner\u test”在当时不存在

鉴于此,一个可能的解决方案是在显示GUI后立即进行更改:

# ...
from kivy.clock import Clock
# ...

class TestWidget(Widget):
    def __init__(self, **kwargs):
        super(TestWidget, self).__init__(**kwargs)
        Clock.schedule_once(self.update)

    def update(self, *args):
        first = random.random()
        second = random.random()
        third = random.random()
        self.ids.spinner_test.values = [str(first), str(second), str(third)]

# ...
#。。。
从kivy.clock导入时钟
# ...
类TestWidget(小部件):
定义初始(自我,**kwargs):
超级(TestWidget,self)。\uuuuuu初始化(**kwargs)
时钟。计划_一次(自我更新)
def更新(自我,*参数):
first=random.random()
第二个=random.random()
第三个=random.random()
self.ids.spinner\u test.values=[str(第一)、str(第二)、str(第三)]
#…
另一个选项是创建一个设置值的ListProperty,然后使用微调器的“values”属性进行绑定:

TestWidget:

<TestWidget>:
    BoxLayout:
        size:root.size
        orientation: 'vertical'

        Spinner:
            id:spinner_test
            text: ""
            values: root.values # <---

        Label:
            text: ""

        Label:
            text: ""

        Label:
            text: ""
TestWidget:
:
盒子布局:
大小:root.size
方向:“垂直”
微调器:
id:spinner_测试
案文:“”

values:root.values#问题是TestWidget构造函数在.kv之前使用,因此id“spinner_test”当时不存在

鉴于此,一个可能的解决方案是在显示GUI后立即进行更改:

# ...
from kivy.clock import Clock
# ...

class TestWidget(Widget):
    def __init__(self, **kwargs):
        super(TestWidget, self).__init__(**kwargs)
        Clock.schedule_once(self.update)

    def update(self, *args):
        first = random.random()
        second = random.random()
        third = random.random()
        self.ids.spinner_test.values = [str(first), str(second), str(third)]

# ...
#。。。
从kivy.clock导入时钟
# ...
类TestWidget(小部件):
定义初始(自我,**kwargs):
超级(TestWidget,self)。\uuuuuu初始化(**kwargs)
时钟。计划_一次(自我更新)
def更新(自我,*参数):
first=random.random()
第二个=random.random()
第三个=random.random()
self.ids.spinner\u test.values=[str(第一)、str(第二)、str(第三)]
#…
另一个选项是创建一个设置值的ListProperty,然后使用微调器的“values”属性进行绑定:

TestWidget:

<TestWidget>:
    BoxLayout:
        size:root.size
        orientation: 'vertical'

        Spinner:
            id:spinner_test
            text: ""
            values: root.values # <---

        Label:
            text: ""

        Label:
            text: ""

        Label:
            text: ""
TestWidget:
:
盒子布局:
大小:root.size
方向:“垂直”
微调器:
id:spinner_测试
案文:“”
值:root.values#