Seite 1 von 1

Desktop Pet

Verfasst: Montag 27. Februar 2023, 16:16
von Merkator
Moinsen,

ich hatte die Idee ein Haustier für meinen Bildschirm zu programmieren. Auf Tiktok und Github habe ich einige solche gesehen, welche meinen Vorstellungen entsprachen. Als ich anfing klappte alles gut, keine Probleme. Es klappt wunderbar! Doch jetzt habe ich nur noch ein Problem....es ist eine schwarze Box um meine Ente. Diese Box bekomme ich irgendwie nicht auf transparent.

Mein Code:

Code: Alles auswählen

import tkinter as tk
import time

class pet():
    def __init__(self):
        self.window = tk.Tk()
        #code below generates string for each frame in gif
        self.moveleft = [tk.PhotoImage(file='duck-left.gif', format='gif -index %i' % (i)) for i in range(10)]
        self.moveright = [tk.PhotoImage(file='duck-right.gif', format='gif -index %i' % (i)) for i in range(10)]
        self.frame_index = 0 #setting starting frame
        self.img = self.moveleft[self.frame_index]      #starting direction gif
        self.timestamp = time.time()
        self.window.config(background='')
        self.window.overrideredirect(True)
        self.window.wait_visibility(self.window)
        self.window.wm_attributes("-alpha", 0.5)
        self.window.attributes("-alpha", 0.5)
        self.window.overrideredirect(True)      #makes window frameless
        self.window.attributes('-topmost', True)        #puts window on top
        self.label = tk.Label(self.window, bd=0, bg="black")    #creates a label as a container for a gif
        #starting points
        self.x = 1040
        self.y = 1000
        self.window.geometry('128x128+{}+{}'.format(str(self.x), str(self.y)))
        self.label.configure(image=self.img)
        self.label.pack()
        self.window.after(0, self.update)
        self.dir = -1   #starting direction
        self.window.mainloop()

    def changetime(self, direction):
        if time.time() > self.timestamp + 0.05:
            self.timestamp = time.time()
            self.frame_index = (self.frame_index + 1) % 5   #speed of frames change
            self.img = direction[self.frame_index]

    def changedir(self):
        self.dir = -(self.dir)

    def go(self):
        self.x = self.x + self.dir
        if self.dir <0:
            direction = self.moveleft
        else:
            direction = self.moveright
        self.changetime(direction)


    def update(self):
        self.go()
        if self.x == 560 or self.x == 1060:
            self.changedir()

        self.window.geometry('128x128+{}+{}'.format(str(self.x), str(self.y)))
        self.label.configure(image=self.img)
        self.label.pack()
        self.window.after(10, self.update)  #10 is frames number for my gif
        self.window.lift()

pet()

Bitte helft mir und meinem Kücken

Lg

Re: Desktop Pet

Verfasst: Montag 27. Februar 2023, 20:42
von Merkator
Und bevor gefragt wird, ja der hintergrund bei den gifs ist entfernt :D

Re: Desktop Pet

Verfasst: Donnerstag 9. März 2023, 12:09
von Merkator
Hat jemand zumindest eine Idee?
:roll:
:?