You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Tkinter创建含框架的下拉控件?仿Windows更新UI实现

用Tkinter实现Windows更新风格的可折叠UI

Tkinter没有现成的带复杂内容的下拉控件,但可以通过自定义Frame组件实现这种可展开/折叠的面板效果,核心思路是把每个可折叠项拆成标题栏和内容区域,通过按钮控制内容区域的显示/隐藏。

实现步骤与代码示例

下面是完整的可运行代码,模拟Windows更新界面的核心功能:

import tkinter as tk
from tkinter import ttk

# 自定义可折叠面板组件
class CollapsibleFrame(tk.Frame):
    def __init__(self, parent, title="", *args, **kwargs):
        super().__init__(parent, *args, **kwargs)
        
        # 标题栏:包含标题文本和折叠按钮
        self.title_frame = ttk.Frame(self)
        self.title_frame.pack(fill="x", padx=5, pady=2)
        
        self.title_label = ttk.Label(self.title_frame, text=title, font=('Arial', 10, 'bold'))
        self.title_label.pack(side="left", padx=5, pady=3)
        
        self.toggle_btn = ttk.Button(self.title_frame, text="▼", width=2, command=self.toggle)
        self.toggle_btn.pack(side="right", padx=5, pady=3)
        
        # 内容区域:初始隐藏
        self.content_frame = ttk.Frame(self)
        self.content_frame.pack(fill="x", padx=5, pady=0)
        self.content_frame.pack_forget()
        
        self.is_expanded = False
        
    # 切换展开/折叠状态
    def toggle(self):
        if self.is_expanded:
            self.content_frame.pack_forget()
            self.toggle_btn.config(text="▼")
        else:
            self.content_frame.pack(fill="x", padx=5, pady=0)
            self.toggle_btn.config(text="▲")
        self.is_expanded = not self.is_expanded

# 主窗口
if __name__ == "__main__":
    root = tk.Tk()
    root.title("Windows 更新")
    root.geometry("650x450")
    root.resizable(False, False)
    
    # 模拟更新列表
    # 第一个更新项
    update_item1 = CollapsibleFrame(root, title="2024-05 累积更新 for Windows 11 版本22H2 (KB5037768)")
    update_item1.pack(fill="x", padx=15, pady=8)
    
    # 内容区:左侧说明 + 右侧操作按钮
    content1 = ttk.Frame(update_item1.content_frame)
    content1.pack(fill="x", pady=8)
    
    ttk.Label(content1, text="此更新包含关键安全修复和系统稳定性改进,建议优先安装。").pack(side="left", padx=10, pady=12)
    ttk.Button(content1, text="下载并安装").pack(side="right", padx=10, pady=12)
    
    # 第二个更新项
    update_item2 = CollapsibleFrame(root, title="2024-04 .NET Framework 安全更新 (KB5036987)")
    update_item2.pack(fill="x", padx=15, pady=8)
    
    content2 = ttk.Frame(update_item2.content_frame)
    content2.pack(fill="x", pady=8)
    
    ttk.Label(content2, text="修复.NET Framework中的多个远程代码执行漏洞,提升应用安全性。").pack(side="left", padx=10, pady=12)
    ttk.Button(content2, text="下载并安装").pack(side="right", padx=10, pady=12)
    
    # 已安装的更新项
    update_item3 = CollapsibleFrame(root, title="2024-03 可选功能更新 (KB5035853) - 已安装")
    update_item3.pack(fill="x", padx=15, pady=8)
    
    content3 = ttk.Frame(update_item3.content_frame)
    content3.pack(fill="x", pady=8)
    
    ttk.Label(content3, text="已成功安装此可选更新,包含新的系统主题和功能优化。").pack(side="left", padx=10, pady=12)
    ttk.Button(content3, text="卸载").pack(side="right", padx=10, pady=12)
    
    root.mainloop()

关键说明

  • 自定义CollapsibleFrame:封装了折叠逻辑,点击标题栏按钮即可切换内容区域的显示状态
  • 内容区域自由布局:每个折叠项的内容区可以添加任意Tkinter控件,示例中用side="left"和side="right"实现了文本与右侧按钮的排版
  • 样式调整:可以通过ttk的Style类修改控件外观,比如按钮颜色、标题字体,让界面更贴近Windows原生风格

内容的提问来源于stack exchange,提问作者Shakir

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 13:13:19