Python调用ChatGPT制作基于Tkinter的桌面时钟

 更新时间:2023年03月23日 08:38:41   作者:小锋学长生活大爆炸  
这篇文章主要为大家详细介绍了Python如何调用ChatGPT制作基于Tkinter的桌面时钟,文中的示例代码讲解详细,感兴趣的可以了解一下

描述

给ChatGPT的描述内容:

python在桌面上显示动态的文字,不要显示窗口边框。窗口背景和标签背景都是透明的,但标签内的文字是有颜色。使用tkinter库实现,并以class的形式书写,方便用户对内容进行扩展开发。

窗口默认出现在屏幕的中间位置。窗口中的标签需要包含两项内容。其中一项用于实时显示当前的日期和时间,精确到毫秒。另一项从txt文件中读取显示,若没有txt文件则显示“None”。

在未锁定状态下,鼠标可以拖动窗口。在锁定状态下,窗口无法通过鼠标的拖动而移动。在窗口中添加一个“锁定”按钮,当鼠标移动到窗口上方时,显示“锁定”按钮,鼠标移走后,隐藏“锁定”按钮。通过“锁定”按钮,窗口进入锁定状态。在锁定状态下,当鼠标移动到窗口上方时,显示一个“解除锁定”的按钮,鼠标移走后,隐藏该“解除锁定”按钮。通过点击“解除锁定”按钮,进入未锁定状态。锁定和未锁定状态是互相切换的。

给窗口添加一个鼠标右键的功能,在右键菜单中,可以点击“退出”,从而退出应用。

窗口中的内容居中显示。

代码

给出的代码,并经过微调:

import tkinter as tk
import datetime
import math
import locale
 
# Set the locale to use UTF-8 encoding
locale.setlocale(locale.LC_ALL, 'en_US.utf8')
 
 
class TransparentWindow(tk.Tk):
    def __init__(self, text_file=None):
        super().__init__()
        self.attributes('-alpha', 1) # 设置窗口透明度
        # self.attributes('-topmost', True) # 窗口置顶
        # self.attributes('-transparentcolor', '#000000')
        self.overrideredirect(True) # 去掉窗口边框
        self.locked = False # 初始化锁定状态
        self.mouse_x = 0
        self.mouse_y = 0
        self.config(bg='#000000', highlightthickness=0, bd=0)
        
        
        # 获取屏幕尺寸和窗口尺寸,使窗口居中
        screen_width = self.winfo_screenwidth()
        screen_height = self.winfo_screenheight()
        window_width = 400
        window_height = 100
        x = (screen_width - window_width) // 2
        y = (screen_height - window_height) // 2
        self.geometry('{}x{}+{}+{}'.format(window_width, window_height, x, y))
 
        # 添加日期时间标签
        self.datetime_label = tk.Label(self, text='', font=('Arial', 20), fg='#FFFFFF', bg='#000000')
        self.datetime_label.place(relx=0.5, y=20, anchor='center')
 
        # 提示标签
        self.note_label = tk.Label(self, text='123', font=('Arial', 14), fg='#FFFFFF', bg='#000000')
        self.note_label.place(relx=0.5, y=50, anchor='center')
 
        # 文本标签
        self.text_label = tk.Label(self, text='', font=('Arial', 14), fg='#FFFFFF', bg='#000000')
        self.text_label.place(relx=0.5, y=80, anchor='center')
 
        # 添加锁定按钮
        self.lock_button = tk.Button(self, text='锁定', font=('Arial', 10), command=self.toggle_lock)
        self.toggle_lock_button(True)
        self.toggle_lock_button(False)
 
        # 添加解锁按钮
        self.unlock_button = tk.Button(self, text='解除锁定', font=('Arial', 10), command=self.toggle_lock)
        self.toggle_unlock_button(True)
        self.toggle_unlock_button(False)
 
        # 定时更新日期时间标签
        self.update_datetime()
        # 定时更新text标签
        self.update_text_label()
        # 定时更新note标签
        self.update_note_label()
 
        # 绑定鼠标事件
        self.bind('<Button-1>', self.on_left_button_down)
        self.bind('<ButtonRelease-1>', self.on_left_button_up)
        self.bind('<B1-Motion>', self.on_mouse_drag)
        self.bind('<Enter>', self.on_mouse_enter)
        self.bind('<Leave>', self.on_mouse_leave)
 
        # 创建右键菜单
        self.menu = tk.Menu(self, tearoff=0)
        self.menu.add_command(label="退出", command=self.quit)
        self.bind("<Button-3>", self.show_menu)
 
 
    def toggle_lock_button(self, show=True):
        if show:
            self.lock_button.place(relx=1, rely=0.85, anchor='e')
        else:
            self.lock_button.place_forget()
    
    def toggle_unlock_button(self, show=True):
        if show:
            self.unlock_button.place(relx=1, rely=0.85, anchor='e')
        else:
            self.unlock_button.place_forget()
 
    def show_menu(self, event):
        self.menu.post(event.x_root, event.y_root)
 
    def update_datetime(self):
        now = datetime.datetime.now().strftime('%Y-%m-%d     \u270d     %H:%M:%S.%f')[:-4]
        msg = f'{now}'
        self.datetime_label.configure(text=msg)
        self.after(10, self.update_datetime)
 
    def update_text_label(self):
        now = '小锋学长生活大爆炸'
        self.text_label.configure(text=now)
        self.after(1000, self.update_text_label)
 
    def update_note_label(self):
        # 指定日期,格式为 年-月-日
        specified_start_date = datetime.date(2023, 2, 20)
        specified_end_date = datetime.date(2023, 7, 9)
        today = datetime.date.today()
        # 计算距离指定日期过了多少周
        start_delta = today - specified_start_date
        num_of_weeks = math.ceil(start_delta.days / 7)
        # 计算距离指定日期剩余多少周
        end_delta = specified_end_date - today
        remain_weeks = math.ceil(end_delta.days / 7)
 
        msg = f'当前第{num_of_weeks}周, 剩余{remain_weeks}周({end_delta.days}天)'
        self.note_label.configure(text=msg)
        self.after(1000*60, self.update_note_label)
 
 
    def toggle_lock(self):
        if self.locked:
            self.locked = False
            self.toggle_lock_button(True)
            self.toggle_unlock_button(False)
        else:
            self.locked = True
            self.toggle_lock_button(False)
            self.toggle_unlock_button(True)
 
    def on_left_button_down(self, event):
        self.mouse_x = event.x
        self.mouse_y = event.y
 
    def on_left_button_up(self, event):
        self.mouse_x = 0
        self.mouse_y = 0
 
    def on_mouse_drag(self, event):
        if not self.locked:
            x = self.winfo_x() + event.x - self.mouse_x
            y = self.winfo_y() + event.y - self.mouse_y
            self.geometry('+{}+{}'.format(x, y))
 
    def on_mouse_leave(self, event):
        self.lock_button.place_forget()
        self.unlock_button.place_forget()
 
    def on_mouse_enter(self, event):
        if not self.locked:
            self.toggle_lock_button(True)
            self.toggle_unlock_button(False)
        else:
            self.toggle_lock_button(False)
            self.toggle_unlock_button(True)
 
 
if __name__ == '__main__':
    app = TransparentWindow(text_file='text.txt')
    app.mainloop()

效果

说明

关于背景颜色、日期等等内容,大家可以修改相应的代码。

到此这篇关于Python调用ChatGPT制作基于Tkinter的桌面时钟的文章就介绍到这了,更多相关Python ChatGPT制作桌面时钟内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Python利用神经网络解决非线性回归问题实例详解

    Python利用神经网络解决非线性回归问题实例详解

    这篇文章主要介绍了Python利用神经网络解决非线性回归问题,结合实例形式详细分析了Python使用神经网络解决非线性回归问题的相关原理与实现技巧,需要的朋友可以参考下
    2019-07-07
  • Appium自动化测试中获取Toast信息操作

    Appium自动化测试中获取Toast信息操作

    本文主要介绍了Appium自动化测试中获取Toast信息操作,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-02-02
  • Python中的闭包详细介绍和实例

    Python中的闭包详细介绍和实例

    这篇文章主要介绍了Python中的闭包详细介绍和实例,本文先是详细讲解了闭包的相关知识,然后给出了python中闭包例子、lamada例子,需要的朋友可以参考下
    2014-11-11
  • Langchain集成管理prompt功能详解

    Langchain集成管理prompt功能详解

    这篇文章主要为大家介绍了Langchain集成管理prompt功能示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-03-03
  • python中wx模块的具体使用方法

    python中wx模块的具体使用方法

    这篇文章主要介绍了python中wx模块的具体使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-05-05
  • django中的select_related和prefetch_related性能优化分析

    django中的select_related和prefetch_related性能优化分析

    这篇文章主要介绍了django中的select_related和prefetch_related性能优化分析,本文给大家介绍的非常详细,需要的朋友可以参考下
    2024-07-07
  • python登录QQ邮箱发信的实现代码

    python登录QQ邮箱发信的实现代码

    python登录QQ邮箱发信的代码,有需要的朋友可以参考下
    2013-02-02
  • python基础之循环语句

    python基础之循环语句

    这篇文章主要介绍了python的循环语句,实例分析了Python中返回一个返回值与多个返回值的方法,需要的朋友可以参考下
    2021-10-10
  • Python绘制专业的K线图 源代码解析

    Python绘制专业的K线图 源代码解析

    这篇文章主要介绍了Python绘制专业的K线图,使用Python绘制一幅专业的K线图,是量化投资和金融数据分析的必备功课。下面我将从K线图简介、数据获取、K线图绘制及成交量绘制等方面,结合源代码,一步步实现专业K线图的绘制,需要的朋友可以参考下
    2021-10-10
  • 解决django前后端分离csrf验证的问题

    解决django前后端分离csrf验证的问题

    今天小编就为大家分享一篇解决django前后端分离csrf验证的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2019-02-02

最新评论