如何在PySimpleGUI中为Tabs添加密码保护?仅开放首个Tab
PySimpleGUI Tabs 密码保护实现方案
要实现首个Tab直接访问、其余Tab需密码验证的功能,可以通过监听Tab切换事件,拦截受保护Tab的访问请求,弹出密码验证窗口后再决定是否允许切换。以下是完整实现代码:
基础版(每次点击都需验证)
import PySimpleGUI as sg # 自定义密码,可替换为实际需要的密码 CORRECT_PASSWORD = "secure_pass_123" # 公开Tab布局 public_tab = [ [sg.Text("这是无需验证的公开Tab")], [sg.Button("公开测试按钮")] ] # 受保护Tab1布局 protected_tab1 = [ [sg.Text("受保护Tab1 - 仅验证通过后可访问")], [sg.Input(key="-INPUT_PROT1-")] ] # 受保护Tab2布局 protected_tab2 = [ [sg.Text("受保护Tab2 - 仅验证通过后可访问")], [sg.Listbox(["机密项A", "机密项B"], size=(20,2), key="-LIST_PROT2-")] ] # 主窗口布局 main_layout = [ [sg.TabGroup([ [sg.Tab("公开Tab", public_tab, key="-TAB_PUBLIC-")], [sg.Tab("受保护Tab1", protected_tab1, key="-TAB_PROT1-")], [sg.Tab("受保护Tab2", protected_tab2, key="-TAB_PROT2-")] ], key="-TAB_GROUP-")] ] window = sg.Window("Tab密码保护示例", main_layout) current_active_tab = "-TAB_PUBLIC-" # 记录当前活跃Tab while True: event, values = window.read() if event == sg.WIN_CLOSED: break # 处理受保护Tab的访问请求 if event in ["-TAB_PROT1-", "-TAB_PROT2-"]: # 弹出密码输入框 input_password = sg.popup_get_text("请输入访问密码:", password_char="*", title="身份验证") if input_password == CORRECT_PASSWORD: # 密码正确,切换到目标Tab current_active_tab = event window["-TAB_GROUP-"].set_current_tab(event) else: # 密码错误,返回原Tab并提示 sg.popup("密码错误,无法访问该Tab", title="验证失败") window["-TAB_GROUP-"].set_current_tab(current_active_tab) # 处理公开Tab的按钮事件 if event == "公开测试按钮": sg.popup("你点击了公开Tab的按钮") window.close()
优化版(验证一次后永久放行)
如果希望用户验证过某个Tab后,后续点击无需重复输入密码,可以添加已验证Tab的记录集合:
import PySimpleGUI as sg CORRECT_PASSWORD = "secure_pass_123" public_tab = [ [sg.Text("这是无需验证的公开Tab")], [sg.Button("公开测试按钮")] ] protected_tab1 = [ [sg.Text("受保护Tab1 - 仅验证通过后可访问")], [sg.Input(key="-INPUT_PROT1-")] ] protected_tab2 = [ [sg.Text("受保护Tab2 - 仅验证通过后可访问")], [sg.Listbox(["机密项A", "机密项B"], size=(20,2), key="-LIST_PROT2-")] ] main_layout = [ [sg.TabGroup([ [sg.Tab("公开Tab", public_tab, key="-TAB_PUBLIC-")], [sg.Tab("受保护Tab1", protected_tab1, key="-TAB_PROT1-")], [sg.Tab("受保护Tab2", protected_tab2, key="-TAB_PROT2-")] ], key="-TAB_GROUP-")] ] window = sg.Window("Tab密码保护示例(优化版)", main_layout) current_active_tab = "-TAB_PUBLIC-" verified_tabs = {"-TAB_PUBLIC-"} # 公开Tab默认已验证 while True: event, values = window.read() if event == sg.WIN_CLOSED: break if event in ["-TAB_PROT1-", "-TAB_PROT2-"]: if event in verified_tabs: # 已验证过,直接切换 current_active_tab = event window["-TAB_GROUP-"].set_current_tab(event) else: input_password = sg.popup_get_text("请输入访问密码:", password_char="*", title="身份验证") if input_password == CORRECT_PASSWORD: verified_tabs.add(event) current_active_tab = event window["-TAB_GROUP-"].set_current_tab(event) else: sg.popup("密码错误,无法访问该Tab", title="验证失败") window["-TAB_GROUP-"].set_current_tab(current_active_tab) if event == "公开测试按钮": sg.popup("你点击了公开Tab的按钮") window.close()
核心逻辑说明
- 通过
sg.TabGroup的set_current_tab方法控制Tab的切换。 - 用
current_active_tab记录当前显示的Tab,确保密码错误时能切回原Tab。 - 优化版中
verified_tabs集合用于存储已通过验证的Tab key,避免重复验证。 - 密码输入框使用
popup_get_text并设置password_char="*"隐藏输入内容,提升安全性。
内容的提问来源于stack exchange,提问作者PyiPath2022
相关产品推荐
相关产品推荐

