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.
windows 10 python 3.6.10 wxPython 4.1.0
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 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
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