首页 > 解决方案 > 如何通过单击按钮更改另一个按钮(按钮)的文本在 Kivy 中制作?

问题描述

我正在研究 Kivy 框架来创建桌面应用程序。

例如,当您单击“Eng”按钮时,它会将按钮的文本更改为英文。以此类推,当您单击名为“Fra”的按钮时,它会变为法语。

例子

当您在 Textinput 中输入一些信息并单击标签上显示的按钮信息后,我尝试对构造进行修饰。我只是用按钮替换了标签,但我仍然不知道如何使它工作。

我的 test.py 文件

class Container(BoxLayout):
    pass
    button_test=ObjectProperty()
    wbutton_eng=ObjectProperty()
    wbutton_fra=ObjectProperty()

    def change_text(self):
        self.buttontest.text
        self.wbutton_fra.text()
        self.wbutton_eng.text()

我的 KV 文件

<Container>:
    BoxLayout:
        canvas:
            Color:
                rgb: 120, 1, 1, 0.9
            Rectangle:
                size: self.size

        orientation:'vertical'

        button_test:buttonone
        wbutton_eng:buttoneng
        wbutton_fra:buttonfra

        Button:
            id:buttonone
            text:'[color=ff3333]Text in French or English[/color]'
            font_size:24
            size_hint:1,0.09
            background_color: 0,0,0.5
            canvas.before:
                Color:
                    rgba: 1, 2, 0.3, .6
                Rectangle:
                    pos: self.pos
                    size: self.size
            markup: True

        Button:
            id:buttoneng
            text:'[color=ff3333]Eng[/color]'
            font_size:24
            size_hint:1,0.09
            background_color: 0,0,0.5
            canvas.before:
                Color:
                    rgba: 1, 2, 0.3, .6
                Rectangle:
                    pos: self.pos
                    size: self.size
            markup: True
                on_press
                    root.change_text()
        Button:
            id:buttonfra
            text:'[color=ff3333]Fra[/color]'
            font_size:24
            size_hint:1,0.09
            background_color: 0,0,0.5
            canvas.before:
                Color:
                    rgba: 1, 2, 0.3, .6
                Rectangle:
                    pos: self.pos
                    size: self.size
            markup: True
                on_press
                    root.change_text()

标签: pythonpython-3.xkivykivy-language

解决方案


逻辑是创建一个字典,其中包含作为键的语言标识符和作为值的要翻译的文本。然后将每个按钮与语言标识符相关联。

一个简单的例子如下:

from kivy.app import App
from kivy.lang.builder import Builder
from kivy.properties import StringProperty
from kivy.uix.boxlayout import BoxLayout


class Container(BoxLayout):
    message = StringProperty()

    def retranslate(self, language):
        texts = {"en": "Hello World", "fr": "Salut monde"}
        self.message = texts.get(language, "")


Builder.load_string(
    """
<Container>:
    orientation: 'vertical'
    Button:
        text: root.message
    Button:
        text: "Eng"
        on_press: root.retranslate("en")
    Button:
        text: "Fra"
        on_press: root.retranslate("fr")
"""
)


class MyApp(App):
    def build(self):
        w = Container()
        w.retranslate("en")
        return w


if __name__ == "__main__":
    MyApp().run()


推荐阅读