Comment utiliser Python pour appeler ChatGPT afin de développer une horloge de bureau basée sur Tkinter ?

WBOY
Libérer: 2023-05-08 21:10:13
avant
1331 Les gens l'ont consulté

Description

Contenu de la description pour ChatGPT :

python affiche du texte dynamique sur le bureau et n'affiche pas les bordures des fenêtres. L'arrière-plan de la fenêtre et l'arrière-plan de l'étiquette sont tous deux transparents, mais le texte de l'étiquette est coloré. Il est implémenté à l'aide de la bibliothèque tkinter et écrit sous forme de classes pour permettre aux utilisateurs d'élargir et de développer le contenu.

La fenêtre apparaît par défaut au milieu de l'écran. L'étiquette dans la fenêtre doit contenir deux éléments. L’un est utilisé pour afficher la date et l’heure actuelles en temps réel, avec une précision en millisecondes près. Un autre élément est lu à partir du fichier txt et affiché. S'il n'y a pas de fichier txt, « Aucun » s'affiche.

Dans l'état déverrouillé, la souris peut faire glisser la fenêtre. À l'état verrouillé, la fenêtre ne peut pas être déplacée en la faisant glisser avec la souris. Ajouter un bouton "Verrouiller" à la fenêtre Lorsque la souris survole la fenêtre, le bouton "Verrouiller" s'affiche. Lorsque la souris est éloignée, le bouton "Verrouiller" est masqué. Avec le bouton "Verrouiller", la fenêtre entre dans l'état verrouillé. A l'état verrouillé, lorsque la souris survole la fenêtre, un bouton "Déverrouiller" s'affiche. Une fois la souris éloignée, le bouton "Déverrouiller" est masqué. Entrez dans l'état déverrouillé en cliquant sur le bouton "Déverrouiller". Les états verrouillé et déverrouillé sont commutés entre eux.

Ajoutez une fonction de clic droit à la fenêtre. Dans le menu contextuel, vous pouvez cliquer sur "Quitter" pour quitter l'application.

Le contenu de la fenêtre est centré.

code

Le code donné avec de légers ajustements :

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(&#39;<Button-1>&#39;, self.on_left_button_down)
        self.bind(&#39;<ButtonRelease-1>&#39;, self.on_left_button_up)
        self.bind(&#39;<B1-Motion>&#39;, self.on_mouse_drag)
        self.bind(&#39;<Enter>&#39;, self.on_mouse_enter)
        self.bind(&#39;<Leave>&#39;, 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=&#39;e&#39;)
        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=&#39;e&#39;)
        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(&#39;%Y-%m-%d     \u270d     %H:%M:%S.%f&#39;)[:-4]
        msg = f&#39;{now}&#39;
        self.datetime_label.configure(text=msg)
        self.after(10, self.update_datetime)
 
    def update_text_label(self):
        now = &#39;小锋学长生活大爆炸&#39;
        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&#39;当前第{num_of_weeks}周, 剩余{remain_weeks}周({end_delta.days}天)&#39;
        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(&#39;+{}+{}&#39;.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__ == &#39;__main__&#39;:
    app = TransparentWindow(text_file=&#39;text.txt&#39;)
    app.mainloop()
Copier après la connexion

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Étiquettes associées:
source:yisu.com
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal