Utilisez wxpython pour créer une fenêtre de type d'image d'arrière-plan transparent semblable à un gadget

Il n'y a pas de gadget dans Windows10

J'ai soudain manqué le gadget qui était dans Windows Vista, etc., alors j'ai décidé de faire quelque chose de proche, donc je l'ai fait en utilisant wxpython. Ceux qui ne veulent voir que le code final sont en bas.

Livrables

apppleeeeeeee.gif

environnement

windows 10 python 3.6.10 wxPython 4.1.0

Rendre l'arrière-plan transparent et afficher l'image

Rend l'arrière-plan transparent et change la fenêtre de la forme de l'image. Tout d'abord, en définissant NO_BORDER, FRAME_SHAPED dans le processus d'initialisation, la barre de titre sera supprimée et la méthode SetShape sera disponible.

wx.Frame.__init__(self, None, title="Apple!!",
        style=wx.NO_BORDER | wx.FRAME_SHAPED, pos=(110, 10))

ensuite Chargez n'importe quelle image, changez la taille de la fenêtre et changez la forme de la fenêtre. Comme une image transparente Comme il ne pouvait pas être lu, j'ai décidé de traiter la couleur (0,0,0) comme une couleur transparente.

image = wx.Image("apple.png ")
self.bitmap = image.ConvertToBitmap()
self.imageSize = image.GetSize()
self.SetClientSize(self.imageSize)
self.SetShape(wx.Region(self.bitmap, wx.Colour(0, 0, 0)))

Enfin, liez l'événement onPaint pour dessiner l'image.

self.Bind(wx.EVT_PAINT, self.onPaint)

def onPaint(self, event=None):
    DC = wx.PaintDC(self)
    DC.DrawBitmap(self.bitmap, 0, 0, True)

Vous pouvez maintenant afficher la fenêtre du type d'image.

Je ne peux pas déplacer la fenêtre car il n'y a pas de barre de titre !!

Je veux pouvoir le déplacer parce que c'est un gros problème. Il semble y avoir un moyen un peu plus simple ici, mais j'essaie de mettre à jour la position en détectant la partie sur laquelle on clique et se déplace dans l'événement Move. L'important est de convertir la position d'acquisition en position absolue de l'écran.

def onEvent(self, event):
    pos = event.Position
    pos = self.ClientToScreen(pos)
    if self.leftDown and event.leftIsDown:
        self.position[0] += pos.x-self.x
        self.position[1] += pos.y-self.y
        self.Move(self.position)
    self.x = pos.x
    self.y = pos.y
    self.leftDown = event.leftIsDown

Code final

Cela n'a rien à voir avec le code, mais il est recommandé de l'exécuter en utilisant pythonw car il ne fera qu'ouvrir la fenêtre sans afficher la console.

import wx

class AppFrame(wx.Frame):
    def __init__(self):
        self.position = [100, 100]
        wx.Frame.__init__(self, None, title="Apple!!",
                          style=wx.NO_BORDER | wx.FRAME_SHAPED, pos=(110, 10))
        self.Bind(wx.EVT_MOUSE_EVENTS, self.onEvent)
        self.Bind(wx.EVT_PAINT, self.onPaint)
        self.Move(self.position)
        self.leftDown = False
        self.x = -1
        self.y = -1

        image = wx.Image("apple.png ")
        self.bitmap = image.ConvertToBitmap()
        self.imageSize = image.GetSize()
        self.SetClientSize(self.imageSize)
        self.SetShape(wx.Region(self.bitmap, wx.Colour(0, 0, 0)))

    def onEvent(self, event):
        pos = event.Position
        pos = self.ClientToScreen(pos)
        if self.leftDown and event.leftIsDown:
            self.position[0] += pos.x-self.x
            self.position[1] += pos.y-self.y
            self.Move(self.position)
        self.x = pos.x
        self.y = pos.y
        self.leftDown = event.leftIsDown

    def onPaint(self, event=None):
        DC = wx.PaintDC(self)
        DC.DrawBitmap(self.bitmap, 0, 0, True)


app = wx.App(False)
AppFrame().Show()
app.MainLoop()

Recommended Posts

Utilisez wxpython pour créer une fenêtre de type d'image d'arrière-plan transparent semblable à un gadget
Créer un cadre avec un arrière-plan transparent avec tkinter [Python]
Créer une instance GCE à partir d'une image Docker GCR à l'aide de terraform
Créez un lot planifié simple à l'aide de l'image Python de Docker et de parse-crontab
Générer une image Docker à l'aide de Fabric
Créer une interface graphique python à l'aide de tkinter
Créer un dictionnaire imbriqué à l'aide de defaultdict
Créer une API CRUD à l'aide de l'API rapide
Créez un wrapper de langage C à l'aide de Boost.Python
Créez une image factice avec Python + PIL.
Créer un graphique à l'aide du module Sympy
[Python] Créer un environnement Batch à l'aide d'AWS-CDK
Créer un bloc de données à partir d'Excel à l'aide de pandas
[AWS Lambda] Créer un package de déploiement à l'aide de l'image Amazon Linux Docker