python - PySimpleGUI:在多行小部件中设置和获取光标位置?
问题描述
有没有办法在 PySimpleGUI 的多行小部件中获取光标的位置,存储它并将光标再次放回该小部件文本中的定义位置?
下面你会看到我到目前为止写的代码。我的目标是,当在上部窗口中输入“jk”时,光标会下降到输入行(有效)。在那里,用户可以编写命令并完成输入按下(我还没有完成)。
现在的问题是如何使光标在上窗口中跳回到之前的相同位置?!
import PySimpleGUI as sg
layout = [ [sg.Multiline(key = 'editor',
size = (50, 10),
focus = True,
enable_events = True)],
[sg.InputText(key ='command', size = (45, 1), ),], ]
window = sg.Window('editor', layout)
while True:
event, values = window.read()
if 'jk' in values['editor']:
# delete jk and jump down in the command line #
window['editor'].update(values['editor'].replace('jk', ''))
window.Element('command').SetFocus(force = True)
if event in ('Close Window', None):
break
window.close()
感谢任何帮助,因为没有关于在 PySimpleGui 中设置或获取光标位置的文档。提前致谢!
解决方案
此处需要 Tkinter 代码
示例代码显示了它是如何工作的,“jk”从“M1”跳转到“M2”,以及从“M2”跳转回“M1”的键。
import PySimpleGUI as sg
sg.theme("DarkBlue")
sg.set_options(font=('Courier New', 16))
layout = [
[sg.Multiline('', size=(40, 5), enable_events=True, key='M1')],
[sg.Multiline('', size=(40, 5), key='M2')],
]
window = sg.Window("Title", layout, finalize=True)
m1, m2 = window["M1"], window['M2']
m2.bind("<Return>", "_Return")
while True:
event, values = window.read()
if event == sg.WINDOW_CLOSED:
break
elif event == "M1" and 'jk' in values["M1"]:
m1.Widget.delete("insert-2c", "insert")
m2.set_focus()
elif event == "M2_Return":
m1.set_focus()
print(event, values)
window.close()
推荐阅读
- php - XML 文件在发送时存储在哪里?
- c++ - C++ 如何实现从类型到类型的编译时映射?
- ruby - Rspec:失败/错误:ActionCable.server.pubsub.redis_connection_for_subscriptions.smembers “在线”
- java - Spring 多个自动装配的单例实例
- javascript - 如何在每个数据上传到服务器时显示进度或加载栏,并在通过时显示成功消息
- ios - 尝试在 Swift iOS 中缩短 url 时,在范围内找不到“linkBuilder”错误
- assembly - 当全局变量名称长于一个制表符空间时,MIPS 缩进
- javascript - 如何使用 React onScroll 触发动画?
- python - 响应状态代码出现问题,表示未定义响应
- git - 无法从 terraform 注册表下载模块