Python Kivy:如何识别RST文档上的文本行
我正在尝试用Kivy构建自己的富文本编辑器,因为它还不存在。我现在的方法是将标记的文本存储在文本输入框中,并将呈现的文本显示在RST文档中。我有一个绑定,这样每当文本更改时,RST文档都会更新。链接到图像: 现在,我在将RST文档上的单击转换为文本编辑器上相应的光标位置时遇到问题。我的x轴标识工作正常,但y轴不正常。对于我为示例RST文档单击的任何一行,我的光标始终位于最后一行。代码如下所示Python Kivy:如何识别RST文档上的文本行,python,dynamic,kivy,markup,kivy-language,Python,Dynamic,Kivy,Markup,Kivy Language,我正在尝试用Kivy构建自己的富文本编辑器,因为它还不存在。我现在的方法是将标记的文本存储在文本输入框中,并将呈现的文本显示在RST文档中。我有一个绑定,这样每当文本更改时,RST文档都会更新。链接到图像: 现在,我在将RST文档上的单击转换为文本编辑器上相应的光标位置时遇到问题。我的x轴标识工作正常,但y轴不正常。对于我为示例RST文档单击的任何一行,我的光标始终位于最后一行。代码如下所示 class Rendered(RstDocument): def __init__(self,
class Rendered(RstDocument):
def __init__(self, text="", **kwargs):
super(Rendered, self).__init__(**kwargs)
self.text = text
class TextArea(TextInput):
def __init__(self, **kwargs):
super(TextArea, self).__init__(**kwargs)
self.text = "Filler text"
class Editor(BoxLayout):
def __init__(self, **kwargs):
super(Editor, self).__init__(**kwargs)
self.txt = TextArea()
self.rst = Rendered(self.txt.text)
self.txt.bind(text=self.updateRST)
self.orientation = "vertical"
self.add_widget(self.txt)
self.add_widget(self.rst)
self.rst.render()
def focusInput(self, *args):
self.txt.focus = True
def updateRST(self, *args):
self.rst.text = self.txt.text
def on_touch_down(self, touch):
if self.rst.collide_point(*touch.pos):
#Get mouse click
coord = self.rst.to_window(*touch.pos)
#Get new cursor position using mouse click
newCoord = self.txt.get_cursor_from_xy(coord[0]-5.4,coord[1])
#Set new cursor position
self.txt.cursor = (newCoord[0],newCoord[1])
我正在使用to_window()
函数获取单击位置,因为它最接近预期位置。我使用常数5.4
来优化x轴位置。但是newCoord
[1]总是返回textinput
的最后一行。部分问题是坐标系从左下角开始。当单击前几行时,我的y值总是非常大,这就是为什么我认为会发生这种行为,但是如果我使用to_local
而不是to_window
,即使y坐标值从文本旁边的零开始,返回的行值仍然是最大值。如何解决这个问题
如果您对我如何制作富文本编辑器(即使用不同的技术关联光标位置)有任何建议,我很乐意听到!现在,如果没有标记,我可以识别正确的x轴位置。如果有的话,我可以为每个标记符号增加光标的位置,但是对于更复杂的标记(如项目符号),这种方法可能不太管用
编辑
我意识到,由于文本输入存储在顶部,因此它的y坐标远大于RST文档的y坐标。如果我将RST文档放置在TextInput旁边,y坐标标识可以很好地工作,但x坐标则不行。理想情况下,我可以隐藏TextInput并将RST文档放在上面,但我不知道如何做到这一点。我能想到的唯一方法是不使用
add_widget(TextInput)
,但是两个坐标都不匹配(不管我是否使用to_window
,to_widget
,等等)。嗨,我正在寻找一个kivy嵌入式rst编辑器,你已经有了解决方案吗?我注意到你发现有人在研究这个话题:我这边仍然没有解决方案。请回复Reddit的帖子,也许其他人会有更新。