python - 如何通过单击按钮更改另一个按钮(按钮)的文本在 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()
解决方案
逻辑是创建一个字典,其中包含作为键的语言标识符和作为值的要翻译的文本。然后将每个按钮与语言标识符相关联。
一个简单的例子如下:
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()
推荐阅读
- excel - VBA 根据单元格值自动执行 Power Query
- java - 如何在属性上添加标称值?
- java - 使用构造函数表达式直接创建 DTO
- python - 在不同的 conda 环境中调用另一个 python 脚本(使用子进程)
- python - Google Drive API:检查文件夹是否存在
- python - 为什么 Django 2.2.1 不调用 get_absolute_url()
- excel - 错误 91 对象变量或未设置块变量
- javascript - 交互后如何获取iframe的刷新src
- node.js - 如何修复来自节点端 socket.io 的双重响应?
- reactjs - 如何避免使用 ref 渲染加载器