为什么我的 Python PySimpleGUI window 不能右键单击,所以我可以从剪贴板粘贴?
Why my Python PySimpleGUI window is not right clickable, so I can paste from my clipboard?
我尝试使用右键单击菜单将数据粘贴到 window,但是这个选项根本不存在。
import PySimpleGUI as sg
layout = [[sg.Text('Name')], # main window
[sg.InputText(key='-NAME-')],
[sg.Text('Phone')],
[sg.InputText(key="-PHONE-")],
[sg.Text('Facebook ID')],
[sg.InputText(key="-ID-")],
[sg.Text('email')],
[sg.InputText(key="-EMAIL-")],
[sg.Cancel(key="-CANCEL-"), sg.Submit(key="-SUBMIT-")]
]
window = sg.Window('Facebook', layout)
while True: # start here
event, values = window.read()
fb_id = values['-ID-']
fb_name = values['-NAME-']
my_phone = values['-PHONE-']
fb_email = values["-EMAIL-"]
if event == "-CANCEL-":
break
多行元素的右键单击菜单不是 tkinter 自动提供的。自动提供控件 A、控件 C 等键盘绑定。
此代码将为您提供一个简单的多行元素右键单击菜单
它还没有被添加到官方演示程序中,但很快就会...
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()
这是它在使用中的样子....
我尝试使用右键单击菜单将数据粘贴到 window,但是这个选项根本不存在。
import PySimpleGUI as sg
layout = [[sg.Text('Name')], # main window
[sg.InputText(key='-NAME-')],
[sg.Text('Phone')],
[sg.InputText(key="-PHONE-")],
[sg.Text('Facebook ID')],
[sg.InputText(key="-ID-")],
[sg.Text('email')],
[sg.InputText(key="-EMAIL-")],
[sg.Cancel(key="-CANCEL-"), sg.Submit(key="-SUBMIT-")]
]
window = sg.Window('Facebook', layout)
while True: # start here
event, values = window.read()
fb_id = values['-ID-']
fb_name = values['-NAME-']
my_phone = values['-PHONE-']
fb_email = values["-EMAIL-"]
if event == "-CANCEL-":
break
多行元素的右键单击菜单不是 tkinter 自动提供的。自动提供控件 A、控件 C 等键盘绑定。
此代码将为您提供一个简单的多行元素右键单击菜单
它还没有被添加到官方演示程序中,但很快就会...
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()
这是它在使用中的样子....