Tkinter+SQLite密码管理程序:多账号密码复制问题及复选框实现需求
解决多账号密码复制的复选框实现方案
原代码的问题在于循环结束后decrypted_password仅保留最后一个账号的密码,导致复制按钮只能取到最后一个值。要实现复选框选择复制,需要把每个账号的信息和复选框关联起来,具体修改如下:
步骤1:重构检索结果的展示逻辑
不再用单个Label拼接所有文本,而是为每个账号创建独立的UI组件,同时存储每个账号的密码和对应的复选框状态变量。
修改后的完整代码
def find_detalis(): entered_platform = platform_entry.get().lower() cursor.execute('SELECT * FROM MyUsers WHERE platform=?', (entered_platform,)) users = cursor.fetchall() if users: info_box_window = tk.Toplevel(root) info_box_window.geometry("320x390+620+300") info_box_window.title("User found") # 存储每个账号的密码和对应的复选框变量 account_list = [] # 循环创建每个账号的展示组件 for user in users: decrypted_username = decrypt_data(user[1], key) decrypted_password = decrypt_data(user[2], key) platform = user[3] # 创建账号容器Frame account_frame = tk.Frame(info_box_window) account_frame.pack(pady=5, padx=10, fill=tk.X) # 复选框变量,用于标记是否选中该账号 var = tk.BooleanVar() checkbox = tk.Checkbutton(account_frame, variable=var) checkbox.pack(side=tk.LEFT, padx=5) # 账号信息标签 info_label = tk.Label(account_frame, text=f"用户名: {decrypted_username}\n密码: {decrypted_password}\n平台: {platform}") info_label.pack(side=tk.LEFT, padx=5) # 将复选框变量和密码存入列表 account_list.append( (var, decrypted_password) ) # 复制密码函数:遍历列表找到选中的账号,复制其密码 def copy_to_clipboard(): for var, password in account_list: if var.get(): pyperclip.copy(password) # 可选:复制后提示 tk.messagebox.showinfo("提示", "密码已复制到剪贴板") return # 如果没有选中任何复选框 tk.messagebox.showwarning("提示", "请先选择要复制的账号") copy_info_button = tk.Button(info_box_window, text="复制选中的密码到剪贴板", command=copy_to_clipboard) copy_info_button.pack(pady=10)
关键修改点说明
- 用
account_list存储每个账号的复选框状态变量和对应的密码,实现选中状态与密码的关联 - 每个账号单独用
Frame包裹复选框和信息标签,布局更清晰易读 - 复制函数遍历
account_list,找到被选中(var.get()为True)的账号并复制其密码 - 增加未选中时的提示,优化用户操作体验
内容的提问来源于stack exchange,提问作者norsk.polakk
相关产品推荐
相关产品推荐

