New Demo Program - Multiline Element clipboard operations using a right click menu

This commit is contained in:
PySimpleGUI 2021-06-06 10:24:08 -04:00
parent b8111190d4
commit f2f0ea99a7
1 changed files with 62 additions and 0 deletions

View File

@ -0,0 +1,62 @@
import PySimpleGUI as sg
"""
Demo - Adding a right click menu to perform multiline element common operations
Sometimes Multiline Elements can benefit from a right click menu. There are no default menu
that come with tkinter, so you'll need to create your own.
Some common clipboard types of operations
Select all
Copy
Paste
Cut
The underlying Widget is accessed several times in this code because setting selections,
getting their values, and clipboard operations are not currently exposed in the APIs
NOTE - With tkinter, if you use the built-in clipboard, you must keep your program
running in order to access the clipboard. Upon exit, your clipboard will be deleted.
You can get around this by using other clipboard packages.
Copyright 2021 PySimpleGUI
"""
right_click_menu = ['', ['Copy', 'Paste', 'Select All', 'Cut']]
MLINE_KEY = '-MLINE-'
layout = [ [sg.Text('Using a custom right click menu with Multiline Element')],
[sg.Multiline(size=(60,20), key=MLINE_KEY, right_click_menu=right_click_menu)],
[sg.B('Go'), sg.B('Exit')]]
window = sg.Window('Right Click Menu Multiline', layout)
mline:sg.Multiline = window[MLINE_KEY]
while True:
event, values = window.read() # type: (str, dict)
print(event, values)
if event in (sg.WIN_CLOSED, 'Exit'):
break
if event == 'Select All':
mline.Widget.selection_clear()
mline.Widget.tag_add('sel', '1.0', 'end')
elif event == 'Copy':
try:
text = mline.Widget.selection_get()
window.TKroot.clipboard_clear()
window.TKroot.clipboard_append(text)
except:
print('Nothing selected')
elif event == 'Paste':
mline.Widget.insert(sg.tk.INSERT, window.TKroot.clipboard_get())
elif event == 'Cut':
try:
text = mline.Widget.selection_get()
window.TKroot.clipboard_clear()
window.TKroot.clipboard_append(text)
mline.update('')
except:
print('Nothing selected')
window.close()