使用tkinter实现书摘GUI小程序(part2:主界面)

接上回:
  前几天准备复习和考试拖延了,现在继续更新。如有建议和疑问,欢迎在评论区提出。

注:图片素材来源于网络

其它部分:

part1:登录界面

效果图及介绍

效果图

主界面整体分为上下两个部分
  上部分显示书目及分类的添加和删除,书目增多后可以拖动右侧滚动条查看。
  下部分三个按钮分别为:
增加分类,句读(即摘抄好句),记录随笔

(三个按钮的的实现放在下个文章)

必要说明:
  建立主界面后不可关闭登陆界面(win),否则主界面会被强制关闭

代码实现与说明

from tkinter import *
from tkinter.ttk import Separator
from tkinter.ttk import *
from PIL import Image,ImageTk 

win = Tk()
win.title("书阁")   
win.geometry("300x310")

#建立标题
label_title1=Label(win,justify="center",text="                     书  阁 ",font = "Helvetica 15 bold ")
label_title1.grid(row=0,column=0,columnspan=3,sticky=W+E)
#插入标题与图片的分割线
sep=Separator(win,orient=HORIZONTAL)
sep.grid(row=1,column=1,columnspan=3,sticky=W+E,pady=5)
#插入图片(提示:把图片和.py文件放在 同一个文件夹中才能显示)
bkgif=PhotoImage(file="D:\Python\PYTHON\My Programe\pic.gif")
label=Label(win,image=bkgif)
label.grid(row=2,column=1,columnspan=2,pady=5)

#界面跳转

def JudgeInfo():
#设置登录账号和密码
    if accountE.get()=="DJ.Z" and pwdE.get()=="666":
#界面跳转后隐藏按钮,防止弹出多个窗口
        exitbtn.grid_forget()
#实现输入正确时的反馈
        labelright=Label(win,text="(๑•̀ㅂ•́)و✧欢迎您",foreground="Magenta",width=20,cursor="pencil")
        labelright.grid(row=6,column=1,pady=5)
#产生主界面
        Second = Toplevel()
        Second.title("书阁二楼")
        Second.geometry("650x510")

#上部分增加书目栏
        def removeItem():
            ids = tree.selection()
            for id in ids:
                tree.delete(id)
        def insertItem():
            name = nameEntry.get()
            tip = tipEntry.get()

            if(len(name.strip())==0 or len(tip.strip())==0):
                return
            tree.insert("",END,text=name,values=(tip))
            nameEntry.delete(0,END)
            tipEntry.delete(0,END)
#下面这一行可预设书目及批注
        Bookname1={"169****841@qq.com":"作者邮箱"}

#建立插入栏
        namelab=Label(Second,text="书名:")
        namelab.grid(row=0,column=0,padx=5,pady=3,sticky=E)
        nameEntry=Entry(Second)
        nameEntry.grid(row=0,column=1,sticky=W+E,padx=5,pady=3)
        tiplab=Label(Second,text="批注:")
        tiplab.grid(row=0,column=2,sticky=E)
        tipEntry = Entry(Second)
        tipEntry.grid(row=0,column=3,sticky=W+E,padx=5,pady=3)
#建立insert按钮
        inbtn = Button(Second,text="添加",command=insertItem)
        inbtn.grid(row=0,column=4,padx=5,pady=3)

#建立Treeview,可以有多项选择
        tree = Treeview(Second,columns="tips",selectmode=EXTENDED)
        tree.heading("#0",text="书名")
        tree.heading("tips",text="批注")
        tree.column("tips",anchor=CENTER)

        for name in Bookname1.keys():
            tree.insert("",index=END,text=name,values=Bookname1[name])
        tree.grid(row=1,column=0,columnspan=5,padx=5,sticky=W+E+N+S)

        rmbtn=Button(Second,text="删除",command=removeItem,width=19)
        rmbtn.grid(row=2,column=2,padx=5,pady=3,sticky=W)
        
#插入分隔图片
        image=Image.open("D:\Python\PYTHON\My Programe\image.jpg")
        flower=ImageTk.PhotoImage(image)
        labelf=Label(Second,image=flower)
        labelf.grid(row=3,column=0,columnspan=6)
#定义三个按钮的功能
#def writer:

#下部分增加按钮
        btnadd = Button(Second,text="增加分类")
        btnadd.grid(row=4,column=1,pady=10)
        btnset = Button(Second,text=" 句  读 ")
        btnset.grid(row=4,column=2,pady=10)
        btnpen = Button(Second,text="记录随笔")
        btnpen.grid(row=4,column=3,pady=10)

#建立滑动条

        def on_scroll(*args):   #防止滚动条弹回顶部
            pos = Scrollbar.get()
            print(pos)
            page = 0.1
            if args[0]=='scroll':
                if args[2]=='units':
                    first =  pos[0] + int(args[1])* 0.01
                elif args[2]=='pages':
                    first =  pos[0]  + int(args[1])* 0.1
                else:
                    first = 0
            elif args[0]=='moveto':
                first = float(args[1])
            else:
                first = 0
            Scrollbar.set(first,first + 0.1)
            label.config(text=str(args))

        yscrollbar = Scrollbar(Second,orient = VERTICAL, command=on_scroll)
        yscrollbar.grid(row=1,column=5,sticky=S+W+E+N)
        yscrollbar.config(command=tree.yview)
        tree.configure(yscrollcommand=yscrollbar.set)

        Second.mainloop()

#实现输入错误时的反馈
    else: 
        labelwrong=Label(win,compound="left",text="(⊙﹏⊙)账号或密码错误",background="Crimson",foreground="Gold")
        labelwrong.grid(row=6,column=1,pady=5)

#账号密码的布置(用空格代替排版了,感觉这样方便一些)
accountL = Label(win,text="              账号")
accountL.grid(row=3,sticky=E)
accountE = Entry(win)
accountE.grid(row=3,column=1)

pwdL = Label(win,text="               密码")
pwdL.grid(row=4,sticky=W)
pwdE = Entry(win,show="*") 
#show="*"隐藏密码显示
pwdE.grid(row=4,column=1)

exitbtn = Button(win,text="进入",command=JudgeInfo,width=20)
exitbtn.grid(row=5,column=1,pady=5)
#Judgeinfo是为进入下一个界面准备的,账号密码输入正确即可跳转

win.mainloop()

有待改进的内容

这部分内容我都会逐一尝试,结果会放在另一篇blog中

  1. 通过Toplevel创建主界面(Second)后不可关闭登陆界面(win):
      可以尝试登录成功后清除并重新布置界面,即登录界面和主界面使用同一个界面。

  2. 下面三个按钮在整体界面上比例不够完美,美观程度有待改进

可选控件

1.cursor:可以控制光标停留在Label上的图案,使得界面更有趣
2.bitmap:位图控件,使得内容更直观(比如error,warning等)

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值