Hi, there this project lets you set a kivy Window as your wallpaper. What does that mean ?
Anything you can make in Kivy can be set as you wallpaper (given it does not require user input)
only tested on CPython
installing Wallpaper Engine is very easy
First install Poetry (it's an awesome package manager for python)
clone this repo and cd into dir
git clone "https://github.com/p0lygun/wallpaper-engine.git" && cd wallpaper-engine
Install required packages using poetry
poetry install
RUN !!!
poetry run python wallpaper_engine
That's it. The wallpaper-engine is now installed, you should see a window like this
To choose a wallpaper click on Show settings
and choose a wallpaper
The wallpaper is updated when you click on Change/Reload wallpaper
in the main menu (You need to press this button when u start the program or change the wallpaper)
Each wallpaper comes with its onw settings, to change the go to the wallpaper settings
section in settings
settings are updated as soon as you enter the value and close the pop-up
if you want to make you own wallpaper its very easy
but first you should make familiar with the directory structure
D:.
\---wallpaper_engine # main app folder
|
+---data # runtime data is stored here
|
+---libs # contains main libs (kivy manager, menu ...)
| +---kv # kv lang files for each lib
|
+---utils # contaings things that are used by both menu and kivy manager
|
+---wallpapers # contains all the wallpapers and there configs, and kv lang files
| +---configs
| +---kv
so to make a new wallpaper make a new file in wallpaper directory (the file name must follow snake case i.e snake_case)
then in wallpapers\kv
make a kv file with name snakecase.kv
so If your wallpaper name is
my_wallpaper.py
its kv file name will bemywallpaper.kv
Ok now lets make a Wallpaper
I will use starfield and starfeild.kv as an example
Now any wallpaper has a Wallpaper
Class that inherits from WallpaperBase
So this is the main class for any wallpaper and only this will be called by kivy_manager
Each kivy file also must contain the following kv code
<Wallpaper>:
size_hint : (1,1)
canvas.before:
Color:
rgba: self.background_color
Rectangle:
pos: (0,0)
size: self.size
FloatLayout:
size_hint : (1,1)
id : container
now each Wallpaper
class gets two function from WallpaperBase that one must override
build
& animate
.
build
is the function where you should add widgets to your class (In the floatlayout which has id:container
)
animate
is the function where all the animation will happen this function is called only once
So you shuld handle the animation in your wallpaper using Animation
or using Clock.schedule_interval
or Clock.schedule_once
or a combination of all three
If you use
Clock.schedule_interval
as your main animation driver set theself.animation_loop_clock
to theschedule_interval
Example point_walk.py#L199 and setself.playing = True
No matter how you handle the animation try to implement (or override) function for play
and pause
so that the kivy_manager can pause your wallpaper when your desktop is not in focus
To make a config for your wallpaper
define the __init__
as defined
the Config
object takes two optional args local
and module
local means that this a personal config not a gloabal one module take the file name as the value (
pathlib.Path(__file__).stem
)
To make a settings panel we use the same format as kivy settings you just need to make a Json
here is an example
settings_json = [
{"type": "title", "title": "Star Field wallpaper Settings"},
{
"type": "string",
"title": "Star Color",
"desc": "Color of the stars (Hex)",
"section": "wallpaper",
"key": "star_color",
},
{
"type": "string",
"title": "Background Color",
"desc": "Background Color (Hex)",
"section": "wallpaper",
"key": "background_color",
},
]
each dict in the list must have section wallpaper
and the keys must be class variables that you want to save to disk
if there is a interger in the variables use
is_int
to mark that variable as an integer
Then at last call self.load_settings
with the settings_json
as the first argument
now you have settings and save to disk done !!!
I know all this can be tough to understand at first so you can DM me anytime on Discord or join Kivy discord server