Ulr*_*ich 0 python position cursor textfield 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()
Run Code Online (Sandbox Code Playgroud)
任何帮助都是值得赞赏的,因为没有关于在 PySimpleGui 中设置或获取光标位置的文档。提前致谢!
这里需要 Tkinter 代码。
deletetkinter Text 小部件的方法,element.widget删除输入jk。
'insert'是文本小部件中插入光标的位置。'insert-2c'后退2个字符,'insert'标记要删除的区域。delete(index1,index2=None) 删除从index1之后开始的文本。如果省略第二个参数,则仅删除一个字符。如果给出了第二个索引,则删除将继续到但不包括索引2之后的字符。回想一下,索引位于字符之间。
元素的方法set_focus将当前焦点设置在此元素上。
mark_set文本小部件设置插入光标位置的方法。
mark_set(标记,索引)
如果不存在名称为 mark 的标记,则会使用 tk.RIGHT 重力创建一个标记并将其放置在索引点的位置。如果该标记已存在,则将其移动到新位置。此方法可能会更改 tk.INSERT 或 tk.CURRENT 索引的位置。
Text第 24.1 章文本小部件索引显示了指定小部件或元素内容中的位置的 wat Multiline。参考: https: //tkdocs.com/shipman/tkinter.pdf
示例代码显示了它的工作原理,“jk”从“M1”跳转到“M2”,而 key 从“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()
Run Code Online (Sandbox Code Playgroud)