wxpython制作桌面悬浮球

介绍

使用wxpython制作一个类似于电脑管家一样的悬浮球。

功能

  • 圆形窗口
  • 自动鼠标离开悬浮球自动贴边
  • 鼠标在悬浮球上自动弹出整个悬浮球

效果

在这里插入图片描述

代码

import wx

class myframe(wx.Frame):
    def __init__(self):
        super().__init__(parent=None,pos=wx.DefaultPosition,style=wx.FRAME_SHAPED|wx.FRAME_NO_TASKBAR, size=(150,150))

        self.bg = wx.Bitmap("images/2.png", wx.BITMAP_TYPE_PNG)  # 悬浮球的图片 
        region = wx.Region(self.bg)
        self.SetShape(region)
        path = wx.GraphicsRenderer.GetDefaultRenderer().CreatePath()
        path.AddCircle(70, 68, 68)  # 圆形路径,参数x,y,r。通过调整坐标半径来找出合适的图片位置
        self.SetShape(path)
        self.SetToolTip("提示字符串")
        self.Bind(wx.EVT_PAINT, self.OnPaint)
        self.Bind(wx.EVT_MOTION, self.OnMouseMotion)
        self.Bind(wx.EVT_RIGHT_UP, self.OnRightClickEvent)
        self.Bind(wx.EVT_LEFT_DOWN, self.OnLeftClickDown)
        self.Bind(wx.EVT_LEAVE_WINDOW, self.ResetPosition)
        self.Bind(wx.EVT_ENTER_WINDOW, self.DisplayWindow)
       
        # 鼠标左键按下时获取位置
    def OnLeftClickDown(self, event):
        self.pt = event.GetPosition()
        
        # 鼠标右键退出窗口
    def OnRightClickEvent(self, event):
        wx.Exit()
        
        # 悬浮球拖拽
    def OnMouseMotion(self, event):
        if event.Dragging() and event.LeftIsDown():
            pos = self.ClientToScreen(event.GetPosition())
            self.Move((pos.x-self.pt.x, pos.y-self.pt.y))
        
        # 绘制    
    def OnPaint(self,event):
        mydc=wx.PaintDC(self)
        mydc.DrawBitmap(self.bg,0,0,True)
        
        # 离开悬浮球时贴边
    def ResetPosition(self, event):
        if event.LeftIsDown():
            pos = self.ClientToScreen(event.GetPosition())
        else:
            pos = self.GetPosition()
        self.SetPosition((pos.x,-120))
        
    	# 鼠标放在悬浮球上是弹出
    def DisplayWindow(self, event):
        pos = self.GetPosition()
        self.SetPosition((pos.x, 0))
        
myapp=wx.App()
frame=myframe()
frame.Show()
myapp.MainLoop()
  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
下面是一个简单的 wxPython 实现的数据库登录窗口示例: ```python import wx import pymysql class LoginFrame(wx.Frame): def __init__(self): wx.Frame.__init__(self, None, -1, 'Database Login', size=(300, 200)) panel = wx.Panel(self, -1) vbox = wx.BoxSizer(wx.VERTICAL) hbox1 = wx.BoxSizer(wx.HORIZONTAL) self.host_label = wx.StaticText(panel, -1, 'Host:', size=(50, -1)) hbox1.Add(self.host_label, flag=wx.RIGHT, border=10) self.host_text = wx.TextCtrl(panel, -1, 'localhost') hbox1.Add(self.host_text, proportion=1) vbox.Add(hbox1, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10) hbox2 = wx.BoxSizer(wx.HORIZONTAL) self.user_label = wx.StaticText(panel, -1, 'User:', size=(50, -1)) hbox2.Add(self.user_label, flag=wx.RIGHT, border=10) self.user_text = wx.TextCtrl(panel, -1, '') hbox2.Add(self.user_text, proportion=1) vbox.Add(hbox2, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10) hbox3 = wx.BoxSizer(wx.HORIZONTAL) self.password_label = wx.StaticText(panel, -1, 'Password:', size=(50, -1)) hbox3.Add(self.password_label, flag=wx.RIGHT, border=10) self.password_text = wx.TextCtrl(panel, -1, '', style=wx.TE_PASSWORD) hbox3.Add(self.password_text, proportion=1) vbox.Add(hbox3, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10) hbox4 = wx.BoxSizer(wx.HORIZONTAL) self.database_label = wx.StaticText(panel, -1, 'Database:', size=(50, -1)) hbox4.Add(self.database_label, flag=wx.RIGHT, border=10) self.database_text = wx.TextCtrl(panel, -1, '') hbox4.Add(self.database_text, proportion=1) vbox.Add(hbox4, flag=wx.EXPAND|wx.LEFT|wx.RIGHT|wx.TOP, border=10) hbox5 = wx.BoxSizer(wx.HORIZONTAL) self.connect_button = wx.Button(panel, -1, 'Connect') hbox5.Add(self.connect_button, flag=wx.RIGHT, border=10) self.cancel_button = wx.Button(panel, -1, 'Cancel') hbox5.Add(self.cancel_button) vbox.Add(hbox5, flag=wx.ALIGN_RIGHT|wx.RIGHT|wx.BOTTOM, border=10) panel.SetSizer(vbox) self.connect_button.Bind(wx.EVT_BUTTON, self.on_connect) self.cancel_button.Bind(wx.EVT_BUTTON, self.on_cancel) def on_connect(self, event): host = self.host_text.GetValue() user = self.user_text.GetValue() password = self.password_text.GetValue() database = self.database_text.GetValue() try: conn = pymysql.connect(host=host, user=user, password=password, database=database) print('Connected to database.') conn.close() except pymysql.Error as e: print('Error connecting to database:', e) def on_cancel(self, event): self.Close() if __name__ == '__main__': app = wx.App() frame = LoginFrame() frame.Show() app.MainLoop() ``` 在这个示例中,我们使用 wxPython 的各种布局管理器来创建一个简单的登录窗口,包括四个文本框和两个按钮,其中 Connect 按钮用于连接数据库,Cancel 按钮用于关闭窗口。 当用户单击 Connect 按钮时,我们通过 pymysql 模块连接到数据库。如果连接成功,则在控制台输出 "Connected to database.",否则输出错误消息。 注意,这个示例中的数据库连接是非常简单的,只是用于演示 wxPython 中如何创建登录窗口和连接到数据库。在实际应用中,需要根据实际需求进行更复杂的错误处理和安全措施。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值