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