首页 > 解决方案 > 如何在 Matplotlib TextBox 小部件中设置光标位置?

问题描述

如何强制光标出现在TextBox小部件中文本的末尾?我希望能够创建一个TextBox小部件,使其立即获得焦点并将光标设置为出现在其中的文本末尾。

以下代码...

import matplotlib.pyplot as plt    
from matplotlib.widgets import TextBox

axbox = plt.axes([0.4, 0.5, 0.2, 0.075])

initial_text = "Change me"
text_box = TextBox(axbox, '', initial=initial_text)
text_box.position_cursor(len(initial_text)) # RuntimeError!

plt.show()
#text_box.position_cursor(len(initial_text))

...调用失败position_cursor

RuntimeError: Cannot get window extent w/o renderer

这是因为在调用之前需要绘制(渲染)图形position_cursor吗?

如果我注释掉失败的行并取消注释最后一行,我不会收到运行时错误,但光标不会出现在任何地方,更不用说我想要的文本末尾了。

标签: pythonmatplotlibwidget

解决方案


因此,该position_cursor函数似乎x从图的左侧开始以像素数为单位。对您的用例没有用。

但是,我们可以从该函数中获取几个部分并使用它们。

如果我在 ipython 会话中运行,并使图形交互(plt.ion()在您的模块导入之后),并使用

text_box.cursor_index = len(initial_text)
text_box._rendercursor()

这个对我有用。


推荐阅读