在上一篇博客中,我们熟练使用tkinter模块提供的碎片化分区域Frame控件,和TreeView树状图控件对于文件管理系统进行了实现。但我并未用到右侧模块中Text大文本区域显示内容,在本篇博客中,我将依然使用上篇博客的布局,结合之前学过的Excel表格的读写操作,将Excel表格中的内容,展示在tkinter界面当中。
需求:
将Excel表格数据展示在可视化界面中,如下图所示:
观察上图,可以发现在excel表格中,有三个sheet页面,分别是唐诗,宋词,元曲。后两个sheet存储数据的结构和唐诗相似,这里就不一一截图说明了。在唐诗表格中,有效数据共有4列,分别表示编号,古诗名,作者信息,诗词内容四项,共10行数据。
那么,如何将这些信息展示在可视化界面当中呢?我们来看一下效果图:
在TreeView当中包括3个分支,对应表格中的3个sheet,然后每个分支中又将对应的sheet表格每一行的故事名作为二级分支名称。然后选中古诗,会在右侧部分Text中显示具体内容,在Entry中显示古诗名称。
涉及的知识点:
- Tkinter常见控件的基本使用,其中涉及到的控件有:Label,Entry,TreeView等
- 摆放控件可使用相对布局,或者绝对布局以及表格布局
- 界面布局内容比较多时,可以使用Frame划分区域
实现功能代码:如图所示分为左右两个部分,所以我们使用Frame进行划分左右两个区域。
右边区域的代码与上一篇博客相似,并不需要改变太多。
import tkinter
class InfoWindow(tkinter.Frame):
def __init__(self,master):
frame = tkinter.Frame(master)
frame.grid(row=0,column=1)
self.var = tkinter.Variable()
self.entry = tkinter.Entry(frame,textvariable=self.var)
self.entry.pack()
self.txt = tkinter.Text(frame)
self.txt.pack()
左边区域要在上一篇基础上添加excel表格的读取与展示。
import tkinter
from tkinter import ttk
class TreeWindow(tkinter.Frame):
def __init__(self,master,dic_data,otherwin):
frame = tkinter.Frame(master)
frame.grid(row=0,column=0)
self.otherwin = otherwin
# 存放sheet名称的列表
self.sheetlist = []
self.treeview = ttk.Treeview(frame)
self.treeview.pack(side=tkinter.LEFT)
#数据有了插入树枝
for sheetname,valueslist in dic_data.items():
root = self.treeview.insert("",'end',text=sheetname,values=(valueslist))
self.sheetlist.append(sheetname)
valueslist.pop(0) #弹出列表当中的指定角标对应的数据
for value in valueslist:
if len(value)!=0:
treeroot = self.treeview.insert(root,'end',text=value[1],values=(value))
#设置一个滚动条
self.sy = tkinter.Scrollbar(frame)
self.sy.pack(side = tkinter.RIGHT,fill = tkinter.Y)
self.sy.config(command = self.treeview.yview)
self.treeview.config(yscrollcommand=self.sy.set)
#绑定树枝的选中事件
self.treeview.bind('<<TreeviewSelect>>',self.changeRightwin)
def changeRightwin(self,event):
#获取到选中
self.v = event.widget.selection()
for sv in self.v:
poemname = self.treeview.item(sv)['text']
self.otherwin.var.set(poemname)
if poemname not in self.sheetlist:
content = self.treeview.item(sv)['values']
self.otherwin.txt.delete(0.0,tkinter.END) #删除原来的内容
str = '\n\n'+content[1]+'\n\n'+content[2]+'\n\n'+content[3]
self.otherwin.txt.insert(tkinter.INSERT,str)
然后在新建py文件,将左边和右边的模块进行整合放置。调用对应方法,传入需求信息。
import tkinter
import pyexcel_xls
from infoWindow import InfoWindow
from treeWindow import TreeWindow
import os
if __name__ == '__main__':
win = tkinter.Tk()
win.title('文学鉴赏')
win.geometry('800x400')
#创建菜单栏
menubar = tkinter.Menu(win)
win.configure(menu = menubar)
#在菜单栏当中创建选项
menu1 = tkinter.Menu(menubar,tearoff = False)
menu1.add_command(label='退出',command = win.quit)
menubar.add_cascade(label='设置',menu = menu1)
path = os.path.join(os.getcwd(),'poem.xls')
dic_data = pyexcel_xls.get_data(path)
#{'唐诗':[[1,'静夜思','李白','举头望明月,低头思故乡'],[1,'静夜思','李白','举头望明月,低头思故乡']......],
# '宋词':[[],[],[]...],'元曲':[[],[],[]...]}
infowin = InfoWindow(win)
treewin = TreeWindow(win,dic_data,infowin)
win.mainloop()
在这篇博客中,我们引入了tkinter中menu的使用。结合自动化办公的知识点,进一步理解了使用tkinter模块完成python GUI可视化页面的功能。然后运行就能看到效果了。
相关代码下载地址:https://download.csdn.net/download/u012156341/11140900
感谢您的阅读!