New Demo Program - Multiline Element clipboard operations using a right click menu
This commit is contained in:
parent
b8111190d4
commit
f2f0ea99a7
|
@ -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()
|
Loading…
Reference in New Issue