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

Uploaded Python 3

File details

Details for the file GUISpices-1.2.0-py3-none-any.whl.

File metadata

  • Download URL: GUISpices-1.2.0-py3-none-any.whl
  • Upload date:
  • Size: 8.8 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/2.0.0 pkginfo/1.5.0.1 requests/2.22.0 setuptools/41.0.1 requests-toolbelt/0.9.1 tqdm/4.32.2 CPython/3.7.1

File hashes

Hashes for GUISpices-1.2.0-py3-none-any.whl
Algorithm Hash digest
SHA256 a9d4d998ca7177da96a69e03cd54028442d005dc11d03a4bb9171583c027f216
MD5 c467547881e94705138da38f1f1001cd
BLAKE2b-256 0719651f548dc7276afd9785574d86df08ba7185a3e88fa6c7d236a4a9899601

See more details on using hashes here.

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