如何使用python更改kivy语言中的标签文本

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/26656164/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-19 00:49:33  来源:igfitidea点击:

How to change text of a label in the kivy language with python

pythonpython-3.xkivy

提问by user2896775

I was wondering how I could change the text of a label made inside the Kivy language using Python. Like how would I have user input from python be made as the text of a label in kivy. (By the way I have the formatting correct in the actual program but I screwed up pasting it to stackoverflow) Say if I wanted to make the text of the label in from the code be a random number generated in python how would I go about doing that?

我想知道如何使用 Python 更改在 Kivy 语言中制作的标签文本。就像我如何将来自 python 的用户输入作为 kivy 中的标签文本。(顺便说一下,我在实际程序中的格式是正确的,但我把它粘贴到 stackoverflow 时搞砸了)说如果我想让代码中的标签文本是一个在 python 中生成的随机数,我该怎么做那?

from kivy.app import App
from kivy.lang import Builder
from kivy.uix.screenmanager import ScreenManager, Screen
from kivy.graphics import Color, Rectangle
from kivy.properties import ObjectProperty

# Create both screens. Please note the root.manager.current: this is how
# you can control the ScreenManager from kv. Each screen has by default a
# property manager that gives you the instance of the ScreenManager used.


Builder.load_string("""
<ButImage@ButtonBehavior+AsyncImage>
<TutImage@ButtonBehavior+AsyncImage>
<MenuScreen>:
GridLayout:
    cols: 4
    row_force_default: True
    col_default_width: 175
    row_default_height: 150
    padding: 15
    spacing: 15
    canvas.before:
        BorderImage:
            # BorderImage behaves like the CSS BorderImage
            border: 10, 10, 10, 10
            source: '/Users/clayhigh/Desktop/kivy/aot.png'
            pos: self.pos
            size: self.size
    Button:
        text: 'Goto settings'
        background_color: 1,0,0,0.5
        on_press: root.manager.current = 'settings'
    ButImage:
        on_press: root.manager.current = 'UBW'
        id: but
        size_hint: .5, .5
        opacity: 1 if self.state == 'normal' else .5
        allow_stretch: True
        keep_ratio: False
        source: 'http://s3.amazonaws.com/rapgenius/1361742626_beautiful-ocean-beautiful-pictures-27115524-1440-900.jpg'
        Label:
            center: but.center
            text: "UBW"
            color: 0.78,0.145,0.016,2
    ButImage:
        id: lh
        size_hint: .5, .5
        opacity: 1 if self.state == 'normal' else .5
        allow_stretch: True
        keep_ratio: False
        source: 'http://s3.amazonaws.com/rapgenius/1361742626_beautiful-ocean-beautiful-pictures-27115524-1440-900.jpg'
        Label:
            center: lh.center
            text: "LH 2"
            color: 0,0,0,1
    ButImage:
        id: ttl
        size_hint: .5, .5
        opacity: 1 if self.state == 'normal' else .5
        allow_stretch: True
        keep_ratio: False
        source: 'http://s3.amazonaws.com/rapgenius/1361742626_beautiful-ocean-beautiful-pictures-27115524-1440-900.jpg'
        Label:
            center: ttl.center
            text: "TwTl"
            color: 0,0,0,1
    ButImage:
        id: gris
        size_hint: .5, .5
        opacity: 1 if self.state == 'normal' else .5
        allow_stretch: True
        keep_ratio: False
        source: 'http://s3.amazonaws.com/rapgenius/1361742626_beautiful-ocean-beautiful-pictures-27115524-1440-900.jpg'
        Label:
            center: gris.center
            text: "Gris"
            color: 0,0,0,1
    ButImage:
        id: shig
        size_hint: .5, .5
        opacity: 1 if self.state == 'normal' else .5
        allow_stretch: True
        keep_ratio: False
        source: 'http://s3.amazonaws.com/rapgenius/1361742626_beautiful-ocean-beautiful-pictures-27115524-1440-900.jpg'
        Label:
            center: shig.center
            text: "Shig"
            color: 0,0,0,1
    Button:
        text: 'Test3'
        background_color: 1,0,0,0.5
    Button:
        text: 'Test4'
        background_color: 1,0,0,0.5
    Button:
        text: 'Quit'
        background_color: 1,0,0,0.5
        on_press: App.on_stop

<SettingsScreen>:
GridLayout:
    row_force_default: True
    row_default_height: 100
    cols: 2
    canvas.before:
        BorderImage:
            # BorderImage behaves like the CSS BorderImage
            border: 10, 10, 10, 10
            source: '/Users/clayhigh/Desktop/kivy/ato.jpeg'
            pos: self.pos
            size: self.size
    Button:
        text: 'Button'
        color: 0,0,.5
        background_color: 1,0,0,1
    Button:
        text: 'Back to menu'
        background_color: 1,0,0,1
        on_press: root.manager.current = 'menu'
<UBW>:
GridLayout:
    row_force_default: True
    row_default_height: 100
    cols: 2
    canvas.before:
        Color:
            rgb: .5, .5, .5
        Rectangle:
            pos: self.pos
            size: self.size
        Color:
            rgb: 1, 1, 1
        BorderImage:
            # BorderImage behaves like the CSS BorderImage
            border: 10, 10, 10, 10
            source: '/Users/clayhigh/Desktop/kivy/fsn.jpg'
            pos: self.pos
            size: self.size
    Button:
        text: 'Back to menu'
        color: 0,0,.5
        on_press: root.manager.current = 'menu'
        background_color: 1,0,0,1
    Label:
        id: AName
        text: "F S/N: UBW"
        font_size: '24sp'
""")

# Declare both screens


class MenuScreen(Screen):
pass


class SettingsScreen(Screen):
pass


class UBW(Screen):
pass

# Create the screen manager
sm = ScreenManager()
sm.add_widget(MenuScreen(name='menu'))
sm.add_widget(SettingsScreen(name='settings'))
sm.add_widget(UBW(name='UBW'))


class TestApp(App):

def build(self):
    return sm

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

采纳答案by Tatarkow

Text of a label can be a kivy property, which can be later changed and since it is a kivy property it will automatically updated everywhere. Here is an example of your .py

标签的文本可以是一个 kivy 属性,以后可以更改,因为它是一个 kivy 属性,它会在任何地方自动更新。这是您的 .py 的示例

from kivy.app import App
from kivy.uix.widget import Widget
from kivy.properties import StringProperty
import random

class YourWidget(Widget):
    random_number = StringProperty()

    def __init__(self, **kwargs):
        super(YourWidget, self).__init__(**kwargs)
        self.random_number = str(random.randint(1, 100))

    def change_text(self):
        self.random_number = str(random.randint(1, 100))

class YourApp(App):
    def build(self):
        return YourWidget()

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

and your .kv

和你的 .kv

<YourWidget>:
    BoxLayout:
        size: root.size
        Button:
            id: button1
            text: "Change text"
            on_release: root.change_text()
        Label:
            id: label1
            text: root.random_number

When you click the button, it will call change_text()function, which will randomly change the text of the label to random integer between 1 and 100.

当您单击按钮时,它会调用change_text()函数,该函数会将标签的文本随机更改为 1 到 100 之间的随机整数。