为了更清楚,我希望Switch的文本从On/Off
更改为Open/Close
或Yes/No
。我没有发现如何做到这一点。感谢。
答案 0 :(得分:4)
您可以通过更改开关中右侧矩形的背景图像来解决此问题
您可以制作像小部件一样的83x32像素的图标
我在sumo在线照片上做了一个非常难看的例子:
然后我将其保存为images/icon.jpg
如果你想改变滑块,它的43x32像素。
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.switch import Switch
class MyGui(Widget):
def __init__(self,**kwargs):
super(MyGui,self).__init__(**kwargs)
self.switch = Switch()
self.switch.canvas.children[2].source = "images/icon.jpg" # The slider is the last element, so in that case -> children[-1].source
self.add_widget(self.switch)
class MyApp(App):
def build(self):
return MyGui()
if __name__ == '__main__':
MyApp().run()
如果你想用kv语言这样做,你可以这样做:
from kivy.lang import Builder
Builder.load_string("""
<MyGui>:
Switch:
canvas:
Color:
rgb: 1,1,1
Rectangle:
source: 'switch.jpg' # make or download your background jpg
size: sp(83), sp(32)
pos: int(self.center_x - sp(41)), int(self.center_y - sp(16))
Rectangle:
source: 'switch_slider.jpg' # make or download your slider jpg
size: sp(43), sp(32)
pos: int(self.center_x - sp(41) + self.active_norm_pos * sp(41)), int(self.center_y - sp(16))
""")
class MyGui(Widget):
pass
答案 1 :(得分:1)
切换文字遗憾的不是文字而是图像。你可以找到kv文件here。您应该能够提供不同的主题(请参阅here),或者您可以覆盖该类并实现您自己的渲染(然后显示OPEN / CLOSE)而不是ON / OFF。
答案 2 :(得分:1)
如果您不打算改变其整体外观,可以patch the style.kv
并使用一些画布说明来创建您喜欢的小部件。 ^。^
(并且它比为每个不同的开关创建图像更灵活,如果你不想改变它的颜色)
from kivy.lang import Builder
from kivy.base import runTouchApp
from kivy.uix.boxlayout import BoxLayout
Builder.load_string('''
<Custom@Switch>:
values: ['OFF', 'ON']
canvas:
Color:
rgb: 0.2, 0.709, 0.898, 1
Rectangle:
size: [sp(41.5), sp(20)]
pos: [self.center_x - sp(41.5), self.center_y - sp(10)]
Color:
rgb: 0.4, 0.4, 0.4, 1
Rectangle:
size: [sp(41.5), sp(20)]
pos: [self.center_x, self.center_y - sp(10)]
Label:
text: '[b]{}[/b]'.format(root.values[0])
markup: True
font_size: 13
pos: [root.center_x - sp(70), root.center_y - sp(50)]
Label:
color: 0.75, 0.75, 0.75, 1
text: '[b]{}[/b]'.format(root.values[1])
markup: True
font_size: 13
pos: [root.center_x - sp(30), root.center_y - sp(50)]
<Test>:
Custom:
Switch:
Custom:
values: ['Yes', 'No']
''')
class Test(BoxLayout): pass
runTouchApp(Test())
答案 3 :(得分:0)
如果您使用@ el3in的解决方案,请确保澄清$ foo () { declare -g x; x=3; echo "$x"; }
$ x=2
$ foo
3
$ echo "$x"
3
而不是canvas.after
,否则原始开关图像将停留在顶部;)