如何在Kivy中单击一个按钮来更改另一个按钮的文本?

2024-10-01 04:46:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Kivy框架创建桌面应用程序

例如,当您单击“英语”按钮时,它会将按钮的文本更改为英语。打个比方,当你们点击名为“Fra”的按钮时,它会变成法语

Example

我试着在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()


Tags: textpostestselfsizechange按钮eng
1条回答
网友
1楼 · 发布于 2024-10-01 04:46:20

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

一个简单的例子如下:

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()

相关问题 更多 >