python一键启动代码,让桌面跟简洁

 

代码如下:

import tkinter as tk
from tkinter import ttk, filedialog, messagebox
from tkinter.simpledialog import askstring
import os
import json

class QuickLaunchApp:
def __init__(self, root):
self.root = root
self.root.title("Jason快速启动")
self.root.geometry("280x600")
self.style = ttk.Style(self.root)
self.style.theme_use('clam') # 使用现代样式
self.style.configure('.', background='#F0FFFF') # 设置背景颜色为天蓝色
self.style.configure('TNotebook', tabmargins=[2, 5, 2, 0]) # 设置标签页的边距
self.style.configure('TNotebook.Tab', font=('Arial', 11, 'bold')) # 设置标签页的字体


# 创建一个Notebook小部件来管理类目
self.notebook = ttk.Notebook(self.root)
self.notebook.pack(expand=True, fill='both')
style = ttk.Style()
style.configure('TNotebook.Tab', font=('Arial ', 11, 'bold'))
style.configure('TNotebook', tabmargins=[2, 5, 2, 0]) # 设置标签页的边距

# 创建文件菜单
self.menu_bar = tk.Menu(self.root)
self.root.config(menu=self.menu_bar)

self.file_menu = tk.Menu(self.menu_bar, tearoff=0)
self.menu_bar.add_cascade(label="文件", menu=self.file_menu)
self.file_menu.add_command(label="添加快捷方式", command=self.add_shortcut)
self.file_menu.add_command(label="添加类目", command=self.add_category) # 添加类目菜单项
self.file_menu.add_separator()
self.file_menu.add_command(label="退出", command=self.root.quit)

# 加载已保存的快捷方式和类目
self.categories, self.shortcuts = self.load_data()
self.create_categories()

def add_shortcut(self):
# 打开文件对话框选择快捷方式文件
shortcut_path = filedialog.askopenfilename(title="选择快捷方式", filetypes=[("快捷方式", "*.lnk")])
if shortcut_path and os.path.exists(shortcut_path):
# 显示类目选择对话框
category = self.select_category()
if category:
if category not in self.shortcuts:
self.shortcuts[category] = []
self.shortcuts[category].append(shortcut_path)
self.save_data()
self.refresh_categories()
else:
messagebox.showerror("错误", "无效的快捷方式文件。")

def add_category(self):
# 添加类目
category_name = askstring("添加类目", "请输入类目名称:")
if category_name and category_name not in self.categories:
self.categories.append(category_name)
self.shortcuts[category_name] = []
self.save_data()
self.refresh_categories()

def select_category(self):
# 创建一个新的Toplevel窗口
dialog = tk.Toplevel(self.root)
dialog.title("选择类目")
dialog.geometry("260x120") # 设置弹窗大小

# 设置字体大小为12
font = ("TkDefaultFont", 11)
dialog.option_add("*Font", font)

# 创建一个StringVar来保存选择的类目
selected_category = tk.StringVar(dialog)
selected_category.set(self.categories[0] if self.categories else "")

# 创建一个OptionMenu来选择类目
option_menu = ttk.Combobox(dialog, textvariable=selected_category, values=self.categories, state="readonly")
option_menu.pack(pady=10, padx=10)

# 创建一个按钮来确认选择
button = ttk.Button(dialog, text="提交", command=dialog.destroy)
button.pack(pady=10)

# 设置弹窗在屏幕中央显示,并覆盖主窗口
dialog.update_idletasks()
width = dialog.winfo_width()
height = dialog.winfo_height()
x = self.root.winfo_x()
y = self.root.winfo_y()
dialog.geometry('{}x{}+{}+{}'.format(width, height, x, y))

# # 设置弹窗在屏幕中央显示
# dialog.update_idletasks()
# width = dialog.winfo_width()
# height = dialog.winfo_height()
# x = (dialog.winfo_screenwidth() // 2) - (width // 2)
# y = (dialog.winfo_screenheight() // 2) - (height // 2)
# dialog.geometry('+{}+{}'.format(x, y))

# 设置样式
# style = ttk.Style(dialog)
# style.theme_use('clam') # 使用现代样式
# style.configure('.', background='#f0f0f0') # 设置背景颜色
# style.configure('TButton', foreground='#000000', background='#ffffff', font=('TkDefaultFont', 13, 'bold')) # 设置按钮样式
# style.configure('TCombobox', background='#ffffff') # 设置Combobox样式

# 等待用户选择类目
dialog.focus_set()
dialog.grab_set() # 禁用主窗口
dialog.wait_window() # 等待弹窗关闭

# 返回用户选择的类目
return selected_category.get()

def create_categories(self):
# 创建类目并添加按钮
self.refresh_categories()

def refresh_categories(self):
# 刷新类目和按钮
for tab in self.notebook.tabs():
self.notebook.forget(tab)
for category in self.categories:
frame = ttk.Frame(self.notebook)
self.notebook.add(frame, text=category)
self.update_category(category, frame)

def update_category(self, category, frame=None):
# 更新指定类目的按钮
if frame is None:
frame = self.notebook.nametowidget(self.notebook.select())
for widget in frame.winfo_children():
widget.destroy()
for shortcut in self.shortcuts.get(category, []):
# label = os.path.basename(shortcut)
label = os.path.splitext(os.path.basename(shortcut))[0]
button = ttk.Button(frame, text=label, command=lambda p=shortcut: os.startfile(p))
button.pack(fill=tk.X, padx=5, pady=2)

def load_data(self):
# 加载保存的类目和快捷方式
try:
with open("shortcuts.json", "r", encoding='utf-8') as file:
data = json.load(file)
return list(data.keys()), data
except FileNotFoundError:
return [], {}

def save_data(self):
# 保存类目和快捷方式到文件
with open("shortcuts.json", "w", encoding='utf-8') as file:
json.dump(self.shortcuts, file, ensure_ascii=False, indent=4)

if __name__ == "__main__":
root = tk.Tk()
root.title("快速启动")

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

# 计算窗口的位置
window_width = 300 # 窗口宽度
window_height = 600 # 窗口高度
x = screen_width // 2 - window_width // 2 + 750 # 向右偏移100像素
y = screen_height // 2 - window_height // 2 -100

# 设置窗口位置
root.geometry(f"{window_width}x{window_height}+{x}+{y}")
app = QuickLaunchApp(root)
root.mainloop()