Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >【tkinter系列 第十课 TopLevel窗口部件 】

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

作者头像
叶子陪你玩
发布于 2020-03-11 07:22:27
发布于 2020-03-11 07:22:27
3.6K00
代码可运行
举报
运行总次数:0
代码可运行

前言

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

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

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

创建一个简单的TopLevel窗口

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from tkinter import *
top = Toplevel()top.title("TopLevel")
mainloop()

效果:

解释:

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

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

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
root = Tk()top = Toplevel()top.title("TopLevel")
mainloop()

按钮弹出一个窗口

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from tkinter import *
root = Tk()root.geometry("400x200")root.title("父窗口")
def creatTopLevel():    top = Toplevel()    top.title("TopLevel")
Button(root,text="新建",command=creatTopLevel).pack()
mainloop()

效果:

解释:

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

实用案例

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

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

登录界面

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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()

效果:

功能实现

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
from tkinter import *import tkinter.messageboxroot = 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()

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

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

总结:

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

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-01-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 叶子陪你玩编程 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
这一篇让你彻底搞懂 JAVA内部类
做 Android 的话有时候会将各种 Adapter 直接写在 Activity 中,如:
程序员Leo
2023/08/02
2500
夯实Java基础系列18:深入理解Java内部类及其实现原理
本系列文章将整理到我在GitHub上的《Java面试指南》仓库,更多精彩内容请到我的仓库里查看
Java技术江湖
2019/10/08
1.3K0
Java——内部类详解
说起内部类,大家肯定感觉熟悉又陌生,因为一定在很多框架源码中有看到别人使用过,但又感觉自己使用的比较少,今天我就带你具体来看看内部类。
健程之道
2019/12/09
4010
Java 基础巩固:内部类的字节码学习和实战使用场景
本文介绍了内部类的概念、特点、使用场景以及Java中的内部类实现机制。内部类可以高效地访问非静态成员变量和调用非静态成员方法,并且可以在编译期间不依赖于外部类的实现。在Java中,内部类实现机制包括匿名内部类、局部内部类、静态内部类和嵌套内部类。
张拭心 shixinzhang
2018/01/05
1.4K0
Java 基础巩固:内部类的字节码学习和实战使用场景
Java-内部类详解
版权声明:署名,允许他人基于本文进行创作,且必须基于与原先许可协议相同的许可协议分发本文 (Creative Commons)
Fisherman渔夫
2019/07/31
3550
Java-内部类详解
Java基础系列(三十):局部内部类,匿名内部类
当我们在外围类中定义的内部类仅仅在某个方法中使用了一次,这种情况下,我们就可以选择去使用局部内部类。
山禾说
2019/01/21
7630
java-内部类
内部类 内部类既可以访问自身的数据域,也可以访问创建它的外部类对象的数据域 内部类对象总有一个隐式引用,它指向了创建它的外部类的对象 外部类的引用在内部类的构造方法中设置,不必手动设置,编译器会自动在构造方法中生成外部类引用 只有内部类可以是私有的,建议设置为私有的,这样只有外部类的方法才可以构造该对象。 在外部类的作用域中,可以通过OuterClass.InnerClass引用内部类 只有静态内部类可以有静态方法 import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.util.Date;
卢衍飞
2023/02/16
3570
Java内部类复习笔记
什么是Java内部类? 在类内部可定义成员变量和方法,且在类内部也可以定义另一个类。如果在类 Outer 的内部再定义一个类 Inner,此时类 Inner 就称为内部类(或称为嵌套类),而类 Out
框架师
2021/03/05
6330
Java内部类详解
   说起内部类这个词,想必很多人都不陌生,但是又会觉得不熟悉。原因是平时编写代码时可能用到的场景不多,用得最多的是在有事件监听的情况下,并且即使用到也很少去总结内部类的用法。今天我们就来一探究竟。下面是本文的目录大纲:
Java团长
2018/08/06
4570
Java Review (十五、面向对象----内部类)
大部分时候,类被定义成一个独立的程序单元。在某些情况下,也会把一个类放在另一个类的内部定义,这个定义在其他类内部的类就被称为内部类(有的地方也叫嵌套类),包含内部类的类也被称为外部类(有的地方也叫宿主类)。Java从JDK 1.1开始引入内部类,内部类主要有如下作用。
三分恶
2020/07/16
3610
java内部类总结(附代码说明)
1,概述 内部类是指在一个外部类的内部再定义一个类。 内部类作为外部类的一个成员,并且依附于外部类而存在的。 内部类可为静态,可用PROTECTED和PRIVATE修饰。(而外部类不可以:外部类只能
用户11293412
2024/10/09
1010
Java基础8:深入理解内部类
https://h2pl.github.io/2018/04/25/javase8
程序员黄小斜
2019/04/06
1.6K0
Java内部类详解
②直接方式:创建内部类——外部类名称.内部类名称 对象名 = new 外部类名称().new 内部类名称();
訾博ZiBo
2025/01/06
630
Java 内部类
在类的内部定义另一个类。定义就这么简单。如果在类Outer的内部再定义一个类Inner,此时Inner就称为内部类,而Outer则称为外部类。内部类的定义格式如下:
赵哥窟
2018/12/24
3970
Java-内部类
如果想从外部类的非静态方法之外的任意位置创建某个内部类的对象(在静态方法内部创建某个内部类的对象),那么必须像在main()方法中那样,具体地指明这个对象的类型:OuterClassName.InnerClassName
桑鱼
2020/03/17
5070
JAVA 第二天 内部类
package com.company; /** * Created by Administrator on 2016/8/23. */ public class Outter {//生成的字节码文件是Outter.class /** * 嵌套的概念 * 类中除了变量和方法之外,还可以定义一个类 * 这个类就是内部类,就是嵌套 * * 调用内部类 需要创建内部类的对象 * */ private int a=1; //内
拾点阳光
2018/05/11
7410
ChatGPT告诉你Java内部类 vs. 组合的区别
ChatGPT与你分享Java内部类和组合的区别,这将有助于你更好地理解如何在Java编程中使用它们。如果你对这个话题感兴趣,那么请继续阅读,我将向你展示内部类和组合的不同之处。
Mark Sun
2023/03/30
8192
【Java 学习】:内部类详解
📃📃本文将通过Java内部类 是什么,为什么被广泛使用,以及又该如何去使用这三个方面来详细讲解其相关知识。
IsLand1314
2024/10/15
1240
【Java 学习】:内部类详解
【Java探索之旅】内部类 静态、实例、局部、匿名内部类全面解析
当一个事物的内部,还有一个部分需要一个完整的结构进行描述,而这个内部的完整的结构又只为外部事物提供服务,那么这个内部的完整结构最好使用内部类。
屿小夏
2024/05/06
2720
【Java探索之旅】内部类 静态、实例、局部、匿名内部类全面解析
编程思想 之「接口、内部类」
在 Java 的语言体系中,类和接口是两种常见的定义对象的形式,内部类则是类的一种特殊形式。接口和内部类为我们提供了一种将抽象定义与具体实现相分离的更加结构化的方法。
CG国斌
2018/03/22
1.2K3
编程思想 之「接口、内部类」
相关推荐
这一篇让你彻底搞懂 JAVA内部类
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验