A package to manipulate windows and titlebar of GUI applications made using python Supports Both Windows 11 and 10
MIT License
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
pip install hPyT==1.3.4
from hPyT import *
from customtkinter import * # you can use any other library from the above mentioned list
window = CTk() # creating a window using CustomTkinter
title_bar.hide(window) # hides full titlebar
# title_bar.unhide(window)
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_border.start(window, interval=4) # starts the rainbow border
# rainbow_border.stop(window) # stops the rainbow border
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
Code for the above illustration available in /examples/rainbow-synchronization-example.py
maximize_minimize_button.hide(window) # hides both maximize and minimize button
# maximize_minimize_button.unhide(window)
all_stuffs.hide(window) # hides close button
# all_stuffs.unhide(window)
Tip: to hide the text set the window title to ''
maximize_button.disable(window) # hides maximize button
# MaximizeButton.enable(window)
minimize_button.disable(window) # hides minimize button
# MinimizeButton.enable(window)
opacity.set(window, 0.5) # sets the window opacity to 50%
# opacity.set(window, 1) # resets the window opacity to 100%
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
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
orRGB
format
title_bar_color.set_accent(window) # sets the titlebar color to the current windows accent 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
border_color.set(window, '#ff00ff') # sets the border color to magenta
# border_color.reset(window) # resets the border color to default
border_color.set_accent(window) # sets the border color to the current windows accent color
window_frame.center(window)
window_frame.center_relative(window, child_window)
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()
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_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
The animation might appear a bit fasterer and rougher in the above preview gif than it is
window_animation.vertical_shake(window, count=5, interval=5, amplitude=20)
# shakes the window vertically 5 times with 5ms interval and 10px distance
window_animation.horizontal_shake(window, count=5, interval=5, amplitude=20)
# shakes the window horizontally 5 times with 5ms interval and 10px distance
title_text.stylize(window, style=1)
Below is a gif demonstrating all of the available styles
print(get_accent_color()) # prints the current windows accent color
>>> '#1b595a'
print(stylize_text("Your Custom Text", style=1)) # stylizes your text
# all of the styles shown on the above gif are available
>>> " "
This menthod is applicable for any other UI library like pygame pySimpleGUI, 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)
All Rights Reserved