rsj0315 发表于 2023-12-13 23:30:23

Python 写一个悬浮桌面上的倒计时器

Python 写一个悬浮桌面上的倒计时器
要求:
1.半透明
2.悬浮
3.倒计时长可以设定
4.无边框

FishC 发表于 2023-12-13 23:31:03

这是一个有趣的项目!为了实现这个悬浮桌面上的倒计时器,我们可以使用Python中的Tkinter库和Win32gui库。

首先,你需要安装Win32gui库。可以使用以下命令通过pip进行安装:

pip install pywin32

然后,你可以尝试以下代码:

import tkinter as tk
import win32gui

class CountdownTimer:
    def __init__(self, duration):
      self.duration = duration
      self.root = tk.Tk()
      self.root.overrideredirect(1)# 隐藏标题栏
      self.root.attributes("-alpha", 0.8)# 设置透明度
      self.root.attributes("-topmost", True)# 窗口置顶

      # 获取屏幕宽高
      screen_width = self.root.winfo_screenwidth()
      screen_height = self.root.winfo_screenheight()

      # 计算窗口位置
      x = int(screen_width / 2)
      y = int(screen_height / 2)

      # 创建标签并添加到窗口
      self.label = tk.Label(self.root, text=self.get_time(), font=("Arial", 36))
      self.label.pack()

      # 设置窗口位置
      self.root.geometry("+{}+{}".format(x, y))

      # 更新倒计时
      self.update_timer()

    def update_timer(self):
      if self.duration <= 0:
            self.label.config(text="Time's up!")
            self.root.after(2000, self.close_window)# 显示 "Time's up!" 两秒后关闭窗口
      else:
            self.label.config(text=self.get_time())
            self.duration -= 1
            self.root.after(1000, self.update_timer)# 每一秒更新一次倒计时

    def get_time(self):
      minutes = self.duration // 60
      seconds = self.duration % 60
      return "{:02d}:{:02d}".format(minutes, seconds)

    def close_window(self):
      self.root.destroy()

def set_transparent(hwnd):
    # 设置窗口透明度为20%
    win32gui.SetWindowLong(hwnd, win32gui.GWL_EXSTYLE,
                           win32gui.GetWindowLong(hwnd, win32gui.GWL_EXSTYLE) | win32gui.WS_EX_LAYERED)
    win32gui.SetLayeredWindowAttributes(hwnd, win32gui.RGB(0, 0, 0), 0, win32gui.LWA_ALPHA)

if __name__ == "__main__":
    timer = CountdownTimer(180)# 设置倒计时时长为3分钟

    # 获取窗口句柄
    hwnd = int(timer.root.winfo_id())

    # 设置窗口半透明
    set_transparent(hwnd)

    # 进入事件循环
    timer.root.mainloop()

这段代码会创建一个指定时长的倒计时器窗口,并设定其半透明、悬浮、无边框等特性。你可以通过修改`CountdownTimer`类中的`duration`参数来设置倒计时时长。

希望这个例子能满足你的需求!如果有任何问题,请随时提问。

以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。

ZXJSG 发表于 2023-12-13 23:42:24

import tkinter as tk

def countdown(seconds):
    root = tk.Tk()
    root.overrideredirect(True)
    root.attributes("-alpha", 0.7)
    root.attributes("-topmost", True)
    root.attributes("-transparentcolor", "white")

    label = tk.Label(root, text="", font=("Arial", 30))
    label.pack()

    def update_label(secs):
      if secs > 0:
            label.config(text=str(secs))
            secs -= 1
            root.after(1000, update_label, secs)
      else:
            root.destroy()

    update_label(seconds)
    root.mainloop()

countdown(60)# Set countdown time in seconds
页: [1]
查看完整版本: Python 写一个悬浮桌面上的倒计时器