如何在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
相关产品推荐
相关产品推荐

