python: Treeview Control binding data using tkinter and ttkbootstrap GUI

 

pip install matplotlib
pip install numpy
pip install statsmodels

 

"""
StudentUI.py
读文件类
date 2023-06-24
edit: Geovin Du,geovindu, 涂聚文
ide:  PyCharm 2023.1 python 11

"""

import datetime
import sys
import os
from tkinter import ttk
from tkinter import *
from tkinter.ttk import *
from ttkbootstrap import Style  # pip install ttkbootstrap
import random
import Model.StudentListInfo

class StudentUi(object):

    global tree
    def __del__(self):
        self.name="geovindu"

    def delete():
        global tree
        tree.delete(tree.selection())

    def main():

        geovindu = list()
        geovindu.append(Model.StudentListInfo.StudentList(1, '王二', '002', datetime.datetime(2008, 2, 14, 0, 0)))
        geovindu.append(Model.StudentListInfo.StudentList(2, '涂年生', '003', datetime.datetime(2008, 2, 14, 0, 0)))
        geovindu.append(Model.StudentListInfo.StudentList(3, '涂聚文', '004', datetime.datetime(2008, 2, 14, 0, 0)))
        geovindu.append(Model.StudentListInfo.StudentList(4, '赵三', '001', datetime.datetime(2008, 2, 14, 0, 0)))
        geovindu.append(Model.StudentListInfo.StudentList(5, '李四', '005', datetime.datetime(2008, 2, 14, 0, 0)))

        style=Style(theme='darkly') #定义窗口样式
        window=style.master
        window.title("学生管理")
        # win = Tk()
        screenWidth = window.winfo_screenwidth()
        screenHeight = window.winfo_screenheight()
        width=100
        height=600
        x=int((screenWidth-width)/2)
        y=int((screenHeight-height)/2)
        window.geometry('{}x{}+{}+{}'.format(width,height,x,y))
        #Treeview 控件
        tree=ttk.Treeview(master=window,style='success.Treeview',height=25,show='headings')
        tree.pack()
        #定义列
        tree['columns']=("StudentId","StudentName","StudentNO","StudentBirthday")
        #设置列属性,列不显示
        tree.column("StudentId",width=150,minwidth=100,anchor=S)
        tree.column("StudentName", width=150, minwidth=100, anchor=S)
        tree.column("StudentNO", width=150, minwidth=100, anchor=S)
        tree.column("StudentBirthday", width=150, minwidth=100, anchor=S)
        #设置表头
        tree.heading("StudentId",text="序号")
        tree.heading("StudentName", text="姓名")
        tree.heading("StudentNO", text="学号")
        tree.heading("StudentBirthday", text="出生日期")
        #treeView控件绑定数据
        i=1
        for Model.StudentListInfo.StudentList in geovindu:
            tree.insert("",i,text="2",values=(Model.StudentListInfo.StudentList.getStudentId(),Model.StudentListInfo.StudentList.getStudentName(),Model.StudentListInfo.StudentList.getStudentNO(),Model.StudentListInfo.StudentList.getStudentBirthday()))
            i+=1
        #删除按钮
        ttk.Button(window,text="del",style='success,TButton',command=StudentUi.delete).pack(side='left',padx=5,pady=10)
        window.mainloop()

  

"""
StudentUI.py
读文件类
date 2023-06-24
edit: Geovin Du,geovindu, 涂聚文
ide:  PyCharm 2023.1 python 11

"""

import datetime
import sys
import os
from tkinter import ttk
from tkinter import *
from tkinter.ttk import *
from ttkbootstrap import Style  # pip install ttkbootstrap
import random
import Model.StudentListInfo
import BLL.StudentListBLL

class StudentUi(object):

    global tree
    stubll = BLL.StudentListBLL.StudentBll()

    def __init__(self):
        self.name="geovindu"

    def __del__(self):
        print(f"{self.name}")

    def delete(cls):
        #global tree
        curItem = cls.tree.focus()
        val=cls.tree.item(curItem)['values'][0]  #id
        print(val)
        print(cls.tree.selection())
        cls.tree.delete(cls.tree.selection())
        cls.stubll.delSql(val)  #需要删除关联的数据才可以删除

        #cls.stubll.delSql()

    def treeview_sort_column(cls,tv, col, reverse):
        """
        Treeview、列名、排列方式
        :param tv: Treeview 控件
        :param col:  列名
        :param reverse:
        :return:
        """
        l = [(tv.set(k, col), k) for k in tv.get_children('')]
        # print(tv.get_children(''))
        l.sort(reverse=reverse)  # 排序方式
        # rearrange items in sorted positions
        for index, (val, k) in enumerate(l):  # 根据排序后索引移动
            tv.move(k, '', index)
            # print(k)
        tv.heading(col, command=lambda: cls.treeview_sort_column(
            tv, col, not reverse))  # 重写标题,使之成为再点倒序的标题

    def main(cls):
        """
        窗体绑定数据
        :return:
        """
        #stubll = BLL.StudentListBLL.StudentBll()
        geovindu =cls.stubll.selectSqlOrder("StudentNO asc") # list()

        style=Style(theme='darkly') #定义窗口样式
        window=style.master
        window.title("学生管理")
        # win = Tk()
        screenWidth = window.winfo_screenwidth()
        screenHeight = window.winfo_screenheight()
        width=800
        height=600
        x=int((screenWidth-width)/2)
        y=int((screenHeight-height)/2)
        window.geometry('{}x{}+{}+{}'.format(width,height,x,y))
        #Treeview 控件
        cls.tree=ttk.Treeview(master=window,style='success.Treeview',height=25,show='headings')
        cls.tree.pack()
        #定义列
        cls.tree['columns']=("StudentId","StudentName","StudentNO","StudentBirthday","Age")
        #设置列属性,列不显示
        cls.tree.column("StudentId",width=150,minwidth=100,anchor=S)
        cls.tree.column("StudentName", width=150, minwidth=100, anchor=S)
        cls.tree.column("StudentNO", width=150, minwidth=100, anchor=S)
        cls.tree.column("StudentBirthday", width=150, minwidth=100, anchor=S)
        cls.tree.column("Age", width=150, minwidth=100, anchor=S)
        #设置表头
        cls.tree.heading("StudentId",text="序号")
        cls.tree.heading("StudentName", text="姓名")
        cls.tree.heading("StudentNO", text="学号")
        cls.tree.heading("StudentBirthday", text="出生日期")
        cls.tree.heading("Age", text="年龄")

        #删除按钮
        #ttk.Button(window,text="删除",style='success,TButton',command=cls.delete).pack(side='left',padx=5,pady=10)

        #Button(window, text='添加', bg='yellow', width=20).pack(side=LEFT)
        #Button(window, text='删除', bg='pink', width=20, command=cls.delete).pack(side=LEFT)

        #treeView控件绑定数据
        i=1
        for Model.StudentListInfo.StudentList in geovindu:
            cls.tree.insert("",i,text="2",values=(Model.StudentListInfo.StudentList.getStudentId(),Model.StudentListInfo.StudentList.getStudentName(),Model.StudentListInfo.StudentList.getStudentNO(),Model.StudentListInfo.StudentList.getStudentBirthday(),Model.StudentListInfo.StudentList.getAge()))
            i+=1


        columnnames=("序号","姓名","学号","出生日期","年龄")
        print(cls.tree["columns"])
        duindex=0
        # 控件treeview点击标题排序
        for col in cls.tree["columns"]:  # 给所有标题加cls.tree["columns"]
            cls.tree.heading(
                col,
                text=columnnames[duindex],  #中文名称
                command=lambda _col=col: cls.treeview_sort_column(
                    cls.tree, _col, False
                ),
            )
            duindex+=1

        vbar = ttk.Scrollbar(window, orient="vertical", command=cls.tree.yview)
        cls.tree.configure(yscrollcommand=vbar.set)
        cls.tree.grid(row=1, column=0, sticky="news")
        vbar.grid(row=1, column=1, sticky="ns")


        window.mainloop()

  

输出:

 

posted @ 2023-06-24 15:09  ®Geovin Du Dream Park™  阅读(94)  评论(0)    收藏  举报