Verwenden Sie wxpython, um ein Gadget-ähnliches transparentes Hintergrundbildfenster zu erstellen

In Windows 10 gibt es kein Gadget

Ich habe plötzlich das Gadget in Windows Vista usw. verpasst, also habe ich beschlossen, etwas in der Nähe zu machen, also habe ich es mit wxpython gemacht. Diejenigen, die nur den endgültigen Code sehen möchten, sind unten.

Ergebnisse

apppleeeeeeee.gif

Umgebung

windows 10 python 3.6.10 wxPython 4.1.0

Machen Sie den Hintergrund transparent und zeigen Sie das Bild an

Macht den Hintergrund transparent und ändert das Fenster in die Form des Bildes. Durch Festlegen von NO_BORDER, FRAME_SHAPED im Initialisierungsprozess wird zunächst die Titelleiste gelöscht und die SetShape-Methode ist verfügbar.

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

danach Laden Sie ein Bild, ändern Sie die Fenstergröße und die Fensterform. Als transparentes Bild Da es nicht gelesen werden konnte, habe ich beschlossen, die Farbe (0,0,0) als transparente Farbe zu behandeln.

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)))

Binden Sie abschließend das Ereignis onPaint, um das Bild zu zeichnen.

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

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

Sie können jetzt das Bildtypfenster anzeigen.

Ich kann das Fenster nicht verschieben, da es keine Titelleiste gibt !!

Ich möchte es bewegen können, weil es eine große Sache ist. Hier scheint es einen etwas einfacheren Weg zu geben, aber ich versuche, die Position zu aktualisieren, indem ich den Teil erkenne, auf den geklickt wird, und mich im Verschieben-Ereignis bewege. Der wichtige Teil besteht darin, die Erfassungsposition in die absolute Position des Bildschirms umzuwandeln.

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

Endgültiger Code

Es hat nichts mit dem Code zu tun, es wird jedoch empfohlen, ihn mit Pythonw auszuführen, da nur das Fenster ohne Anzeige der Konsole geöffnet wird.

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

Verwenden Sie wxpython, um ein Gadget-ähnliches transparentes Hintergrundbildfenster zu erstellen
Erstellen Sie mit tkinter [Python] einen Rahmen mit transparentem Hintergrund.
Erstellen Sie eine GCE-Instanz aus einem GCR Docker-Image mithilfe von Terraform
Erstellen Sie einen einfachen geplanten Stapel mit Dockers Python Image und parse-crontab
Generieren Sie ein Docker-Image mit Fabric
Erstellen Sie mit tkinter eine Python-GUI
Erstellen Sie ein verschachteltes Wörterbuch mit defaultdict
Erstellen Sie die CRUD-API mit der Fast API
Erstellen Sie mit Boost.Python einen C-Sprach-Wrapper
Erstellen Sie mit Python + PIL ein Dummy-Image.
Erstellen Sie mit dem Sympy-Modul ein Diagramm
[Python] Erstellen Sie eine Stapelumgebung mit AWS-CDK
Erstellen Sie mit Pandas einen Datenrahmen aus Excel
[AWS Lambda] Erstellen Sie ein Bereitstellungspaket mit dem Amazon Linux Docker-Image