前言

python中通常我们写程序,显示结果和操作都是在终端区,如果要想实现一个有显示界面的程序那该怎样实现呢?python中有好几个库都可以实现,这个系列我们一起来学习如何使用python自带的tkinter库来实现。

本节课将要学习TopLevel窗口部件,TopLevel是最高级的意思,Toplevel 组件通常用在显示额外的窗口、对话框或者其他弹出窗口上。

看下面这个例子,当我们点击菜单栏的字体菜单时,会弹出一个新的窗口,这个就是TopLevel。

【tkinter系列 第十课 TopLevel窗口部件 】_python

【tkinter系列 第十课 TopLevel窗口部件 】_python_02

创建一个简单的TopLevel窗口

代码:

from tkinter import *



top = Toplevel()

top.title("TopLevel")



mainloop()

效果:

【tkinter系列 第十课 TopLevel窗口部件 】_父窗口_03

解释:

这里可能对于出现两个窗口会有疑问,其实是因为TopLevel虽然也是顶级窗口,但是它是不能独立存在的,默认会创建一个根窗口(自己实验猜测)。

下面的代码和上面是一样的效果,建议还是用下面的代码,显示创建一个根窗口更好。

root = Tk()

top = Toplevel()

top.title("TopLevel")



mainloop()

按钮弹出一个窗口

代码:

from tkinter import *



root = Tk()

root.geometry("400x200")

root.title("父窗口")



def creatTopLevel():

top = Toplevel()

top.title("TopLevel")



Button(root,text="新建",command=creatTopLevel).pack()



mainloop()

效果:

【tkinter系列 第十课 TopLevel窗口部件 】_登录注册_04

解释:

这里要注意Button是绑定在root上的,通过触发按钮弹出一个TopLevel窗口,菜单栏就是类似的原理,具体如何实现下节课Menu会讲解。

实用案例

通常我们进入一个软件之前,需要先登录;没有登录就不能显示主界面(这里也就是root窗口),通过登录界面(这里是TopLevel窗口)登录成功后才显示。

【tkinter系列 第十课 TopLevel窗口部件 】_父窗口_05

【tkinter系列 第十课 TopLevel窗口部件 】_登录注册_06

【tkinter系列 第十课 TopLevel窗口部件 】_父窗口_07

【tkinter系列 第十课 TopLevel窗口部件 】_python_08

前面说过,TopLevel是不能独立存在的,那root窗口要如何做到不显示和显示切换,下面就来通过一个简单案例理解它的原理,实际全面的功能需要等到后面的项目课具体学习。

登录界面

代码:

from tkinter import *

root = Tk()

root.geometry("400x200")

root.title("父窗口")

root.withdraw() # 隐藏父窗口



top = Toplevel()

top.geometry("400x200")

top.title("登录注册")



def login():

pass



def logout():

pass



Button(top,text="登录",command=login).pack()

Button(top, text="退出", command=logout).pack()



mainloop()

效果:

【tkinter系列 第十课 TopLevel窗口部件 】_python_09

功能实现

代码:

from tkinter import *

import tkinter.messagebox

root = Tk()

root.geometry("400x200")

root.title("父窗口")

root.withdraw() # 隐藏父窗口

#给主界面添加一个标签内容

Label(root,text="欢迎进入主界面").pack()



top = Toplevel()

top.geometry("400x200")

top.title("登录注册")



# 登录

def login():

top.destroy() # 登入成功后销毁 登录注册窗口

root.deiconify() # 显示窗口

tkinter.messagebox.showinfo("提示","登录成功")

# 退出

def logout():

answer = tkinter.messagebox.askyesno("提示","确定直接退出吗?")

if answer: # 如果点击确定,会返回一个True的值,否则False

root.destroy()# 销毁主窗口



# 如果直接点击右上角关闭按钮,会直接关闭,通过这个方法,可以直接绑定logout函数

top.protocol("WM_DELETE_WINDOW", logout)



Button(top, text="登录", command=login).pack()

Button(top, text="退出", command=logout).pack()



mainloop()

效果:运行后,点击退出或者右上角关闭按钮。

【tkinter系列 第十课 TopLevel窗口部件 】_父窗口_10

点击登录按钮后,登录注册界面会消失,同时显示主界面和提示消息。

【tkinter系列 第十课 TopLevel窗口部件 】_父窗口_11

总结:

1.withdraw() 隐藏窗口,iconify()也是隐藏窗口,但是其实是最小化,任务栏还是可以点击打开的,withdraw()是会消失的。2.deiconify() 显示窗口 3.destroy() 销毁窗口 关闭父窗口,会将它下面的其它窗口都关闭 4.protocol("WMDELETEWINDOW", logout) 窗口的管理方法,第一个参数表示是窗口关闭,第二个参数表示触发操作时的回调函数.

(全文完)




长按二维码,

加关注!

叶子陪你玩

【tkinter系列 第十课 TopLevel窗口部件 】_父窗口_12