Skip to main content

A wrapper module for various GUI usages

Project description

Weasel's GUI Spices

This is the one and only GUI module you really need...

Features

  • Helper functions for PyInstaller builds
  • Tray icons with custom sub-menus
  • Windows Messages
  • Qt Creator windows
  • Windows Explorer extensions
  • Borderless and draggable windows
  • Easy custom CSS Styling

Helper functions for PyInstaller

These helper functions provide excellent support for building applications with PyInstaller, fixing some major problems which usually occur at runtime. I highly suggest you to build all windowed and one-file applications with PyInstaller with these functions. This will save you A LOT of debugging time.

One-file build (-F option)

If you build a .exe with the -F option, the whole app gets bundled into a single executable with all resource files included. These are unpacked on execution. But where? Use this function to refer to resource files whenever you plan to use the -w option.

from GUISpices.Utility import resource_path

# opening a "text.txt" in the same directory
f = open(resource_path("text.txt"),"r")
print(f.read())
f.close()

Make sure you attach your resource files upon build via --add-data <src;dst> when running PyInstaller! In this case: pyinstaller -F --add-data "text.txt;text.txt" main.py

Windowed build (-w option)

If you build a .exe with the -w option, the app will execute without a terminal window. We usually want this for GUI-only applications. However, if your app needs to fetch the output of a terminal command, your app either opens up a terminal or gets stuck because it is prohibited to do so. This function will execute your terminal command and return the output as string (based on subprocess.Popen).

from GUISpices.Utility import popen

print(popen("pwd")) # Output -> "C:\Users\User\Desktop"

Code examples

Tray Icons

This example creates a classic icon in the bottom right tray.

from PySide2.QtWidgets import QApplication, QMenu
from GUISpices import TrayIcon
import sys

# create main application (if not present)
app = QApplication([])
app.setQuitOnLastWindowClosed(False)

# configure basic tray actions
tray = TrayIcon(app, "examples/icon.png", "Test Program", click_action=lambda :print("Clicked"))
tray.add_menu_feature("Change Icon", lambda: tray.set_icon("examples/icon2.png"))
tray.add_menu_feature("Show a message from tray", lambda: tray.show_tray_message("Hello", "Hello my friend"))
tray.add_separator()
tray.add_menu_feature("Exit", app.exit)

# Include a custom sub-menu
menu_ = QMenu(title="Sub Menu")
menu_.addAction("Egg sit (sub-action)", lambda: sys.exit(0))
tray.add_menu(menu_)

sys.exit(app.exec_())

Windows Messages

This shows a tray icon and creates a windows tray message with a custom icon and action.

from PySide2.QtWidgets import QApplication, QMenu
from GUISpices import TrayIcon
import sys

# create main application (if not present)
app = QApplication([])
app.setQuitOnLastWindowClosed(False)

# configure basic tray
tray = TrayIcon(app, "examples/icon.png", "Test Program")

# Show message
tray.show_tray_message("Title","This is the message body",
                        icon="examples/icon.png",
                        on_click=lambda:print("Message clicked"))

sys.exit(app.exec_())

Qt Windows

The whole module lets you build all windows and popups with Qt Designer, a powerful and easy-to-use environment for drag & drop GUI building. This creates a .ui file which can be directly loaded to create the desired window with full compatibility.

from PySide2.QtWidgets import QApplication
from GUISpices import UIWindow
import sys

app = QApplication()
main_form = UIWindow('examples/wizard.ui', "examples/icon.png")
main_form.window.show()
sys.exit(app.exec_())

Windows Explorer extensions

This creates a new entry in the explorers context menu. So a right-click in any folder or on the user's desktop will show your custom action, as well. This example creates a custom action "Run CMD", which opens up a terminal.

from GUISpices import ExplorerContextManager
ExplorerContextManager.register_entry("Run CMD", "C:\\Windows\\System32\\cmd.exe", "C:\\Windows\\System32\\cmd.exe")

Borderless and draggable windows

This creates a new entry in the explorers context menu. So a right-click in any folder or on the user's desktop will show your custom action, as well. This example creates a custom action "Run CMD", which opens up a terminal.

from PySide2.QtWidgets import QApplication
from PySide2.QtCore import Qt
import sys
from GUISpices import UIWindow, DragBar

app = QApplication()
main_form = UIWindow('examples/wizard.ui', "examples/icon.png")

# This line makes your window borderless
main_form.window.setWindowFlags(Qt.FramelessWindowHint)

# This adds a special Class to it, making it movable (via drag)
DragBar(main_form.window)

main_form.window.show()
sys.exit(app.exec_())

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distribution

GUISpices-1.2.0-py3-none-any.whl (8.8 kB view hashes)

Uploaded Python 3

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page