From c7b8277231374c98acc8ed0e717ec73553132efb Mon Sep 17 00:00:00 2001 From: MikeTheWatchGuy <13696193+MikeTheWatchGuy@users.noreply.github.com> Date: Mon, 21 Jan 2019 10:49:11 -0500 Subject: [PATCH] PySimpleGUIWx/readme.md updated from https://stackedit.io/ --- PySimpleGUIWx/readme.md | 172 +++++++--------------------------------- 1 file changed, 27 insertions(+), 145 deletions(-) diff --git a/PySimpleGUIWx/readme.md b/PySimpleGUIWx/readme.md index 08e48876..23741544 100644 --- a/PySimpleGUIWx/readme.md +++ b/PySimpleGUIWx/readme.md @@ -48,32 +48,46 @@ Why use PySimpleGUI? The WxPython port of PySimpleGUI -## Why? +## Primary PySimpleGUI Documentation -Why use PySimpleGUIWx? +To get instructions on how use PySimpleGUI's APIs, please reference the [main documentation](http://www.PySimpleGUI.org). +This Readme is for information ***specific to*** the WxPython port of PySimpleGUI. -There are a couple of easy reasons to use PySimpleGUIWx over PySimpleGUIQt. One is footprint. PyInstaller EXE for PySimpleGUIWx is 9 MB, on Qt it's 240 MB. Another is cool widgets. WxPython has some nice advanced widgets that will hopefully be offered thought PySimpleGUIWx. -Why use PySimpleGUI? +## Why Use PySimpleGUIWx Over The Other Ports? + +PySimpleGUIWx brings the number of PySimpleGUI ports to 3. + +Why use PySimpleGUIWx over PySimpleGUIQt PySimpleGUI (tkinter version)? + +There are a couple of easy reasons to use PySimpleGUIWx over PySimpleGUIQt. One is footprint. PyInstaller EXE for PySimpleGUIWx is 9 MB, on Qt it's 240 MB. Another is cool widgets. + +WxPython has some nice advanced widgets that will be offered though PySimpleGUIWx, hopefully sooner than later. + +The System Tray feature works well with a feature set identical to PySimpleGUIQt. If you are looking for a System Tray feature, PySimpleGUIWx is recommended over PySimpleGUIQt ; the primary reason being size of the WxPython framework versus the size of Qt. They both give you very similar features. They look and behave in an ***identical*** fashion when using PySimpleGUI. That's the beauty of the PSG SDK, the function calls are the same for all implementations of PySimpleGUI. The source code is highly portable between the GUI frameworks. + +This simple list is another way of looking at the question.... + 1. It's simple and easy to program GUIs 2. You can move between the GUI frameworks tkinter, Qt and WxPython by changing a single line of code, the import statement. -3. Get the same custom layout and access to the same widgets but in a simple, easy to use and understand interface. +3. Get the same custom layout and access to the same widgets but in a simple, easy to use and understand interface. 4. It's fun to program GUIs again - - - ## The Engineering Pre-Release Version 0.7.0 + ## Engineering Pre-Release Version 0.7.0 + [Announcements of Latest Developments](https://github.com/MikeTheWatchGuy/PySimpleGUI/issues/142) + +Having trouble? Visit the [GitHub site ](http://www.PySimpleGUI.com) and log an Issue. -## What's working +## What Works -Remember, these are Engineering Releases. +Remember, these are Engineering Releases. Not all features are complete, but generally speaking those that are marked as completed and working are working quite well. It's not an "Engineering Quality". The completed features are at about a Beta level. -"Complete"-ish and ready to use +### Ready to use -#### Elements: +#### Elements * Text * Input Text @@ -262,138 +276,6 @@ When a menu item has a key and it is chosen, then entire string is returned. If Starting with release 0.4.0, most of the Popup functions work. This means you can do things like show information in a window when there's a choice made in a System Tray menu. Or if your program finds some event it wishes to inform the user about. For example, when new Issues are posted on a GitHub project. - - - -## SystemTray - -This was the first fully functioning feature of PySimpleGUIWx. Previously only the Qt port supported the System Tray. Why use Wx? The footprint is much much smaller. An EXE file created using PyInstaller is 9 MB for PySimpleGUIWx, when using Qt it's 240 MB. - -Now it's possible to "tack on" the System Tray to your PySimpleGUI application. - -If you're unable to upgrade to Qt but want the System Tray feature, then adding PySimpleGUIWx to your project may be the way to go. - -You can mix your System Tray's event loop with your normal Window event loop by adding a timeout to both your Window.Read call and your SystemTray.Read call. - -### Source code compatibility - -PySimpleGUIWx's System Tray feature has been tested against the same PySimpleGUIQt feature. As long as you don't use features that are not yet supported you'll find your source code will run on either PySimpleGUIQt or PySimpleGUIWx by changing the import statement. - - -## System Tray Design Pattern - -Here is a design pattern you can use to get a jump-start. - -This program will create a system tray icon and perform a blocking Read. - -```python -import PySimpleGUIWx as sg - -tray = sg.SystemTray(menu= ['menu',['Open', ['&Save::KEY', '---', 'Issues', '!Disabled'], 'E&xit']], - filename=r'C:\Python\PycharmProjects\GooeyGUI\default_icon.ico') -tray.ShowMessage('My Message', 'The tray icon is up and runnning!') -while True: - event = tray.Read() - print(event) - if event == 'Exit': - break -``` - - -## Menu Definitions - -See the original, full documentation for PySimpleGUI to get an understanding of how menus are defined. - - -## SystemTray Methods - -### Read - Read the context menu or check for events - -```python -def Read(timeout=None) - ''' - Reads the context menu - :param timeout: Optional. Any value other than None indicates a non-blocking read - :return: String representing meny item chosen. None if nothing read. - ''' -``` -The `timeout` parameter specifies how long to wait for an event to take place. If nothing happens within the timeout period, then a "timeout event" is returned. These types of reads make it possible to run asynchronously. To run non-blocked, specify `timeout=0`on the Read call (not yet supported). - -Read returns the menu text, complete with key, for the menu item chosen. If you specified `Open::key` as the menu entry, and the user clicked on `Open`, then you will receive the string `Open::key` upon completion of the Read. - -#### Read special return values - -In addition to Menu Items, the Read call can return several special values. They include: - -EVENT_SYSTEM_TRAY_ICON_DOUBLE_CLICKED - Tray icon was double clicked -EVENT_SYSTEM_TRAY_ICON_ACTIVATED - Tray icon was single clicked -EVENT_SYSTEM_TRAY_MESSAGE_CLICKED - a message balloon was clicked -TIMEOUT_KEY is returned if no events are available if the timeout value is set in the Read call - - -### ShowMessage - -Just like Qt, you can create a pop-up message. Unlike Qt, you cannot set your own custom icon in the message, at least you can't at the moment. - -The preset `messageicon` values are: - - SYSTEM_TRAY_MESSAGE_ICON_INFORMATION - SYSTEM_TRAY_MESSAGE_ICON_WARNING - SYSTEM_TRAY_MESSAGE_ICON_CRITICAL - SYSTEM_TRAY_MESSAGE_ICON_NOICON - -```python -ShowMessage(title, message, filename=None, data=None, data_base64=None, messageicon=None, time=10000): - ''' - Shows a balloon above icon in system tray - :param title: Title shown in balloon - :param message: Message to be displayed - :param filename: Optional icon filename - :param data: Optional in-ram icon - :param data_base64: Optional base64 icon - :param time: How long to display message in milliseconds :return: - ''' -``` - -### Update - -You can update any of these items within a SystemTray object -* Menu definition -* Icon (not working yet) -* Tooltip - - Change them all or just 1. - -```python -Update(menu=None, tooltip=None,filename=None, data=None, data_base64=None,) - ''' - Updates the menu, tooltip or icon - :param menu: menu defintion - :param tooltip: string representing tooltip - :param filename: icon filename - :param data: icon raw image - :param data_base64: icon base 64 image - :return: - ''' -``` -## Menus with Keys - -You can add a key to your menu items. To do so, you add :: and the key value to the end of your menu definition. - -`menu_def = ['File', ['Hide::key', '&Open::key', '&Save',['1', '2', ['a','b']], '&Properties', 'E&xit']]` - -The menu definition adds a key "key" to the menu entries Hide and Open. - -If you want to change the separator characters from :: top something else,change the variable `MENU_KEY_SEPARATOR` - -When a menu item has a key and it is chosen, then entire string is returned. If Hide were selected, then Hide::key would be returned from the Read. Note that the shortcut character & is NOT returned from Reads. - - -## Popups - -Starting with release 0.4.0, most of the Popup functions work. This means you can do things like show information in a window when there's a choice made in a System Tray menu. Or if your program finds some event it wishes to inform the user about. For example, when new Issues are posted on a GitHub project. - - # Release Notes: ### 0.1.0 - 25-Dec-2018 @@ -498,5 +380,5 @@ Starting with release 0.4.0, most of the Popup functions work. This means you c # Acknowledgments \ No newline at end of file