Home

Awesome

hPyT - Hack Python Titlebar

A package to manipulate windows and titlebar of GUI applications made using python Supports Both Windows 11 and 10

https://github.com/Zingzy/hPyT/assets/90309290/f86df1c7-b75b-4477-974a-eb34cc117df3

You can download the above app from the github releases to test out the package before installing/using it in your projects

<br> <details> <summary>📖 Table of Contents</summary> </details>

📚 Supported Libraries

📦 Installing

pip install hPyT==1.3.6

📥 Importing

from hPyT import *
from customtkinter import * # you can use any other library from the above mentioned list

window = CTk() # creating a window using CustomTkinter

Hide/Unhide Title Bar

title_bar.hide(window) # hides full titlebar
# title_bar.unhide(window)

image

🌈 Rainbow TitleBar

rainbow_title_bar.start(window, interval=5) # starts the rainbow titlebar
# rainbow_title_bar.stop(window) # stops the rainbow titlebar

[!NOTE] interval is the time in milliseconds in which the color would change

Rainbow TitleBar

🌈 Rainbow Border

rainbow_border.start(window, interval=4) # starts the rainbow border
# rainbow_border.stop(window) # stops the rainbow border

Rainbow Border

🔄 Synchronizing the Rainbow Effect with other elements

from hPyT import *

...

rainbow_title_bar.start(window, interval=30) # starts the rainbow titlebar
# rainbow_border.start(window, interval=30) # also works with rainbow border

current_color = rainbow_title_bar.get_current_color() # or rainbow_border.get_current_color()
# you can use this color to synchronize the color of other elements with the titlebar

synchronization example

Code for the above illustration available in /examples/rainbow-synchronization-example.py

Hide/Unhide both Maximize and Minimize Buttons (Completely Hides both buttons)

maximize_minimize_button.hide(window) # hides both maximize and minimize button
# maximize_minimize_button.unhide(window)

Hidden Maximize and Minimize Buttons

Hide/Unhide All Buttons or Stuffs

all_stuffs.hide(window) # hides close button
# all_stuffs.unhide(window)

Hide Everything

Tip: to hide the text set the window title to ''

Enable/Disable Maximize Button

maximize_button.disable(window) # hides maximize button
# MaximizeButton.enable(window)

Disabled Maximize Button

Enable/Disable Minimize Button

minimize_button.disable(window) # hides minimize button
# MinimizeButton.enable(window)

Disabled Minimize Button

Opacity

opacity.set(window, 0.5) # sets the window opacity to 50%
# opacity.set(window, 1) # resets the window opacity to 100%

Opacity 0.5 preview

⚡ Flashing Window

window_flash.flash(window, 10, 100) # flashes the window 10 times with 100ms interval
# window_flash.stop(window) # stops the flashing immediately

Flashing Interval starts from 10ms, default 1000ms

Flashing Window

🎨 Custom TitleBar Color

title_bar_color.set(window, '#ff00ff') # sets the titlebar color to magenta
# title_bar_color.reset(window) # resets the titlebar color to default

[!NOTE] You can pass any valid color in Hex or RGB format

Custom TitleBar Color

Set TitleBar Color to windows Accent Color

title_bar_color.set_accent(window) # sets the titlebar color to the current windows accent color

Accent TitleBar

[!NOTE] The titlebar color will automatically change when the windows accent color changes

🖌️ Custom TitleBar Text Color

title_text_color.set(window, '#ff00ff') # sets the titlebar text color to magenta
# title_text_color.reset(window) # resets the titlebar text color to default

Custom TitleBar Text Color

🖌️ Custom Border Color

border_color.set(window, '#ff00ff') # sets the border color to magenta
# border_color.reset(window) # resets the border color to default

Custom Border Color

Set Border Color to windows Accent Color

border_color.set_accent(window) # sets the border color to the current windows accent color

Accent Border

[!NOTE] The border color will automatically change when the windows accent color changes

💻 Window Management

Center a window on the screen

window_frame.center(window)

Center a secondary window relative to the primary window

window_frame.center_relative(window, child_window)

Center Relative

Example Usecase

window = CTk()
window.title("Primary Window")
window.geometry('600x300')
window_frame.center(window)

child_window = CTkToplevel()

window_frame.center_relative(window, child_window)

window.bind("<Configure>", lambda event: window_frame.center_relative(window, child_window))

def on_close():  # this is required to stop the window from centering the child window after the parent window is closed
	window.unbind("<Configure>")
	child_window.destroy()

child_window.protocol("WM_DELETE_WINDOW", on_close)

window.mainloop()

Center Relative Example

Other basic window management functions

window_frame.move(window, 100, 100) # moves the window to (100, 100)
window_frame.resize(window, 500, 500) # resizes the window to 500x500
window_frame.maximize(window) # maximizes the window
window_frame.minimize(window) # minimizes the window
window_frame.restore(window) # restores the window

✨ Window Animations

Circle Motion

window_animation.circle_motion(window, count=5, interval=5, radius=30)
# moves the window in a circular motion 5 times with 5ms interval and 30px radius

Circle Motion

The animation might appear a bit fasterer and rougher in the above preview gif than it is

Verical Shake

window_animation.vertical_shake(window, count=5, interval=5, amplitude=20)
# shakes the window vertically 5 times with 5ms interval and 10px distance

Horizontal Shake

window_animation.horizontal_shake(window, count=5, interval=5, amplitude=20)
# shakes the window horizontally 5 times with 5ms interval and 10px distance

✏️ Stylize text

title_text.stylize(window, style=1)

Below is a gif demonstrating all of the available styles

Stylize Text

Miscellaneous

Get Windows Accent Color

print(get_accent_color()) # prints the current windows accent color
>>> '#1b595a'

Stylize text

print(stylize_text("Your Custom Text", style=1)) # stylizes your text
# all of the styles shown on the above gif are available
>>> "𝔜𝔬𝔲𝔯 ℭ𝔲𝔰𝔱𝔬𝔪 𝔗𝔢𝔵𝔱"

Workaround for other libraries

This menthod is applicable for any other UI library like <kbd>pygame</kbd> <kbd>pySimpleGUI</kbd>, etc. which are not mentioned in the supported libraries list. You just need to pass the hwnd of the window to the functions as demonstrated below.

from hPyT import *
import ctypes

hwnd = ctypes.windll.user32.GetActiveWindow()
rainbow_border.start(hwnd)
<br>

📜 hPyT Changelog

v1.3.6

v1.3.5

v1.3.4

v1.3.3

v1.3.2

v1.3.1

v1.3.0

v1.2.1

v1.2.0

v1.1.3

v1.1.2

v1.1.1

v1.1.0

<br>

PyPI Python Downloads Stars Contributors Last Commit


<h6 align="center"> © zingzy . 2024

All Rights Reserved</h6>

<p align="center"> <a href="https://github.com/zingzy/hPyT/blob/master/LICENSE"><img src="https://img.shields.io/static/v1.svg?style=for-the-badge&label=License&message=MIT&logoColor=d9e0ee&colorA=363a4f&colorB=b7bdf8"/></a> </p>