PySimpleGUI:在多行小部件中设置和获取光标位置?

如何解决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('',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()

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?