这是我的简单RSTDocument编辑器的代码。
我试图使用弹出窗口中的滑块更改RSTdocument的基本字体大小。我怎样才能做到这一点 ??我尝试使用slider_id.value
,但它没有用。
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
Builder.load_string('''
<RST_GUI>:
padding: 5
spacing: 2
orientation: 'vertical'
BoxLayout:
size_hint: (.5, .1)
pos_hint: {'center_x': .5, 'center_y': 0.5}
Button:
text: 'Font Size'
on_press: root.font_size()
BoxLayout:
TextInput:
id: textinput
tab_width: 5
Splitter:
sizeable_from: 'right'
min_size: '5'
RstDocument:
show_errors: True
base_font_size: #slider_id.value or something possible?
text: textinput.text
<font_size>:
size_hint: (.5, .3)
pos_hint: {'center_x': .5, 'center_y': 0.5}
title: " Font size: " + str(slider_id.value)
Slider:
min: 20
max: 50
value:31
step: 1
id: slider_id
''')
class RST_GUI(BoxLayout):
def font_size(self):
font_size().open()
class font_size(Popup):
pass
class RST(App):
def build(self):
return RST_GUI()
if __name__ == '__main__':
RST().run()
答案 0 :(得分:0)
id的范围受限于声明的规则,因此,您无法执行base_font_size: slider_id.value
。有几种方法可以执行您想要的操作,一种可能是在RST_GUI
类中创建一个属性,该属性是弹出窗口的一个实例,并使用NumericProperty
来设置字体大小:
from kivy.app import App
from kivy.lang import Builder
from kivy.uix.boxlayout import BoxLayout
from kivy.uix.popup import Popup
from kivy.properties import NumericProperty
Builder.load_string('''
<RST_GUI>:
font_size: 31
padding: 5
spacing: 2
orientation: 'vertical'
BoxLayout:
size_hint: (.5, .1)
pos_hint: {'center_x': .5, 'center_y': 0.5}
Button:
text: 'Font Size'
on_press: root.open_font_popup()
BoxLayout:
TextInput:
id: textinput
tab_width: 5
Splitter:
sizeable_from: 'right'
min_size: '5'
RstDocument:
show_errors: True
base_font_size: root.font_size
text: textinput.text
<FontSizePopup>:
font_size: slider_id.value
size_hint: (.5, .3)
pos_hint: {'center_x': .5, 'center_y': 0.5}
title: " Font size: " + str(slider_id.value)
Slider:
min: 20
max: 50
value:31
step: 1
id: slider_id
''')
class RST_GUI(BoxLayout):
font_size = NumericProperty()
def __init__(self, **kwargs):
super(RST_GUI, self).__init__(**kwargs)
self.font_popup = FontSizePopup()
self.font_popup.bind(font_size=self.change_font_size)
def open_font_popup(self):
self.font_popup.open()
def change_font_size(self, instance, value):
self.font_size = value
class FontSizePopup(Popup):
pass
class RST(App):
def build(self):
return RST_GUI()
if __name__ == '__main__':
RST().run()