pyqt编写悬浮窗显示下班倒计时

1 篇文章 0 订阅
1 篇文章 0 订阅

import sys
import datetime
from PyQt5.QtWidgets import QApplication, QWidget, QLabel
from PyQt5.QtGui import QPainter, QBrush, QColor
from PyQt5.QtCore import Qt, QPoint, QTimer
class CircularWindow(QWidget):
    def __init__(self):
        super().__init__()
        self.offset = None  # 记录鼠标按下时的位置,用于计算鼠标移动的距离
        self.timer = QTimer(self)  # 创建定时器
        self.timer.timeout.connect(self.updateTime)  # 定时器到时时执行updateTime方法
        self.timer.start(1000)  # 定时器每1秒触发一次
        # 设置窗口属性
        self.setWindowFlags(Qt.FramelessWindowHint)  # 去除窗口状态栏
        self.setAttribute(Qt.WA_TranslucentBackground)  # 设置窗口背景为透明
        # 设置窗口大小和位置
        self.setGeometry(100, 100, 100, 100)
        # 添加标签
        self.label = QLabel(self)
        self.label.setStyleSheet("font-size: 15px; color: white;")
        self.label.setAlignment(Qt.AlignCenter)
        self.label.setGeometry(0, 0, 100, 100)
        
    def paintEvent(self, event):
        painter = QPainter(self)
        painter.setRenderHint(QPainter.Antialiasing, True)  # 设置抗锯齿渲染
        # 绘制圆形背景
        brush = QBrush(QColor("#3DAEE9"))
        painter.setBrush(brush)
        painter.drawEllipse(0, 0, 100, 100)
        
    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.offset = event.pos()  # 记录鼠标按下时的位置
            
    def mouseMoveEvent(self, event):
        if self.offset is not None:
            # 计算鼠标移动的距离
            delta = QPoint(event.pos() - self.offset)
            # 移动窗口
            self.move(self.pos() + delta)
            
    def mouseReleaseEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.offset = None  # 释放鼠标,清空偏移值
            
    def updateTime(self):
        now = datetime.datetime.now()  # 获取当前时间
        target = now.replace(hour=17, minute=30, second=0, microsecond=0)  # 设置目标时间为下午5:30
        if now >= target:
            self.label.setText("下班了")
        else:
            remaining_time = target - now  # 计算剩余时间
            minutes = remaining_time.seconds // 60  # 计算剩余分钟数
            if minutes != 0:
                self.label.setText("距离下班还有\n"+str(minutes) + " 分钟")
            else:
                self.label.setText("距离下班还有\n"+str(remaining_time.seconds) + "秒")
        
if __name__ == '__main__':
    app = QApplication(sys.argv)
    window = CircularWindow()
    window.show()
    sys.exit(app.exec_())

运行后显示球形悬浮窗,计算现在时间到17时30分的剩余时间,超过17时30分显示下班了。

不明原因,目前只支持1920*1080的分辨率其他分辨率会显示错误。

摸鱼的时候写的,请自行安装python3.9及以下的版本,同时安装pyqt。

提供一个已经打包好的exe版本,https://download.csdn.net/download/m0_55317949/87865759

效果图

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值