You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在PySimpleGUI文本输入框中检测光标位置并插入内容?

PySimpleGUI计算器实现光标位置插入数字

当前计算器点击数字按钮时,数字会追加到输入框末尾,需要改为在光标所在位置插入数字。比如输入框内容为10358,光标在3和5之间时,按下3应变为103358。

以下是修改后的完整代码:

import PySimpleGUI as sg

current_result = ""
past_result = ""

def calc(expression):
    try:
        return eval(expression)
    except:
        return 0

layout = [
    [sg.Input('My Calculator App. Type or use key input', key='-RESULT-')],
    [sg.Text("Your result is stored here", key='-OLDRESULT-')],
    [sg.B("1", key="-1-"), sg.B("2", key='-2-'), sg.B('3', key='-3-')],
    [sg.B("=", key="-EXECUTE-")]
]       

window = sg.Window('Calculator Application', layout)    

while True:
    event, values = window.read()    
    if event == sg.WIN_CLOSED or event == "Exit":
        break
    
    # 处理数字按钮点击
    for i in range(0, 10):
        if event == f"-{i}-":
            # 获取输入框当前内容和光标位置
            current_text = values['-RESULT-']
            cursor_pos = window['-RESULT-'].get_cursor_position()
            # 在光标位置插入数字
            new_text = current_text[:cursor_pos] + str(i) + current_text[cursor_pos:]
            # 更新输入框和current_result
            window['-RESULT-'].update(new_text)
            current_result = new_text
    
    if event == "-EXECUTE-":
        current_result = values['-RESULT-']
        try:
            calc_result = calc(current_result)
            window['-OLDRESULT-'].update(str(calc_result))
        except:
            window['-OLDRESULT-'].update("Invalid Syntax")

window.close()

关键修改说明:

  • 调用window['-RESULT-'].get_cursor_position()获取输入框当前的光标位置
  • 通过字符串切片拼接,实现数字在光标位置的插入
  • 同步更新输入框显示内容和current_result变量,保证数据一致性
  • 优化计算模块的异常处理逻辑,避免正常计算结果为0时误判为语法错误

内容的提问来源于stack exchange,提问作者hourlyray1709

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 19:52:51