如何在Python/PySimpleGUI的Entry组件中添加复制/粘贴菜单?
给PySimpleGUI的InputText组件添加右键复制/粘贴菜单
要给InputText输入框添加右键复制/粘贴菜单,你可以借助PySimpleGUI的右键菜单功能,结合自带的剪贴板操作方法来实现。下面是修改后的完整代码,包含复制、粘贴、全选这些常用功能:
import PySimpleGUI as sg # 定义右键菜单选项 right_click_menu = ['', ['复制', '粘贴', '全选', '---', '退出']] layout = [ [sg.Text('UserName:', size=(15,1)), sg.InputText(default_text='', key='USERNAME', size=(15,1), right_click_menu=right_click_menu)], [sg.Text('Password:', size=(15,1)), sg.InputText(default_text='', key='PASSWORD', size=(15,1), right_click_menu=right_click_menu)], [sg.Button('Exit', bind_return_key=True)], ] window = sg.Window('Copy/Paste', layout, element_justification='c') while True: event, values = window.read() if event == sg.WIN_CLOSED or event == 'Exit': break # 处理复制事件 elif event == '复制': # 获取当前聚焦的输入框 focused_elem = window.find_element_with_focus() if focused_elem and hasattr(focused_elem, 'get'): text = focused_elem.get() sg.clipboard_set(text) # 处理粘贴事件 elif event == '粘贴': focused_elem = window.find_element_with_focus() if focused_elem and hasattr(focused_elem, 'update'): paste_text = sg.clipboard_get() focused_elem.update(paste_text, append=False) # 替换现有内容,若要追加可设append=True # 处理全选事件 elif event == '全选': focused_elem = window.find_element_with_focus() if hasattr(focused_elem.Widget, 'select_range'): focused_elem.Widget.select_range(0, 'end') window.close()
关键部分说明:
- 右键菜单绑定:通过
right_click_menu参数给每个InputText组件绑定右键菜单,选项里的---是分隔线,优化菜单布局。 - 剪贴板操作:直接使用PySimpleGUI自带的
sg.clipboard_set()和sg.clipboard_get()方法完成剪贴板读写,无需额外依赖。 - 聚焦元素判断:用
window.find_element_with_focus()定位当前右键操作的输入框,确保操作对象准确。 - 全选实现:调用输入框底层tkinter组件的
select_range方法,快速选中所有内容。
内容的提问来源于stack exchange,提问作者PyiPath2022
相关产品推荐
相关产品推荐

