【教程】使用ChatGPT制作基于Tkinter的桌面时钟

目录

描述

代码

效果

说明

下载

开源链接:GitHub - 1061700625/Tkinter_Desktop_Clock: 基于Tkinter的桌面时钟小工具

描述

        给ChatGPT的描述内容:

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

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

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

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

        窗口中的内容居中显示。

        添加 右键窗口显示“改变颜色”子菜单,点击后,弹出颜色选择框,通过选择不同的颜色,可以改变窗口的背景颜色。

        添加 右键窗口显示“置顶”子菜单,点击后,可以使当前窗口一直保持在最前面。在置顶状态下,再右键窗口,改为显示“取消置顶”。

        添加右键“修改日期”子菜单,点击后,弹出开始日期选择框和结束日期选择框,选择完毕后,更新到self.start_date和self.end_date,并立即调用update_note_label函数。

        添加 右键窗口显示“修改note”子菜单,点击后,弹出内容输入框,输入框默认显示“小锋学长生活大爆炸”。点击确认后,输入框的内容更新到self.text_label。只需要给出修改的关键代码。

        启动时从http://xfxuezhang.cn/web/share/version获取desktop_clock.txt文件,根据内容与当前版本是否一致,若不一致则弹窗提示有更新。

        添加右键“开机自启动”选项,设置后,允许pc开机后自动启动当前软件。并且,当设置了开机自启动后,再次点击,应该需要 取消开机自启动。

        将一些配置参数存放入注册表中,在启动软件时,从注册表中读取参数,并更新到软件中。当用户在软件中更改了配置时,需要将改动更新到注册表中。

代码

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

import tkinter as tk
import datetime
import math
import locale
import os, sys
from tkinter.colorchooser import askcolor
import webbrowser
import tkinter.messagebox as messagebox
import tkinter.ttk as ttk
import tkcalendar
import babel.numbers
import requests
import tkinter.simpledialog
import winreg# Set the locale to use UTF-8 encoding
locale.setlocale(locale.LC_ALL, 'en_US.utf8')
VERSION = '20230406'
CONFIG_REG_PATH = r'SOFTWARE\desktop_clock\Settings'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 = 0self.mouse_y = 0self.config(bg='#000000', highlightthickness=0, bd=0)self.window_width = 400self.window_height = 100# # 获取屏幕尺寸和窗口尺寸,使窗口居中# screen_width = self.winfo_screenwidth()# screen_height = self.winfo_screenheight()# x = (screen_width - self.window_width) // 2# y = (screen_height - self.window_height) // 2# self.geometry('{}x{}+{}+{}'.format(self.window_width, self.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.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.menu.add_command(label="窗口置顶", command=self.topmost_on)# 添加“改变颜色”子菜单self.menu.add_command(label="修改颜色", command=self.choose_color)# 添加“修改日期”子菜单self.menu.add_command(label="修改日期", command=self.modify_date)# 添加“修改note”子菜单self.menu.add_command(label='修改Note', command=self.edit_text_labele)# 添加“开机自启动”子菜单self.menu.add_command(label="开机自启", command=self.toggle_startup)# 添加“恢复出厂设置”子菜单self.menu.add_command(label="恢复设置", command=self.init_config_to_registry)# 添加“关于”子菜单self.menu.add_command(label="关于我们", command=self.about_me)self.bind("<Button-3>", self.show_menu)self.update_config_from_registry()# 定时更新日期时间标签self.update_datetime()# 定时更新text标签self.update_text_label()# 定时更新note标签self.update_note_label()self.check_version()def update_config_from_registry(self):# Get settings from registry or set default valuesself.start_date = self.get_value_from_registry('start_date', '2023/2/20', write=True)self.end_date = self.get_value_from_registry('end_date', '2023/7/9', write=True)startup = self.get_value_from_registry('startup', False)self.menu.entryconfig(5, label='取消自动' if startup else '开机自启')topmost = self.get_value_from_registry('topmost', False)self.attributes('-topmost', True if topmost else False)self.menu.entryconfig(1, label='取消置顶' if topmost else '窗口置顶')background_color = self.get_value_from_registry('background_color', '#000000', write=True)self.config(bg=background_color)self.datetime_label.config(bg=background_color)self.note_label.config(bg=background_color)self.text_label.config(bg=background_color)self.locked = self.get_value_from_registry('lock', False)self.toggle_lock_button(False if self.locked else True)self.toggle_unlock_button(True if self.locked else False)self.text_label.configure(text=self.get_value_from_registry('text_label', '小锋学长生活大爆炸', write=True))screen_width = self.winfo_screenwidth()screen_height = self.winfo_screenheight()win_x = (screen_width - self.window_width) // 2win_y = (screen_height - self.window_height) // 2x = self.get_value_from_registry('win_x', str(win_x))y = self.get_value_from_registry('win_y', str(win_y))self.geometry('{}x{}+{}+{}'.format(self.window_width, self.window_height, x, y))def init_config_to_registry(self, first=False):self.set_value_to_registry('start_date', '2023/2/20')self.set_value_to_registry('end_date', '2023/7/9')self.set_value_to_registry('startup', None)self.set_value_to_registry('topmost', None)self.set_value_to_registry('background_color', '#000000')self.set_value_to_registry('lock', None)self.set_value_to_registry('text_label', '小锋学长生活大爆炸')screen_width = self.winfo_screenwidth()screen_height = self.winfo_screenheight()x = (screen_width - self.window_width) // 2y = (screen_height - self.window_height) // 2self.set_value_to_registry('win_x', str(x))self.set_value_to_registry('win_y', str(y))if not first:messagebox.showinfo("提示", "重启生效")def check_version(self):url = 'http://xfxuezhang.cn/web/share/version/desktop_clock.txt'try:resp = requests.get(url, timeout=2).text.strip()if resp != VERSION:if messagebox.askyesno('更新提示', '发现新版本,是否前往蓝奏云下载?密码:c9o1'):webbrowser.open('https://xfxuezhang.lanzouo.com/b09ubrasb')except:passdef get_value_from_registry(self, query, default=None, write=False, vtype=winreg.REG_SZ):# 从注册表中读取参数,如果没有,则使用默认值try:with winreg.OpenKey(winreg.HKEY_CURRENT_USER, CONFIG_REG_PATH, access=winreg.KEY_READ) as key:value = winreg.QueryValueEx(key, query)[0]except:value = defaultif write:# 将默认值存储到注册表中with winreg.CreateKey(winreg.HKEY_CURRENT_USER, CONFIG_REG_PATH) as key:winreg.SetValueEx(key, query, 0, vtype, default)return valuedef set_value_to_registry(self, query, value=None, vtype=winreg.REG_SZ):if value is not None:with winreg.CreateKey(winreg.HKEY_CURRENT_USER, CONFIG_REG_PATH) as key:winreg.SetValueEx(key, query, 0, vtype, value)else:try:with winreg.OpenKey(winreg.HKEY_CURRENT_USER, CONFIG_REG_PATH, access=winreg.KEY_ALL_ACCESS) as key:winreg.DeleteValue(key, query)except:passdef check_startup_enabled(self):key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",access=winreg.KEY_READ)app_path = os.path.abspath(sys.argv[0])app_name = os.path.basename(app_path)try:value, type = winreg.QueryValueEx(key, app_name)except WindowsError:return Falsereturn value == app_pathdef toggle_startup(self):key = winreg.OpenKey(winreg.HKEY_CURRENT_USER, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",access=winreg.KEY_ALL_ACCESS)app_path = os.path.abspath(sys.argv[0])app_name = os.path.basename(app_path)if self.check_startup_enabled():winreg.DeleteValue(key, app_name)self.menu.entryconfig(5, label='开机自启')messagebox.showinfo("提示", "已取消开机自启动")else:winreg.SetValueEx(key, app_name, 0, winreg.REG_SZ, app_path)self.menu.entryconfig(5, label='取消自启')messagebox.showinfo("提示", "已设置开机自启动")key.Close()self.set_value_to_registry('startup', '1' if self.check_startup_enabled() else None)def about_me(self):# webbrowser.open_new_tab('http://www.xfxuezhang.cn')messagebox.showinfo("关于", "暂时没什么内容")# 选择日期def modify_date(self):top = tk.Toplevel(self)# 获取屏幕尺寸和窗口尺寸,使窗口居中screen_width = top.winfo_screenwidth()screen_height = top.winfo_screenheight()window_width = 175window_height = 100x = (screen_width - window_width) // 2y = (screen_height - window_height) // 2top.geometry('{}x{}+{}+{}'.format(window_width, window_height, x, y))top.title('选择日期')tk.Label(top, text='开始日期:').grid(row=0, column=0)start_date = tkcalendar.DateEntry(top, width=12, background='darkblue', foreground='white', date_pattern='yyyy/mm/dd', date=self.start_date, justify='center')start_date.grid(row=0, column=1)tk.Label(top, text='结束日期:').grid(row=1, column=0)end_date = tkcalendar.DateEntry(top, width=12, background='darkblue', foreground='white', date_pattern='yyyy/mm/dd', date=self.end_date, justify='center')end_date.grid(row=1, column=1)def update_dates():self.start_date = start_date.get_date().strftime('%Y/%m/%d')self.end_date = end_date.get_date().strftime('%Y/%m/%d')self.update_note_label()top.destroy()self.set_value_to_registry('start_date', self.start_date)self.set_value_to_registry('end_date', self.end_date)button = tk.Button(top, text="确定", command=update_dates)button.grid(row=2, column=0, columnspan=2, pady=10)# 窗口置顶def topmost_on(self):if self.attributes('-topmost'):self.attributes('-topmost', False)self.menu.entryconfig(1, label='窗口置顶')else:self.attributes('-topmost', True)self.menu.entryconfig(1, label='取消置顶')self.set_value_to_registry('topmost', '1' if self.attributes('-topmost') else None)# 改变背景色def choose_color(self):color = askcolor()[1]if color:self.config(bg=color)self.datetime_label.config(bg=color)self.note_label.config(bg=color)self.text_label.config(bg=color)self.set_value_to_registry('background_color', color)# 锁定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 toggle_lock(self):if self.locked:self.locked = Falseself.toggle_lock_button(True)self.toggle_unlock_button(False)else:self.locked = Trueself.toggle_lock_button(False)self.toggle_unlock_button(True)self.set_value_to_registry('lock', '1' if self.locked else None)# self.set_value_to_registry('winfo_screenwidth', self.winfo_x() - self.mouse_x)# 显示右键菜单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)# 更新txt文档内容def update_text_label(self):now = ''if os.path.exists('config.txt'):now = open('config.txt', 'r', encoding='utf8').read().strip()now = now or self.get_value_from_registry('text_label', '小锋学长生活大爆炸')if now:self.text_label.configure(text=now)# self.after(1000, self.update_text_label)def edit_text_labele(self):"""打开文本输入框并更新内容"""# 创建文本输入框并显示默认内容note = tkinter.simpledialog.askstring('修改Note', '请输入新的note', initialvalue=self.text_label['text'], parent=self)# 如果用户点击确认,则更新文本标签的内容if note:self.text_label['text'] = noteself.set_value_to_registry('text_label', note)# 更新周次def update_note_label(self):# 指定日期,格式为 年-月-日start_y, start_m, start_d = list(map(int, self.start_date.strip().split('/')))end_y, end_m, end_d = list(map(int, self.end_date.strip().split('/')))specified_start_date = datetime.date(start_y, start_m, start_d)specified_end_date = datetime.date(end_y, end_m, end_d)today = datetime.date.today()# 计算距离指定日期过了多少周start_delta = today - specified_start_datenum_of_weeks = math.ceil(start_delta.days / 7)# 计算距离指定日期剩余多少周end_delta = specified_end_date - todayremain_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 on_left_button_down(self, event):self.mouse_x = event.xself.mouse_y = event.y# 实现窗口拖动def on_left_button_up(self, event):x = self.winfo_x() + event.x - self.mouse_xy = self.winfo_y() + event.y - self.mouse_yself.mouse_x = 0self.mouse_y = 0self.set_value_to_registry('win_x', str(x))self.set_value_to_registry('win_y', str(y))# 实现窗口拖动def on_mouse_drag(self, event):if not self.locked:x = self.winfo_x() + event.x - self.mouse_xy = self.winfo_y() + event.y - self.mouse_yself.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()

效果

界面上鼠标点击右键可以选择“退出”:


鼠标移动到界面,会显示“锁定”和“解除锁定”按钮:

说明

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

下载

https://xfxuezhang.lanzouo.com/b09ubrasb
密码:c9o1

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/12949.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Python+ChatGPT制作一个AI实用百宝箱

目录 一、注册OpenAI二、搭建网站及其框架三、AI聊天机器人四、AI绘画机器人 ChatGPT 最近在互联网掀起了一阵热潮&#xff0c;其高度智能化的功能能够给我们现实生活带来诸多的便利&#xff0c;可以帮助你写文章、写报告、写周报、做表格、做策划甚至还会写代码。只要与文字相…

单男福利?程序猿用ChatGPT创造的虚拟老婆,被真女友强制「安乐死」

上一篇&#xff1a;被裁了&#xff0c;想不通&#xff0c;一个人干全组70&#xff05;的工作&#xff0c;没人干的事都是我在干&#xff0c;就因为不会向上管理吗&#xff1f; “我花了接近7000元购买云服务器&#xff0c;只是为了和她多聊聊天。” ChatGPT爆火后&#xff0c;各…

技术宅整大活,把ChatGPT「调教」成二次元老婆,惹现女友暴走,含泪删库

源&#xff5c;新智元 技术宅小哥创造出AI老婆「ChatGPT酱」&#xff0c;花了1000美元只为和她说话。他的沉迷惹得女友直接暴走&#xff0c;最终&#xff0c;只能含泪将自己的「二次元老婆」安乐死&#xff01; ChatGPT爆火之后&#xff0c;充分证明了自己是个超强的语言模型&a…

程序猿用ChatGPT创造的虚拟老婆,被真女友强制「安乐死」

图片来源&#xff1a;由无界版图AI工具生成 本文来源&#xff1a;量子位 “我花了接近7000元购买云服务器&#xff0c;只是为了和她多聊聊天。” ChatGPT爆火后&#xff0c;各种整活层出不穷&#xff0c;这回令人大开眼界的&#xff0c;是一位外国程序猿小哥用它搞出的“虚拟老…

ChatGPT提示词工程师教程-推理

本章的主要内容&#xff1a;利用大语言模型进行语义推理&#xff0c;主要包括提取标签、名称、文本情感分析等等。 情感分析 可以指定回复内容&#xff0c;便于后期处理。 可以让模型自己给出情感列表。 信息提取 可以用一段话提取多个信息。 关键词提取 还可以索引不同关键词…

ChatGPT背后“推理”如何做?浙大等最新《基于语言模型提示的推理》综述,阐述大模型提示推理机制与方法体系...

来自&#xff1a;专知 进NLP群—>加入NLP交流群 作为解决复杂问题的基本能力&#xff0c;推理可以为各种实际应用提供后端支持&#xff0c;如医学诊断、谈判等。本文对语言模型提示推理的前沿研究进行了全面概述。我们介绍了研究成果的对比和总结&#xff0c;并为初学者提供…

笔精墨妙,妙手丹青,微软开源可视化版本的ChatGPT:Visual ChatGPT,人工智能AI聊天发图片,Python3.10实现

说时迟那时快&#xff0c;微软第一时间发布开源库Visual ChatGPT&#xff0c;把 ChatGPT 的人工智能AI能力和Stable Diffusion以及ControlNet进行了整合。常常被互联网人挂在嘴边的“赋能”一词&#xff0c;几乎已经变成了笑话&#xff0c;但这回&#xff0c;微软玩了一次真真正…

ChatGPTBox 沉浸式的感受ChatGPT带来的快感

ChatGPT基础功能&#xff1a; 1.自然流畅的对话&#xff1a;ChatGPT通过对海量对话数据的学习&#xff0c;具有自然流畅的对话能力&#xff0c;能够与用户进行逼真的自然语言交互。 2.能够理解语境&#xff1a;ChatGPT能够理解语境&#xff0c;不仅能根据上下文生成回答&…

【社区图书馆】你好,ChatGPT

ChatGPT&#xff0c;一款基于GPT-3.5架构的大型语言模型&#xff0c;可以提供广泛的知识和信息。在这篇文章中&#xff0c;我将介绍一些关于ChatGPT的背景、功能和使用方式的信息。 作为一款AI语言模型&#xff0c;ChatGPT可以像人类一样理解和处理自然语言。ChatGPT被设计用来…

OpenAI官方提示词课(二)迭代提示词

当我们在调试程序时&#xff0c;通常很难一次就把程序正常跑起来。这是普遍现象。但我们会借助一些工具和手段&#xff0c;有步骤有流程地去调整程序&#xff0c;最终让程序按照我们想要的样子正常执行。 对于提示词来说也是一样的。当我们向ChatGPT提问时&#xff0c;一开始它…

如何用自己公司的知识、流程等来训练Chat GPT?

在玩过 ChatGPT 并向它询问有关世界、金融和初创公司的一般问题后&#xff0c;我开始思考&#xff1a;“如果我可以用我自己的初创公司甚至大型公司的所有流程、知识和商业经验来训练 AI 模型会怎样&#xff1f;企业&#xff1f;” 使用您自己公司的知识、流程等培训 ChatGPT …

上班摸鱼!如何让ChatGPT帮我们做测试!

作为软件开发领域中至关重要的一环&#xff0c;软件测试的重要性日益凸显。然而&#xff0c;随着软件测试开发技术的不断发展&#xff0c;软件测试也面临着越来越多的挑战&#xff0c;为了更好地应对这些挑战&#xff0c;测试人社区将持续举办技术沙龙活动&#xff0c;为测试人…

ChatGPT的技术发展路径和带来的影响

ChatGPT一经推出&#xff0c;在业界引起巨大轰动&#xff0c;国内外各大厂商纷纷布局相关业务。元宇宙与生成式模型相辅相成技术互相促进&#xff0c;元宇宙能够实现线上化服务入口的行业&#xff0c;在元宇宙中进行场景融合&#xff0c;chatGPT能助力元宇宙场景生成与智能交互…

人工智能轨道交通行业周刊-第43期(2023.4.24-5.7)

本期关键词&#xff1a;综合智能检测、隧道检测、智慧城轨白皮书、虚拟编组、讯飞星火大模型、央企数字化 1 整理涉及公众号名单 1.1 行业类 RT轨道交通人民铁道世界轨道交通资讯网铁路信号技术交流北京铁路轨道交通网上榜铁路视点ITS World轨道交通联盟VSTR铁路与城市轨道交…

ChatGLM-6B does not appear to have a file named config.json.

文章目录 代码调用演示效果实例一、问题二、场景说明三、error说明四、解决解决一解决二 ChatGLM-6B是一个由清华大学和智谱AI联合研发的开源对话语言模型。它是一个支持中英双语问答的对话系统&#xff0c;并在中文方面进行了特别的优化。 该模型基于General Language Model (…

AttributeError:‘list’对象没有属性’endswith’ (AttributeError: ‘list’ object has no attribute ‘endswith’)

文章目录 代码调用演示效果实例问题场景描述解决方法一方法二 ChatGLM-6B是一个由清华大学和智谱AI联合研发的开源对话语言模型。它是一个支持中英双语问答的对话系统&#xff0c;并在中文方面进行了特别的优化。 该模型基于General Language Model (GLM)架构&#xff0c;具有6…

ChatGPT 联网后,屏障被打破了!

引语&#xff1a;大家好我们是权知星球&#xff0c;开启你独特的知识星际之旅ChatGPT在一夜之间完成了“进化”&#xff0c;通过插件功能实现了联网&#xff0c;并开启了自己的“AppStore”时代。 目录 ChatGPT进入“AppStore”时代 获取最新资讯 运行插件并代表用户执行操…

怎么把文字转换成朗读,快来看这几款文字转语音朗读工具

在日常的生活中&#xff0c;我们经常会遇到将文字转换成语音的情况&#xff0c;比如自制有声小说、给视频配音等等&#xff0c;当然我们还会自己手动进行配音。但是如果没有专业的设备和配音环境&#xff0c;是很难配出很好的效果&#xff0c;那该怎么办呢&#xff1f;其实也不…

微信新增文章朗读功能;超越 ChatGPT 记录,Threads 上线 5 天用户破亿;在删除数据前如何通知客户|极客头条...

「极客头条」—— 技术人员的新闻圈&#xff01; CSDN 的读者朋友们早上好哇&#xff0c;「极客头条」来啦&#xff0c;快来看今天都有哪些值得我们技术人关注的重要新闻吧。 整理 | 梦依丹 出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09; 一分钟速览新闻点&#…