首页
学习
活动
专区
圈层
工具
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

编程小白也能轻松上手!腾讯元宝-Deepseek教你打造桌面小工具

本人作为编程小白,此前连基本程序都难以读懂。听闻 AI 大模型可辅助编程后,展开了一系列测试,本次是继前几次测试后的又一次编程测试。

在此次测试中,借助了腾讯元宝AI大模型,通过多次重复提问,成功编写出一个桌面小工具的 Python 程序,并将其打包成可执行文件 exe,整个过程耗时 70 分钟。

同时,还准备了做好后的可执行文件演示视频以及 Python 程序部分截图。

文件截图:

演示视频:

Python程序部分截图:

在利用 AI 大模型编程的过程中,总结出以下几点关键经验:

1.提问策略:验证和提问方式极为关键。采用合理的递进式提问,能够实现逐层深入。首要的是先开启编程任务,后续在验证阶段通过持续提问来完善程序。这种步步深入的提问模式,能有效引导 AI 给出更贴合需求的代码。

2.基础知识储备:即便不懂编程,对一些基本逻辑和运行原理有所了解会更有利。当然,若缺乏相关知识,也可参考 AI 每次回答中的注意事项。将这些建议融入后续问题中,有助于完善程序功能,不过这可能会花费更多时间。

3.学习模式:边问边验证的模式,极大地完善了我对程序逻辑的认知。这种模式仿佛身边有一位经验丰富的老师,随时等待提问并耐心解答,非常适合编程学习。它不仅能帮助完成编程任务,还能在过程中逐步构建起编程思维和知识体系。

以下是使用AI大模型进行的整个提问过程:为方便大家观看,前面仅体现提问的方式,不展现未完善的程序,最终完善的程序在最后一次问答中。

用户提问1:

使用python生成一个程序:GUI上显示闹钟按钮,点击后在桌面显示一个灰色透明的时间GUI上显示壁纸切换按钮,也可以上传壁纸,自动或手动切换壁纸GUI上显示计算器按钮,点击后,调用电脑计算器

用户提问2:

自动切换壁纸的时间间隔可以根据需要调整 time.sleep(60) 中的数值。闹钟按钮点击后显示,再次点击关闭。显示模式和关闭模式用不同的颜色显示。同时,闹钟显示界面可以用鼠标拖动位置

用户提问3:

可以选择闹钟颜色和透明度

用户提问4:

保留选择闹钟颜色和调整透明度的功能,同时可以拖动闹钟边框一角,放大显示闹钟,时间字体同时放大并自动居中显示

用户提问5:

设置颜色和透明度的按钮显示在GUI上,不要显示在闹钟界面上

用户提问6:

手动切换壁纸可以选择上一个和下一个,自动切换壁纸可以选择间隔时间

用户提问7:

自动切换壁纸的时间间隔可以根据用户输入进行调整。自动切换壁纸按钮,按下开启,再次点击关闭,有颜色区别。另外,整个GUI的美观度提升以下,布局合理

用户提问8:

增加截图功能和按钮,调用系统的截图功能,把上述程序的GUI界面分区,闹钟、壁纸、计算机、截图分为四个功能区

回答:

为了将上述程序的 GUI 界面分区,把闹钟、壁纸、计算器、截图分为四个功能区,可以使用 tkinter 的 Frame 组件来实现。Frame 就像是一个容器,可以将相关的组件组合在一起,形成不同的功能区域。

以下是修改后的代码:

import tkinter as tkfrom tkinter import filedialog, messagebox, colorchooserimport timeimport osimport ctypesimport threadingfrom datetime import datetimeimport platformimport subprocess# 全局变量,用于记录闹钟窗口状态alarm_window = Noneis_alarm_shown = Falsestop_auto_change = threading.Event()  # 用于控制自动切换壁纸的线程# 显示或隐藏闹钟时间的窗口def toggle_alarm_time():   global alarm_window, is_alarm_shown   if is_alarm_shown:       alarm_window.destroy()       alarm_button.config(bg='SystemButtonFace')   # 恢复按钮默认颜色       is_alarm_shown = False   else:       alarm_window = tk.Toplevel()       alarm_window.attributes('-alpha',  alarm_alpha)  # 设置窗口透明度       alarm_window.configure(bg=alarm_color)   # 设置窗口背景颜色       alarm_window.overrideredirect(True)   # 去除窗口边框       alarm_label = tk.Label(alarm_window, font=('Arial', 24), bg=alarm_color, fg='white')       alarm_label.pack(padx=20,  pady=20)       def update_time():           current_time = datetime.now().strftime('%H:%M:%S')           alarm_label.config(text=current_time)           alarm_window.after(1000,  update_time)       update_time()       # 计算窗口应该显示的位置,这里简单设置在桌面左上角       alarm_window.geometry("+0+0")       # 鼠标拖动功能       def start_drag(event):           alarm_window.x = event.x           alarm_window.y = event.y       def drag(event):           deltax = event.x - alarm_window.x           deltay = event.y - alarm_window.y           x = alarm_window.winfo_x()  + deltax           y = alarm_window.winfo_y()  + deltay           alarm_window.geometry(f"+{x}+{y}")       alarm_window.bind("<ButtonPress-1>",  start_drag)       alarm_window.bind("<B1-Motion>",  drag)       alarm_button.config(bg='green')   # 改变按钮颜色表示已显示       is_alarm_shown = True# 壁纸切换功能wallpaper_files = []current_wallpaper_index = 0auto_change_thread = Noneis_auto_changing = Falsedef upload_wallpaper():   global wallpaper_files   file_paths = filedialog.askopenfilenames(filetypes=[("Image  files", "*.png;*.jpg;*.jpeg")])   if file_paths:       wallpaper_files.extend(file_paths)       messagebox.showinfo("Success",  "Wallpapers uploaded successfully!")def change_wallpaper_prev():   global current_wallpaper_index   if wallpaper_files:       current_wallpaper_index = (current_wallpaper_index - 1) % len(wallpaper_files)       set_wallpaper(wallpaper_files[current_wallpaper_index])def change_wallpaper_next():   global current_wallpaper_index   if wallpaper_files:       current_wallpaper_index = (current_wallpaper_index + 1) % len(wallpaper_files)       set_wallpaper(wallpaper_files[current_wallpaper_index])def set_wallpaper(path):   try:       SPI_SETDESKWALLPAPER = 20       ctypes.windll.user32.SystemParametersInfoW(SPI_SETDESKWALLPAPER,  0, path, 3)   except Exception as e:       messagebox.showerror("Error",  f"Failed to set wallpaper: {e}")def change_wallpaper_auto():   global auto_change_thread, is_auto_changing   if is_auto_changing:       is_auto_changing = False       stop_auto_change.set()   # 标记停止线程       auto_change_button.config(bg='SystemButtonFace')   # 恢复按钮默认颜色       if auto_change_thread:           auto_change_thread.join()   # 等待线程结束   else:       def auto_change():           global current_wallpaper_index           stop_auto_change.clear()   # 清除停止标记           while not stop_auto_change.is_set():               if wallpaper_files:                   current_wallpaper_index = (current_wallpaper_index + 1) % len(wallpaper_files)                   set_wallpaper(wallpaper_files[current_wallpaper_index])               try:                   time.sleep(int(interval_entry.get()))   # 根据输入的间隔时间切换壁纸               except ValueError:                   messagebox.showerror("Error",  "Please enter a valid number for interval.")                   break       is_auto_changing = True       auto_change_button.config(bg='green')   # 改变按钮颜色表示正在自动切换       auto_change_thread = threading.Thread(target=auto_change, daemon=True)       auto_change_thread.start()# 调用电脑计算器def open_calculator():   if os.name  == 'nt':  # 检查是否为 Windows 系统       os.system('calc.exe')# 调用系统截图功能def take_screenshot():   system = platform.system()   if system == "Windows":       try:           subprocess.Popen('snippingtool')       except Exception as e:           messagebox.showerror("Error",  f"Failed to open snipping tool: {e}")   elif system == "Darwin":  # macOS       try:           subprocess.Popen(['screencapture', '-i'])       except Exception as e:           messagebox.showerror("Error",  f"Failed to open screenshot tool: {e}")   else:       messagebox.showwarning("Unsupported",  "Screenshot function is not supported on this system.")# 闹钟颜色和透明度设置alarm_color = 'gray'alarm_alpha = 0.5def set_alarm_color():   global alarm_color   color = colorchooser.askcolor()[1]   if color:       alarm_color = color       if alarm_window:           alarm_window.configure(bg=alarm_color)           for child in alarm_window.winfo_children():               if isinstance(child, tk.Label):                   child.configure(bg=alarm_color)def set_alarm_alpha():   global alarm_alpha   try:       alpha = float(alpha_entry.get())       if 0 <= alpha <= 1:           alarm_alpha = alpha           if alarm_window:               alarm_window.attributes('-alpha',  alarm_alpha)       else:           messagebox.showerror("Error",  "Opacity value must be between 0 and 1.")   except ValueError:       messagebox.showerror("Error",  "Please enter a valid number for opacity.")# 创建主 GUI 窗口root = tk.Tk()root.title("  多功能程序")root.geometry("400x500")   # 设置窗口大小root.configure(bg="#f0f0f0")   # 设置窗口背景颜色# 闹钟功能区alarm_frame = tk.Frame(root, bg="#f0f0f0", bd=2, relief=tk.GROOVE)alarm_frame.pack(pady=10,  padx=10, fill=tk.X)alarm_button = tk.Button(alarm_frame, text="闹钟", command=toggle_alarm_time, bg="#e0e0e0", font=("Arial", 12))alarm_button.pack(side=tk.LEFT,  padx=5)color_button = tk.Button(alarm_frame, text="设置闹钟颜色", command=set_alarm_color, bg="#e0e0e0", font=("Arial", 12))color_button.pack(side=tk.LEFT,  padx=5)alpha_label = tk.Label(alarm_frame, text="设置闹钟透明度 (0 - 1):", bg="#f0f0f0", font=("Arial", 12))alpha_label.pack(side=tk.LEFT,  padx=5)alpha_entry = tk.Entry(alarm_frame, font=("Arial", 12))alpha_entry.insert(0,  str(alarm_alpha))alpha_entry.pack(side=tk.LEFT,  padx=5)alpha_set_button = tk.Button(alarm_frame, text="应用透明度", command=set_alarm_alpha, bg="#e0e0e0", font=("Arial", 12))alpha_set_button.pack(side=tk.LEFT,  padx=5)# 壁纸功能区wallpaper_frame = tk.Frame(root, bg="#f0f0f0", bd=2, relief=tk.GROOVE)wallpaper_frame.pack(pady=10,  padx=10, fill=tk.X)upload_button = tk.Button(wallpaper_frame, text="上传壁纸", command=upload_wallpaper, bg="#e0e0e0", font=("Arial", 12))upload_button.pack(side=tk.LEFT,  padx=5)prev_button = tk.Button(wallpaper_frame, text="上一张壁纸", command=change_wallpaper_prev, bg="#e0e0e0", font=("Arial", 12))prev_button.pack(side=tk.LEFT,  padx=5)next_button = tk.Button(wallpaper_frame, text="下一张壁纸", command=change_wallpaper_next, bg="#e0e0e0", font=("Arial", 12))next_button.pack(side=tk.LEFT,  padx=5)interval_label = tk.Label(wallpaper_frame, text="自动切换间隔时间 (秒):", bg="#f0f0f0", font=("Arial", 12))interval_label.pack(side=tk.LEFT,  padx=5)interval_entry = tk.Entry(wallpaper_frame, font=("Arial", 12))interval_entry.insert(0,  "60")interval_entry.pack(side=tk.LEFT,  padx=5)auto_change_button = tk.Button(wallpaper_frame, text="自动切换壁纸", command=change_wallpaper_auto, bg="#e0e0e0", font=("Arial", 12))auto_change_button.pack(side=tk.LEFT,  padx=5)# 计算器功能区calculator_frame = tk.Frame(root, bg="#f0f0f0", bd=2, relief=tk.GROOVE)calculator_frame.pack(pady=10,  padx=10, fill=tk.X)calculator_button = tk.Button(calculator_frame, text="计算器", command=open_calculator, bg="#e0e0e0", font=("Arial", 12))calculator_button.pack(side=tk.LEFT,  padx=5)# 截图功能区screenshot_frame = tk.Frame(root, bg="#f0f0f0", bd=2, relief=tk.GROOVE)screenshot_frame.pack(pady=10,  padx=10, fill=tk.X)screenshot_button = tk.Button(screenshot_frame, text="截图", command=take_screenshot, bg="#e0e0e0", font=("Arial", 12))screenshot_button.pack(side=tk.LEFT,  padx=5)# 运行主循环root.mainloop()

代码说明:

创建功能区 Frame:

使用 tk.Frame 创建四个不同的功能区,分别为 alarm_frame、wallpaper_frame、calculator_frame 和 screenshot_frame。每个 Frame 都设置了边框(bd=2)和浮雕样式(relief=tk.GROOVE),以便在界面上区分不同的功能区。

将组件放入功能区:

将与每个功能相关的按钮、标签和输入框等组件放入对应的 Frame 中,使用 pack 布局管理器进行布局。

布局功能区:

使用 pack 方法将四个功能区依次排列在主窗口中,设置了一定的内边距(pady 和 padx),使界面更加美观。

通过这种方式,界面被清晰地划分为四个功能区,每个功能区的组件都被组织在一起,提高了界面的可读性和可维护性。

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OxU1xndUTzHcsa3T-foKa5Rg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券