Python GUI项目:古诗词鉴赏系统

在上一篇博客中,我们熟练使用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

感谢您的阅读!

猜你喜欢

转载自blog.csdn.net/u012156341/article/details/89488414