Kivy - 为 reStructuredText 创建样式按钮
问题描述
我想在 Kivy 中为 reStructuredText 小部件创建按钮.这些按钮可以做一些基本的事情,比如粗体、下划线或制作标题,这样用户就不必手动输入标记.例如,用户可以选择一些文本然后单击粗体"按钮,然后文本将被 [b]...[/b] 包围.
I would like to create buttons for the reStructuredText widget in Kivy. The buttons would do basic things like bold, underline, or make a heading so the user doesn't have to manually type in the markup. For example, the user could select some text then click the 'bold' button and the text would then be surrounded by [b]...[/b].
我很想展示我尝试过的代码,但老实说,我什至不知道从哪里开始.(或者请让我知道是否有更好的方法可以在 Kivy 中实现基本文本编辑.)我目前正在使用 Kivy 语言通过简单地添加来显示第一个小部件
I would love to show code of what I've tried but I honestly don't even know where to begin. (Or please let me know if there is a better way to implement basic text editing in Kivy.) I'm currently using the Kivy language to display the rst widget by simply adding
RstDocument:
show_errors: True
到 kv 文件(连同保存等按钮).
to the kv file (along with the save, etc... buttons).
解决方案
在您的问题中,我第一次听说 RstDocument
小部件.你让我感兴趣,我想出了一个最小的示例应用程序,这可能是你添加更多内容的一个很好的起点.这是我的python文件
In your question, I heard about the RstDocument
widget for the first time. You got me interested and I came up with a minimal sample app which could be a good starting point for you to add more.
This is my python file
from kivy.app import App
from kivy.base import Builder
from kivy.uix.button import Button
from kivy.uix.boxlayout import BoxLayout
Builder.load_string("""
<root_wgt>:
orientation: 'vertical'
BoxLayout:
size_hint_y:0.2
Button:
text: 'Emphasize'
on_press: root.emphasize()
Button:
text: 'Section Header'
on_press: root.add_section_header()
Button:
text: 'Subection Header'
on_press: root.add_sub_section_header()
BoxLayout:
orientation: 'vertical'
TextInput:
id: textinput
RstDocument:
id: rstdocument
text: textinput.text
""")
class root_wgt(BoxLayout):
def emphasize(self):
text = self.ids.textinput.text
selection = self.ids.textinput.selection_text
begin = self.ids.textinput.selection_from
end = self.ids.textinput.selection_to
new_text = text[:begin] + ' **' + selection + '** ' + text[end:]
self.ids.textinput.text = new_text
self.ids.rstdocument.render()
def add_section_header(self):
self.ids.textinput.insert_text("""
==============""")
def add_sub_section_header(self):
self.ids.textinput.insert_text("""
-----------------""")
class MyApp(App):
def build(self):
return root_wgt()
if __name__ == '__main__':
MyApp().run()
或者,您可以只使用一个标签,该标签也有一些样式选项 https://kivy.org/docs/api-kivy.uix.label.html#markup-text 实现看起来非常相似.
Alternatively, you could just go with a label which also has some styling options https://kivy.org/docs/api-kivy.uix.label.html#markup-text The implementation would look quite similar.
相关文章