python的GUI(续)
Menubar菜单
menubar俗称菜单栏,建立菜单栏的代码&注释&结果截图如下
import tkinter as tk
window=tk.Tk() #建立一个窗口object
window.title("my window")#命名
window.geometry('200x200')#大小
l=tk.Label(window,text='',bg='pink')
l.pack()
counter=0
def do_job():
global counter
l.config(text='do'+str(counter))
counter+=1
menubar=tk.Menu(window)#建立menubar
filemenu=tk.Menu(menubar,tearoff=0)#为菜单栏增添选项,tearoff=0就是不能被分开
menubar.add_cascade(label='File',menu=filemenu)#将filemenu挂载到menubar上
filemenu.add_command(label='New',command=do_job)#为file栏增添新内容
filemenu.add_command(label='Open',command=do_job)#为file栏增添新内容
filemenu.add_command(label='Save',command=do_job)#为file栏增添新内容
filemenu.add_separator()#加一个分割线
filemenu.add_command(label='Exit',command=window.quit)#为file栏增添新内容,整个窗口退出
editmenu=tk.Menu(menubar,tearoff=0)
menubar.add_cascade(label='Edit',menu=editmenu)#将filemenu挂载到menubar上
editmenu.add_command(label='Cut',command=do_job)#为file栏增添新内容
editmenu.add_command(label='Copy',command=do_job)#为file栏增添新内容
editmenu.add_command(label='Paste',command=do_job)#为file栏增添新内容
submenu=tk.Menu(filemenu)#增加一个子菜单挂载在filemenu上
filemenu.add_cascade(label='Import',menu=submenu,underline=0)
submenu.add_command(label='submenu1',command=do_job)
window.config(menu=menubar)#将menubar绑定到window
window.mainloop()#一直刷新window
Frame框架
frame是容器组件,用于在复杂布局中将其他的组件分组。即可以收纳其它组件,也可以做其它组件的父组件的组件。窗口中的窗口
代码&注释&运行结果如下:(实现一个简易的frame)
import tkinter as tk
window=tk.Tk() #建立一个窗口object
window.title("my window")#命名
window.geometry('200x200')#大小
tk.Label(window, text='on the window').pack()#在window上定义一个标签
frm = tk.Frame(window)#创建一个frame
frm.pack()
frm_l = tk.Frame(frm)#在刚刚创建的frame上创建两个子frame
frm_r = tk.Frame(frm)
frm_l.pack(side='left')#side为left表示在左边,相对于父frame的位置
frm_r.pack(side='right')#side为right表示在右边
###这里的三个label就是在我们创建的frame上定义的label部件,还是以容器理解,就是容器上贴了标签,来指明这个是什么,解释这个容器。
tk.Label(frm_l, text='on the frm_l1').pack()#在两个区域上定义三个label
tk.Label(frm_l, text='on the frm_l2').pack()
tk.Label(frm_r, text='on the frm_r1').pack()
window.mainloop()#一直刷新window
messagebox弹窗
messagebox 消息对话框总体来说分为两种,一是消息框,二是对话框。
消息框,主要用来提示用户相应的信息,用户知道即可;对话框,告诉用户信息的同时,需要用户选择做出下一步行动,有一个交互的过程。
import tkinter as tk
from tkinter import messagebox#这句话要写,不然弹窗会报错
window=tk.Tk() #建立一个窗口object
window.title("my window")#命名
window.geometry('200x200')#大小
def hit_me():
#tk.messagebox.showinfo(title='Hi',message='hahahahha')#蓝色提示
#tk.messagebox.showwarning(title='Warning', message='nononono')#黄色警告
#tk.messagebox.showerror(title='Error', message='Error') #红色错误
#tk.messagebox.askquestion(title='hello', message='Are you happy?') #询问,返回值为yes或者no
#tk.messagebox.askyesno(title='hello', message='Are you happy?') #询问,返回值为True或者False
tk.messagebox.askretrycancel(title='hello', message='Are you happy?') # 询问,返回值为True或者False
tk.messagebox.askokcancel(title='hello', message='Are you happy?') # 询问,返回值为True或者False
tk.Button(window,text='hit me',command=hit_me).pack()
window.mainloop()#一直刷新window
pack(),grid(),place()放置位置
pack()用法
import tkinter as tk
from tkinter import messagebox#这句话要写,不然弹窗会报错
window=tk.Tk() #建立一个窗口object
window.title("my window")#命名
window.geometry('200x200')#大小
tk.Label(window,text=1).pack(side='top')
tk.Label(window,text=1).pack(side='bottom')
tk.Label(window,text=1).pack(side='left')
tk.Label(window,text=1).pack(side='right')
window.mainloop()#一直刷新window
#grid()
for i in range(4):#四行三列
for j in range(3):
tk.Label(window,text=1).grid(row=i,column=j,padx=10,pady=10)#外部扩展
tk.Label(window,text=1).place(x=10,y=100,anchor='nw')
实例:用户登录系统
这里之前内容没囊括的地方就是在存储用户信息时用到了python的pickle模块,没有用到数据库
python的pickle模块实现了基本的数据序列化和反序列化。可以在磁盘上保存对象,并在需要的时候读取出来。任何对象都可以执行序列化操作。
但pickle只能在python中使用
pickle主要有两个函数:
1.dump()函数
作用:实现python对象的序列化,将obj保存到file中
具体语法:pickle.dump(obj, file[, protocol])
2.load()函数
作用:用于反序列化,将序列化的对象重新恢复成python对象
具体语法:pickle.load(file)