Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Question] How to close the right_click_menu without selection of one of the items #6664

Open
1 of 5 tasks
MMwur opened this issue Feb 1, 2024 · 5 comments
Open
1 of 5 tasks
Labels
Platform Specific Issue - Linux Specific to the Linux environment Port - TK PySimpleGUI question Further information is requested

Comments

@MMwur
Copy link

MMwur commented Feb 1, 2024

Type of Issue (Enhancement, Error, Bug, Question)

I wonder how to close the right_click_menu (after it has been opened with a right mouse click), by a left click on another part of the window or screen. Just as is common in Linux or Windows. It turns out that this is not happening when I e.g. run the demo
Demo_Multiline_Right_Click_Menu_Clipboard.py
After appearance of the right_click_menu, it does not close and disappear when e.g. selecting another window. It even stays on top.


Operating System

Ubuntu 22.04.3 LTS

PySimpleGUI Port (tkinter, Qt, Wx, Web)


Versions

*** Version information copied to your clipboard. Paste into your GitHub Issue. ***

Python version: 3.9.16 (main, Jan 11 2023, 16:05:54)
[GCC 11.2.0]
tkinter version: 8.6.12
PySimpleGUI version: 4.60.4

Your Experience In Months or Years (optional)

Years Python programming experience 8

Years Programming experience overall 40

Have used another Python GUI Framework? (tkinter, Qt, etc) (yes/no is fine)

Anything else you think would be helpful?


Troubleshooting

These items may solve your problem. Please check those you've done by changing - [ ] to - [X]

  • [x ] Searched main docs for your problem www.PySimpleGUI.org
  • Looked for Demo Programs that are similar to your goal. It is recommend you use the Demo Browser! Demos.PySimpleGUI.org
  • [x ] None of your GUI code was generated by an AI algorithm like GPT
  • If not tkinter - looked for Demo Programs for specific port
  • For non tkinter - Looked at readme for your specific port if not PySimpleGUI (Qt, WX, Remi)
  • [ x] Run your program outside of your debugger (from a command line)
  • [x ] Searched through Issues (open and closed) to see if already reported Issues.PySimpleGUI.org
  • Have upgraded to the latest release of PySimpleGUI on PyPI (lastest official version)
  • Tried using the PySimpleGUI.py file on GitHub. Your problem may have already been fixed but not released

Detailed Description

Code To Duplicate

A short program that isolates and demonstrates the problem (Do not paste your massive program, but instead 10-20 lines that clearly show the problem)

This pre-formatted code block is all set for you to paste in your bit of code:

# Paste your code here

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-"


def do_clipboard_operation(event, window, element):
    if event == "Select All":
        element.Widget.selection_clear()
        element.Widget.tag_add("sel", "1.0", "end")
    elif event == "Copy":
        try:
            text = element.Widget.selection_get()
            window.TKroot.clipboard_clear()
            window.TKroot.clipboard_append(text)
        except:
            print("Nothing selected")
    elif event == "Paste":
        element.Widget.insert(sg.tk.INSERT, window.TKroot.clipboard_get())
    elif event == "Cut":
        try:
            text = element.Widget.selection_get()
            window.TKroot.clipboard_clear()
            window.TKroot.clipboard_append(text)
            element.update("")
        except:
            print("Nothing selected")


def main():
    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: ", event, " Values: ", values)
        if event in (sg.WIN_CLOSED, "Exit"):
            break

        # if event is a right click menu for the multiline, then handle the event in func
        if event in right_click_menu[1]:
            do_clipboard_operation(event, window, mline)

    window.close()


if __name__ == "__main__":
    main()
#### Screenshot, Sketch, or Drawing

---------------------

### Watcha Makin?

If you care to share something about your project, it would be awesome to hear what you're building.
A gui interface for plotting graphs
@pysimpleissue pysimpleissue bot closed this as completed Feb 1, 2024
@pysimpleissue pysimpleissue bot added Fill issue form or you will be REJECTED You MUST use the supplied template to submit a request. PySimpleGUI Issues Bot Has Detected an Error labels Feb 1, 2024
@MMwur MMwur changed the title [ Enhancement/Bug/Question] How to close the right_click_menu without selection of one of the items [Question] How to close the right_click_menu without selection of one of the items Feb 1, 2024
@pysimpleissue pysimpleissue bot removed Fill issue form or you will be REJECTED You MUST use the supplied template to submit a request. PySimpleGUI Issues Bot Has Detected an Error labels Feb 1, 2024
@pysimpleissue pysimpleissue bot reopened this Feb 1, 2024
Repository owner deleted a comment from pysimpleissue bot Feb 2, 2024
@jason990420
Copy link
Collaborator

It work fine on my WIN10, but failed on Trinket.

Not sure how about it work on Ubuntu 22.04.3 LTS.

@MMwur
Copy link
Author

MMwur commented Feb 2, 2024

Thanks. I did not test it on Win10. On Ubuntu it does not work as you can see in the attached pdf. (the right-click-menu is in front of vscode, which is in front of the demo
rightclickmenu.pdf

@PySimpleGUI
Copy link
Owner

PySimpleGUI commented Feb 2, 2024

I was able to click on an unused portion of the menu on Trinket and get it to close. Perhaps make an empty, disabled item that you can click on?

Or you can click on any item, move the mouse off the menu entirely so nothing is selected, then release the mouse.

I get that these are not good for end-users, but for your own testing/use it can get you a little further.

@MMwur
Copy link
Author

MMwur commented Feb 2, 2024

Yes, thanks, that works fine for testing, e.g. by adding an empty item or an 'exit'. But, as you already mentioned, it is counter intuitive for an end user.

@PySimpleGUI
Copy link
Owner

Yes, thanks, that works fine for testing

Awesome... thanks for the update. I'm glad you're able to make progress. I just wanted to give you, as the programmer, a way to use your code in the intended way even though it's got a really weird step involved.

I don't recall this being a problem in the past. Thank you for opening an issue and doing a good job of explaining it.

@PySimpleGUI PySimpleGUI added question Further information is requested Port - TK PySimpleGUI Platform Specific Issue - Linux Specific to the Linux environment labels Feb 3, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Platform Specific Issue - Linux Specific to the Linux environment Port - TK PySimpleGUI question Further information is requested
Projects
None yet
Development

No branches or pull requests

3 participants