为什么我的Python PySimpleGUI窗口不能右键单击,所以我可以从剪贴板粘贴?

2024-04-27 04:22:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用右键单击菜单将数据粘贴到窗口,但该选项根本不存在

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

Tags: keytextnameidfacebookfbemailphone
1条回答
网友
1楼 · 发布于 2024-04-27 04:22:26

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()

这就是它在使用中的样子。。。。 enter image description here

相关问题 更多 >