Python Kivy:如何识别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,

我正在尝试用Kivy构建自己的富文本编辑器,因为它还不存在。我现在的方法是将标记的文本存储在文本输入框中,并将呈现的文本显示在RST文档中。我有一个绑定,这样每当文本更改时,RST文档都会更新。链接到图像:

现在,我在将RST文档上的单击转换为文本编辑器上相应的光标位置时遇到问题。我的x轴标识工作正常,但y轴不正常。对于我为示例RST文档单击的任何一行,我的光标始终位于最后一行。代码如下所示

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的帖子,也许其他人会有更新。