Tkinter介绍

官方用的GUI工具包——Tkinter(IDLE就是用这个开发的)。

Tkinter是Python的标准GUI库,它实际是建立在Tk技术上的。在大多数Unix平台以及Windows系统上都可用。

作为 python 特定的GUI界面,是一个图像的窗口,tkinter是python 自带的,可以编辑的GUI界面,我们可以用GUI 实现很多直观的功能,比如想开发一个计算器,如果只是一个键盘输入,输出的黑色窗口,是没用用户体验的。所有开发一个图像化的小窗口,就是必要的。

对于稍有GUI编程经验的人来说,Python的Tkinter界面库是非常简单的。python的GUI库非常多,选择Tkinter,一是最为简单,二是自带库,不需下载安装,随时使用,三则是从需求出发,Python作为一种脚本语言,或者说一种胶水语言,一般不会用它来开发复杂的桌面应用,它并不具备这方面的优势,使用Python,可以把它作为一个灵活的工具,而不是作为主要开发语言,那么在工作中,需要制作一个小工具,肯定是需要有界面的,不仅自己用,也能分享别人使用,在这种需求下,Tkinter是足够胜任的!

Tkinter是Python默认的GUI库,像IDLE就是用Tkinter设计出来的,因此直接导入Tkinter模块就可以了:

  1. import tkinter

Tkinter之初体验

接下来从最简单的例子入手:

  1. import tkinter as tk
  2. # 创建一个主窗口,用于容纳整个GUI程序
  3. root = tk.Tk()
  4. # 设置主窗口对象的标题栏
  5. root.title("First Demo")
  6. # 设置窗口大小
  7. root.geometry('500x300+100+100')
  8. # 添加一个Label组件,Label组件是GUI程序中最常用的组件之一。
  9. # Label组件可以显示文本、图标或者图片
  10. # 在这里我们让它显示指定文本
  11. theLabel = tk.Label(root, text="我的第一个tkinter窗口!")
  12. # 然后调用Label组件的pack()方法,用于自动调节组件自身的尺寸
  13. theLabel.pack()
  14. # 注意,这时候窗口还是不会显示的…
  15. # 除非执行下面这条代码!
  16. root.mainloop()

执行程序,如图所示。

loop因为是循环的意思,root.mainloop就会让root不断的刷新,如果没有mainloop,就是一个静态的root,传入进去的值就不会有循环,mainloop就相当于一个很大的while循环,有个while,每点击一次就会更新一次,所以我们必须要有循环。

所有的窗口文件都必须有类似的mainloop函数,mainloop是窗口文件的关键的关键。

意思是一旦进入了主事件循环,就由Tkinter掌管一切了。现在不理解没关系,在后面的学习中你会有深刻的体会。GUI程序的开发与以往的开发经验会有截然不同的感受。

通常如果要写一个比较大的程序,那么应该先把代码给封装起来。在面向对象的编程语言中,就是封装成类。看下面进阶版的例子:

  1. import tkinter as tk
  2. def create_button(root):
  3. # 创建一个按钮组件
  4. # fg 是 foreground 的缩写, 就是设置前景色的意思
  5. say_hello = tk.Button(root, text='打招呼', fg='blue', command=eat)
  6. say_hello.pack()
  7. return root
  8. def eat():
  9. print('今天你吃饭了吗?')
  10. root = tk.Tk()
  11. app = create_button(root)
  12. root.mainloop()

程序跑起来后出现一个“打招呼”按钮,单击它就能从IDLE接收到回馈信息,如图15-3所示。

窗口的管理与设置

不知道大家是否注意到了,上述举例的简单demo程序存在窗口显示混乱的情况,这样的一个界面显然是不符合我们要求的。所以我们首先要开始学习如何使用tkinter去控制我们的窗口

基本属性设置

1.添加标题

  1. # 设置窗口标题
  2. root.title("title")

2.添加图标

  1. # 设置图标,以OneDrive图标为例,必须是以 .ico 为后缀的图标文件,放于同目录下。
  2. root.iconbitmap("OneDrive.ico")

3.设置背景

  1. # 设置背景色,可以用英文名,也可以用十六进制表示的颜色。
  2. root["background"] = "#00ffff"

完整代码

  1. # 导入模块,取别名
  2. import tkinter as tk
  3. # 实例化一个窗体对象
  4. root = tk.Tk()
  5. # 设置窗口的大小长宽为300x300出现的位置距离窗口左上角+150+150
  6. root.geometry("300x300+150+150")
  7. # 设置窗口标题
  8. root.title("title")
  9. # 设置图标,以OneDrive图标为例,必须是以 .ico 为后缀的图标文件,放于同目录下。
  10. root.iconbitmap("OneDrive.ico")
  11. # 设置背景色,可以用英文名,也可以用十六进制表示的颜色。
  12. root["background"] = "#00ffff"
  13. # 进入消息循环,显示窗口
  14. root.mainloop()

效果演示

外形设置

1.设置透明度

  1. # 透明度的值:0~1 也可以是小数点,0:全透明;1:全不透明
  2. root.attributes("-alpha", 0.6)

2.设置工具栏样式

  1. # True 只有退出按钮,也没有图标;False 正常的窗体样式
  2. root.attributes("-toolwindow", True)

效果演示

3.设置全屏

  1. # True 全屏;False 正常显示
  2. root.attributes("-fullscreen", True)

4.窗口置顶

  1. # True 所有窗口中处于最顶层;False 正常显示 两个同时被置顶的窗口为同级(能互相遮盖),但他们都能同时遮盖住没有被设置为置顶的窗口。
  2. root.attributes("-topmost", True)

5.设置成脱离工具栏

  1. # True 没有工具栏按钮;False 正常显示
  2. root.overrideredirect(True)

完整代码

  1. # 导入模块,取别名
  2. import tkinter as tk
  3. # 实例化一个窗体对象
  4. root = tk.Tk()
  5. # 设置窗口的大小长宽为300x300出现的位置距离窗口左上角+150+150
  6. root.geometry("300x300+150+150")
  7. # 设置窗口标题
  8. root.title("title")
  9. # 设置图标,以OneDrive图标为例,必须是以 .ico 为后缀的图标文件,放于同目录下。
  10. root.iconbitmap("OneDrive.ico")
  11. # 设置背景色,可以用英文名,也可以用十六进制表示的颜色。
  12. root["background"] = "#00ffff"
  13. # True 全屏;False 正常显示
  14. root.attributes("-fullscreen", True)
  15. # True 所有窗口中处于最顶层;False 正常显示 两个同时被置顶的窗口为同级(能互相遮盖),但他们都能同时遮盖住没有被设置为置顶的窗口。
  16. root.attributes("-topmost", True)
  17. # True 没有工具栏按钮;False 正常显示
  18. root.overrideredirect(True)
  19. # 进入消息循环,显示窗口
  20. root.mainloop()

窗体的方法

1.获取屏幕大小

  1. screenheight = root.winfo_screenheight()
  2. screenwidth = root.winfo_screenwidth()

完整代码

  1. # 导入模块,取别名
  2. import tkinter as tk
  3. # 实例化一个窗体对象
  4. root = tk.Tk()
  5. # 获取屏幕大小
  6. screenheight = root.winfo_screenheight()
  7. screenwidth = root.winfo_screenwidth()
  8. print("屏幕高度:", screenheight)
  9. print("屏幕宽度:", screenwidth)
  10. rootwidth = 300
  11. roothight = 300
  12. # 设置窗口在屏幕居中
  13. root.geometry("%dx%d+%d+%d" % (rootwidth, roothight, (screenwidth-rootwidth)/2, (screenheight-roothight)/2))
  14. # 进入消息循环,显示窗口
  15. root.mainloop()

演示效果

2.获取窗体位置

  1. root_x = root.winfo_x()
  2. root_y = root.winfo_y()

3.获取窗体大小

  1. root_height = root.winfo_height()
  2. root_width = root.winfo_width()

完整代码

  1. # 导入模块,取别名
  2. import tkinter as tk
  3. # 实例化一个窗体对象
  4. root = tk.Tk()
  5. # 设置窗体高宽和位置
  6. root.geometry("600x500+150+150")
  7. # 更新窗体
  8. root.update()
  9. # 获取窗体位置
  10. root_x = root.winfo_x()
  11. root_y = root.winfo_y()
  12. # 获取窗体大小
  13. root_height = root.winfo_height()
  14. root_width = root.winfo_width()
  15. # 输出窗体位置和窗体高宽
  16. print(root_x)
  17. print(root_y)
  18. print(root_width)
  19. print(root_y)
  20. # 进入消息循环,显示窗口
  21. root.mainloop()

演示效果

01-Tkinter教程-窗口的管理与设置的更多相关文章

  1. [Tkinter 教程12] 布局管理 (Pack Place Grid)

    简介: 本文讲述如何使用 tkinter 的布局管理 (被称作 layout managers 或 geometry managers). tkinter 有三种布局管理方式: pack grid p ...

  2. Tkinter教程系列01——引言和安装Tk

    Tkinter教程系列01--引言和安装Tk 首发于我的个人博客 https://chens.life/tkinter-tutorial-chapter-01-introduction-and-ins ...

  3. iOS10 UI教程基础窗口的内容与设置起始窗口

    iOS10 UI教程基础窗口的内容与设置起始窗口 iOS10 UI教程基础窗口的内容与设置起始窗口,本章我们从iOS10开发中UI的基础知识开始讲解,其中包括了窗口.视图以及UI层次结构和Views的 ...

  4. 第一个真正的 GUI 程序——Tkinter教程系列02

    第一个真正的 GUI 程序--Tkinter教程系列02 前言 欢迎光临我的个人博客 chens.life Tk 系列教程: Tkinter教程系列01--引言和安装Tk 我们将编写一个英尺和米的转换 ...

  5. Tk 的基本概念-组件—Tkinter 教程系列03

    Tk 的基本概念-组件-Tkinter 教程系列03 前言 Tk 系列教程: Tkinter教程系列01--引言和安装Tk Tkinter教程系列02--第一个真正的 GUI 程序 通过上一节的程序实 ...

  6. tkinter之grid布局管理器详解

    在很久之前,我发过一篇<tkinter模块常用参数>,里面已经几乎涵盖了tkinter的大部分教程. 好吧,其实也就是上一篇而已啦. 所谓布局,就是指控制窗体容器中各个控件(组件)的位置关 ...

  7. Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(VSM)

    Expression Blend实例中文教程(11) - 视觉管理器快速入门Visual State Manager(V 时间:2010-04-12 16:06来源:SilverlightChina. ...

  8. 2DToolkit官方文档中文版打地鼠教程(二):设置摄像机

    这是2DToolkit官方文档中 Whack a Mole 打地鼠教程的译文,为了减少文中过多重复操作的翻译,以及一些无必要的句子,这里我假设你有Unity的基础知识(例如了解如何新建Sprite等) ...

  9. NPOI 教程 - 3.2 打印相关设置

    转:http://www.cnblogs.com/wolfplan/archive/2013/01/13/2858991.html NPOI 教程 - 3.2 打印相关设置   打印设置主要包括方向设 ...

随机推荐

  1. Java_抽象

    抽象的基本使用 抽象的关键字是abstract,可以用来修饰类(抽象类),还可以修饰方法(抽象方法). 1 //抽象类 2 public abstract class Animal{ 3 //抽象方法 ...

  2. auto_increment 自增长

    auto_increment create table t20( id int primary key auto_increment, (自增长必须为键) name char(16)); insert ...

  3. spring-第三章-jdbc

    一,回顾 aop:面向切面编程,就是将一些和主业务流程没有关系的公共代码,提取封装到切面类,通过切入点规则,可以对目标方法进行功能增强;也就是可以再目标方法执行的前后添加一段额外逻辑代码; 二,Jdb ...

  4. 探索专有领域的端到端ASR解决之道

    摘要:本文从<Shallow-Fusion End-to-End Contextual Biasing>入手,探索解决专有领域的端到端ASR. 本文分享自华为云社区<语境偏移如何解决 ...

  5. Linux下script命令录制、回放和共享终端操作script -t 2> timing.log -a output.session # 开始录制

    Linux下script命令录制.回放和共享终端操作 [日期:2018-09-04] 来源:cnblogs.com/f-ck-need-u  作者:骏马金龙 [字体:大 中 小]   另一篇终端会话共 ...

  6. mysql默认值

    1.创建表时添加默认值 语法: <字段名><类型><默认值> 实例: MySQL [wordpress]> create table ly_content(  ...

  7. 分布式存储ceph---ceph osd 故障硬盘更换(6)

    正常状态: 故障状态: 实施更换步骤: 1.关闭ceph集群数据迁移: osd硬盘故障,状态变为down.在经过mod osd down out interval 设定的时间间隔后,ceph将其标记为 ...

  8. linux 修改IP, DNS -(转自fighter)

    linux下修改IP.DNS.路由命令行设置 ubuntu 版本命令行设置IP cat /etc/network/interfaces # This file describes the networ ...

  9. Centos6.5 修改主机名(hostname)

    centos6需要修改两处:一处是/etc/sysconfig/network,另一处是/etc/hosts,只修改任一处会导致系统启动异常.首先切换到root用户. /etc/sysconfig/n ...

  10. mysql-connector-java版本匹配问题:ERROR DruidDataSource - create connection SQLException(Day_45)

    mysql安装的是:8.0.23,启动项目后发现报错连接不上数据库 报错信息: Druid-ConnectionPool-Create-150783284] ERROR DruidDataSource ...