Tkinter创建列表使用方法

news2024/10/7 6:39:51

前言

  ttk.Treeview 是 Tkinter 模块中的一个组件,它提供了一个可用于显示层次结构数据的树状列表。它具有以下特点和功能:

  1. 显示层次结构:ttk.Treeview支持以树状结构显示数据。每个节点可以有子节点,从而形成层次结构。用户可以展开或折叠节点来查看或隐藏子节点。
  2. 列表视图:ttk.Treeview 还支持以列表形式显示数据,类似于表格。每列可以定义不同的字段,并显示相应的数据。
  3. 多列支持:你可以通过在 ttk.Treeview 初始化时指定 columns 参数来创建多个列。每列可以有自己的标题和宽度。
  4. 数据绑定:ttk.Treeview 可以与数据源绑定,使数据的插入、删除和编辑更加方便。你可以使用 insert 方法向ttk.Treeview 中插入数据,使用 delete 方法删除数据,使用 set 方法更新数据。
  5. 样式定制:你可以通过设置样式、字体、颜色等来定制 ttk.Treeview的外观。也可以为不同的行、单元格设置样式或标签,以实现自定义效果。
  6. 事件处理:你可以为 ttk.Treeview组件绑定各种事件处理程序,例如单击、双击、选择变化等。通过处理这些事件,你可以响应用户的操作,并执行相关的逻辑。

ttk.Treeview 是 Tkinter 中非常强大和灵活的组件,可用于创建各种复杂的层次结构列表和数据展示界面。你可以根据自己的需求来配置和使用 ttk.Treeview,以实现定制的树状列表功能。

一、方法

import tkinter as tk
from tkinter import ttk


class GUI:

    def __init__(self):
        self.root = tk.Tk()
        self.root.title('演示窗口')
        self.root.geometry("600x380+1100+150")
        self.interface()

    def interface(self):
        """"界面编写位置"""
        pass


if __name__ == '__main__':
    a = GUI()
    a.root.mainloop()

1、创建列表和数据并设置样式

    def interface(self):
        """"界面编写位置"""
        # (1)创建样式
        style = ttk.Style()
        style.configure("Treeview", rowheight=20)  # 设置行高
        style.configure("Treeview.Heading", font=('Arial', 11, 'bold'))  # 设置表头字体

        # (2)创建 Treeview 控件,设置高度为10行
        self.tree = ttk.Treeview(self.root, height=10, style="Treeview")
        self.tree.grid(row=0, column=0, rowspan=10, columnspan=10, padx=60)

        # (3)定义列名
        self.tree["columns"] = ("Name", "Age", "City")

        # (4)设置列的标题名称,anchor可设置对其方式:居中(center)/左对齐(w)/右对齐(e),无anchor参数时,标题名称默认居中
        self.tree.heading("#0", text="序号", anchor="w")
        self.tree.heading("Name", text="姓名")
        self.tree.heading("Age", text="年龄")
        self.tree.heading("City", text="城市")

        # (5)设置列宽度(像素),无anchor参数时,列表中的数据除(#0)外其余都是默认左对齐
        self.tree.column("#0", width=50)
        self.tree.column("Name", width=100, anchor="center")
        self.tree.column("Age", width=90, anchor="center")
        self.tree.column("City", width=150, anchor="center")

        # (6)插入默认数据
        self.tree.insert("", tk.END, text="1", values=("张三", "25", "深圳"))

在这里插入图片描述

解释:

  1. 创建样式:首先创建了一个ttk.Style()对象,并通过configure方法设置了列表的行高和表头字体样式。
  2. 创建 Treeview 控件:调用 ttk.Treeview 构造函数创建了一个名为 self.tree 的 Treeview控件,并将其放置在父窗口 self.root 的网格布局中,位置为第一行/列,跨越10个行/列,左右留有60像素的边距。
  3. 定义列名:通过设置 self.tree[“columns”] 属性,定义了一个包含三个列的列表,列名分别为 “Name”、“Age” 和"City"。
  4. 设置列的标题名称:通过调用 self.tree.heading 方法,设置了每个列的标题名称。其中,“#0” 是默认的索引列,标题文本为"序号",对齐方式为左对齐;“Name” 列的标题为 “姓名”,没有指定对齐方式,默认居中对齐;“Age” 列的标题为 “年龄”,没有指定对齐方式,默认居中对齐;“City” 列的标题为 “城市”,没有指定对齐方式,默认居中对齐。
  5. 设置列宽度:通过调用 self.tree.column 方法,设置了每个列的宽度。“#0” 列宽度为 50 像素,“Name” 列宽度为100 像素,“Age” 列宽度为 90 像素,“City” 列宽度为 150 像素。在数据列中,除了 "#0"列是默认左对齐外,其他列的数据默认居中对齐。
  6. 插入默认数据:通过调用 self.tree.insert 方法,在 Treeview 中插入了一条数据行。这里插入了一个索引为 "1"的数据行,该行包含了姓名、年龄和城市信息。

2、获取列表数据

    def interface(self):
        """"界面编写位置"""
        # (1)创建样式......
        # (2)创建 Treeview 控件......
        # (3)定义列名......
        # (4)设置列的标题名称......
        # (5)设置列宽度(像素)......
        # (6)插入默认数据
        self.tree.insert("", tk.END, text="1", values=("张三", "25", "深圳"))
        self.tree.insert("", tk.END, text="2", values=("王五", "30", "上海"))

        # 创建按钮
        self.Button0 = tk.Button(self.root, text="获取数据", command=self.get_data)
        self.Button0.grid(row=11, column=0, ipadx=10)

        self.Button1 = tk.Button(self.root, text="获取全部数据", command=self.get_whole_data)
        self.Button1.grid(row=11, column=2, ipadx=10)
        # 添加文本框
        self.Label0 = tk.Label(self.root, text="打印日志:")
        self.Label0.grid(row=12, column=0, padx=60)
        self.w1 = tk.Text(self.root, width=50, height=5)
        self.w1.grid(row=13, column=0, columnspan=5, padx=60)

    def get_data(self):
        '''获取选中数据'''
        selected_items = self.tree.selection()
        if selected_items:
            for item in selected_items:
                row_data = self.tree.item(item)['values']
                self.w1.insert("1.0", f"Selected Row Data:{row_data}\n")
        else:
            self.w1.insert("1.0", "未选中数据\n")

    def get_whole_data(self):
        '''获取全部数据'''
        rows = self.tree.get_children()  # 获取所有的行ID
        # 遍历每一行
        for row in rows:
            # 获取该行的数据字典
            data = self.tree.item(row)
            self.w1.insert("1.0", f"{data['values']}\n")

在这里插入图片描述

3、添加、编辑、删除

import tkinter as tk
from tkinter import ttk
from tkinter import messagebox


class GUI:

    def __init__(self):
        self.root = tk.Tk()
        self.root.title('演示窗口')
        self.root.geometry("600x380+1100+150")
        self.interface()

    def interface(self):
        """"界面编写位置"""
        # (1)创建 Treeview 控件, 设置高度为10行
        self.tree = ttk.Treeview(self.root, height=10)
        self.tree.grid(rowspan=10, columnspan=10, padx=30)
        # (2)定义列名
        self.tree["columns"] = ("Name", "Age", "City")
        # (3)设置列的标题名称
        self.tree.heading("#0", text="序号", anchor="w")
        self.tree.heading("Name", text="姓名")
        self.tree.heading("Age", text="年龄")
        self.tree.heading("City", text="城市")
        # (4)设置列宽度(像素)
        self.tree.column("#0", width=50)
        self.tree.column("Name", width=100, anchor="center")
        self.tree.column("Age", width=90, anchor="center")
        self.tree.column("City", width=150, anchor="center")
        # (5)插入默认数据
        self.tree.insert("", tk.END, text="1", values=("张三", "25", "深圳"))
        # 创建按钮
        self.Button0 = tk.Button(self.root, text="添加", command=self.add_page)
        self.Button0.grid(row=11, column=1, ipadx=10)
        self.Button1 = tk.Button(self.root, text="编辑", command=self.edit_page)
        self.Button1.grid(row=11, column=3, ipadx=10)
        self.Button2 = tk.Button(self.root, text="删除", command=self.delete_item)
        self.Button2.grid(row=11, column=5, ipadx=10)

    def add_page(self):
        self.Label0 = tk.Label(self.root, text="姓名")
        self.Label0.grid(row=0, column=11)

        self.entry00 = tk.StringVar()
        self.entry0 = tk.Entry(self.root, textvariable=self.entry00, width=15)
        self.entry0.grid(row=1, column=11)

        self.Label1 = tk.Label(self.root, text="年龄")
        self.Label1.grid(row=2, column=11)

        self.entry01 = tk.StringVar()
        self.entry1 = tk.Entry(self.root, textvariable=self.entry01, width=15)
        self.entry1.grid(row=3, column=11)

        self.Label02 = tk.Label(self.root, text="城市")
        self.Label02.grid(row=4, column=11)

        self.entry02 = tk.StringVar()
        self.entry2 = tk.Entry(self.root, textvariable=self.entry02, width=15)
        self.entry2.grid(row=5, column=11)

        self.Button_1 = tk.Button(self.root, text="确定", command=self.add_item)
        self.Button_1.grid(row=6, column=11, ipadx=10)

    def add_item(self):
        '''添加数据'''
        rows = self.tree.get_children()  # 获取所有的行ID
        name = self.entry00.get()
        age = self.entry01.get()
        city = self.entry02.get()
        if name and age and city:
            self.tree.insert("", tk.END, text=len(rows)+1, values=(name, age, city))
        else:
            self.Button_1.bind("<Button-1>", self.window("输入框不可以为空"))

    def edit_page(self):
        selected_items = self.tree.selection()
        if selected_items:
            for item in selected_items:
                row_data = self.tree.item(item)['values']

                self.Label0 = tk.Label(self.root, text="姓名")
                self.Label0.grid(row=0, column=11)

                self.entry00 = tk.StringVar()
                self.entry00.set(row_data[0])
                self.entry0 = tk.Entry(self.root, textvariable=self.entry00, width=15)
                self.entry0.grid(row=1, column=11)

                self.Label1 = tk.Label(self.root, text="年龄")
                self.Label1.grid(row=2, column=11)

                self.entry01 = tk.StringVar()
                self.entry01.set(row_data[1])
                self.entry1 = tk.Entry(self.root, textvariable=self.entry01, width=15)
                self.entry1.grid(row=3, column=11)

                self.Label02 = tk.Label(self.root, text="城市")
                self.Label02.grid(row=4, column=11)

                self.entry02 = tk.StringVar()
                self.entry02.set(row_data[2])
                self.entry2 = tk.Entry(self.root, textvariable=self.entry02, width=15)
                self.entry2.grid(row=5, column=11)

                self.Button_1 = tk.Button(self.root, text="确定", command=self.edit_item)
                self.Button_1.grid(row=6, column=11, ipadx=10)
        else:
            self.Button1.bind("<Button-1>", self.window("未选中数据"))

    def edit_item(self):
        '''编辑数据'''
        selected_item = self.tree.selection()
        name = self.entry00.get()
        age = self.entry01.get()
        city = self.entry02.get()
        if name and age and city:
            self.tree.item(selected_item, values=(name, age, city))
        else:
            self.Button_1.bind("<Button-1>", self.window("输入框不可以为空"))

    def delete_item(self):
        '''删除数据'''
        selected_item = self.tree.selection()
        if selected_item:
            self.tree.delete(selected_item)
        else:
            self.Button2.bind("<Button-1>", self.window("未选中数据"))

    def window(e, text):
        '''创建弹窗'''
        messagebox.showinfo("提示", text)


if __name__ == '__main__':
    a = GUI()
    a.root.mainloop()

在这里插入图片描述

4、隐藏默认的索引列

    def interface(self):
        """"界面编写位置"""
        # 创建 Treeview 控件;设置高度为10行;只显示列名行,隐藏索引列
        self.tree = ttk.Treeview(self.root, height=10, show="headings")
        self.tree.grid(row=0, column=0, rowspan=10, columnspan=10, padx=60)
        # 定义列名
        self.tree["columns"] = ("Name", "Age", "City")
        # 设置列的标题名称
        self.tree.heading("Name", text="姓名")
        self.tree.heading("Age", text="年龄")
        self.tree.heading("City", text="城市")
        # 设置列宽度(像素)
        self.tree.column("Name", width=100, anchor="center")
        self.tree.column("Age", width=90, anchor="center")
        self.tree.column("City", width=150, anchor="center")
        # 插入默认数据
        self.tree.insert("", tk.END, values=("张三", "25", "深圳"))

在这里插入图片描述

持续更新中…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/679744.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

GPT-2源码实现及GPT-3、GPT-3.5、GPT-4及GPT-5内幕解析(三)

GPT-2源码实现及GPT-3、GPT-3.5、GPT-4及GPT-5内幕解析(三) 5.3 GPT-3 内幕机制可视化解析 GPT-3是一个基于Transformer的语言模型,通过不同的层次提取语言不同层面的特性,构建整个语言的语义信息,它学习的过程跟人类正常学习的过程是类似的,开始的时候是一个无监督预训练…

材料表面与界面 关键概念介绍

目录 1. Conductivity and two general modes of charge transport in solid-state materials (Fig. 1b) 2. What is Bravais lattice, what is basis and what is crystal lattice (Fig. 2). The differences between five possible Bravais lattices in two dimensions (Fi…

【计算机毕设系统项目说明】VB+ACCESS采购管理系统开发(论文+系统+答辩PPT+封面)

大家好&#xff0c;这里是小伙整理的VB项目系列&#xff0c;大家可以用于自己的课设Q或毕设&#xff0c;需要的可自取。 项目包含内容 项目包含&#xff1a; 项目源码 论文 答辩PPT 其他相关 截图&#xff1a; 库存管理软件说明 一.系统设置 1&#xff09; 锁定&#xff1…

2023考研一战上岸 电子科技大学 860软件工程 经验分享

目录 1. 前言&#xff1a;考研&#xff0c;心态最重要&#xff01; 2. 初试各科复习经验 (1) 数学一 (2) 英语一 (3) 专业课 (4) 政治 (5) 四门课时间划分 3. 复试流程和备考建议 (1) 复试流程 (2) 备考建议 4. 结语 首先&#xff0c;先简要做一个自我介绍&#xff…

记录:Qt Creator 10配置安卓开发环境

Qt Creator 现在的安卓开发环境配置相比老版本方便了不少&#xff0c;本文以目前在线安装版的 Qt Creator 10.0.2 Qt 5.15 / Qt 6.5 为例做演示&#xff08;有些文件可能会因为网络问题需要科学上网才能下载&#xff09;。 1.下载 JDK 11 https://adoptium.net/zh-CN/temuri…

MATLAB 之 对话框设计

这里写目录标题 一、对话框设计1. 控件的种类及作用2. 控件的操作2.1 建立控件对象2.2 控件对象的基本控制属性2.3 建立控件对象举例 一、对话框设计 对话框是用户与计算机进行信息交流的临时窗口&#xff0c;在现代软件中有着广泛的应用。在软件设计时&#xff0c;借助于对话…

分治、贪心专题

分治、贪心专题 分治篇LeetCode 241. 为运算表达式设计优先级解题思路代码实现总结 不要纠结&#xff0c;干就完事了&#xff0c;熟练度很重要&#xff01;&#xff01;&#xff01;多练习&#xff0c;多总结&#xff01;&#xff01;&#xff01; 分治篇 LeetCode 241. 为运算…

夏驰和徐策的大学英语四六级备考

一、今日单词&#xff1a; 1.anxiety 中文意思是"焦虑"或"忧虑"。它通常用来描述一种内心的不安、紧张或担忧感。"anxiety"可以指个人的情绪状态&#xff0c;也可以指一种心理疾病或临床诊断。 以下是一些关于"anxiety"的用法和例…

3DMAX样条线轮廓修改器插件SplineOffset使用方法详解

SplineOffset 是 3dMax 的修改器&#xff0c;可创建样条曲线的多个克隆&#xff0c;并可选择增量增加或减少偏移、平移和旋转。在许多方面&#xff0c;它类似于 3ds Max 的内置阵列工具与样条线偏移功能相结合&#xff0c;但有两个主要优点&#xff1a;首先&#xff0c;SplineO…

Spring Framework 6 中的设计模式

文章目录 1、简介2、单例模式&#xff08;Singleton Pattern&#xff09;2.1 单例 Beans&#xff08;Singleton Beans&#xff09;2.2 自动注入单例&#xff08;Autowired Singletons&#xff09; 3、工厂方法模式&#xff08;Factory Method Pattern&#xff09;3.1 应用上下文…

【课程笔记】分布式计算系统 徐辰

分布式计算系统笔记 课程介绍 课程背景 大数据处理系统——> 分布式计算系统 Hadoop&#xff0c;Spark&#xff0c;Flink大数据涵义过于宽泛 本课程/教材 强调系统设计、原理、编程的集合 课程目的 培养系统思维 应用层&#xff1a;搜索、推荐算法设计层&#xff1a…

work 6.24

1、grep&#xff1a;查找字符串 grep 字符串 文件名 -w:按单词查找 -R:实现递归查找&#xff0c;主要用于路径是目录的情况 -i:不区分大小写 -n:显示行号 grep -w "^ubuntu" /etc/passwd ---->查找以ubuntu单词作为开头位置的所在行 grep -w "ubuntu$"…

使用frp实现内网穿透

本篇博客最早发布于实验室公共博客&#xff0c;但已无人维护&#xff0c;现迁移至个人博客 引言 一打五师兄走之前留了一块树莓派给我&#xff0c;暑假闲来无事拿出来玩玩 如果每次都连接显示屏和键盘使用有点麻烦而且低级 正常笔记本和树莓派都连着实验室的WIFI&#xff0c…

【人工智能概论】 PyTorch中的topk、expand_as、eq方法

【人工智能概论】 PyTorch中的topk、expand_as、eq方法 文章目录 【人工智能概论】 PyTorch中的topk、expand_as、eq方法一. topk方法1.1 简介1.2 参数详解 二. expand_as方法三. eq方法 一. topk方法 1.1 简介 对PyTorch中的tensor类型的数据都存在topk方法&#xff0c;其功…

【Java高级语法】(十四)函数式接口:与Lambda表达式共舞:探索Java函数式接口,赋予程序员更强大的编程能力!~

Java高级语法详解之函数式接口 1️⃣ 概念2️⃣ 优势和缺点3️⃣ 使用3.1 函数式接口定义3.2 函数式接口实战3.3 使用技巧 4️⃣ 内置函数式接口5️⃣ 应用场景&#x1f33e; 总结 1️⃣ 概念 Java函数式接口起源于Java 8版本中的Lambda表达式和函数式编程特性的引入。在之前的…

Vue基础(二)

Vue组件 组件化是Vue.js中的重要思想 它提供了一种抽象&#xff0c;让我们可以开发出一个个独立可复用的小组件来构造我们的应用。 任何的应用都会被抽象成一颗组件树。 注册组件 <body> <div id"app"> <!--3、使用组件--><my-cpn></m…

C语言小游戏——猜数字

猜数字游戏是一种简单而有趣的游戏&#xff0c;玩家需要根据提示猜出一个随机数。 //游戏菜单 void menu() {printf("*********************\n");printf("* 1.play *\n");printf("* 0.exit *\n");printf("********…

一道北大强基题背后的故事(五)——解数学题的数学模型是什么?

早点关注我&#xff0c;精彩不错过&#xff01; 上回说到&#xff0c;数学之美&#xff0c;美在作为一个工具的通用性&#xff0c;艺术追求和思维游戏&#xff0c;相关内容请戳&#xff1a; 一道北大强基题背后的故事&#xff08;四&#xff09;——数学之美&#xff0c;美在哪…

详解sentinel使用

目录 1.概述 2.下载安装 3.应用托管 4.流量控制 4.1.流控规则 4.2.流控模式 4.2.1.直接模式 4.2.2.关联模式 4.2.3.链路模式 4.3.流控效果 4.3.1.预热 4.3.2.排队等待 5.降级 5.1.降级规则 5.2.降级策略 5.2.1.RT 5.2.2.异常比例 5.2.3.异常数 1.概述 senti…

CentOS7设置nginx服务开机自启【开机自启】

方法一&#xff1a;使用Systemd 1.创建服务单元文件 sudo vi /etc/systemd/system/nginx.service2.编辑配置文件 [Unit] DescriptionThe NGINX HTTP and reverse proxy server Aftersyslog.target network.target[Service] Typeforking ExecStartPre/usr/sbin/nginx -t Exec…