如何使用Tkinter进行窗口的管理与设置


Posted in Python onJune 30, 2021
目录
  • 一、Tkinter介绍
  • 二、Tkinter之初体验
  • 三、窗口的管理与设置
    • 3.1、基本属性设置
    • 3.2、外形设置
    • 3.3、窗体的方法

一、Tkinter介绍

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

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

如何使用Tkinter进行窗口的管理与设置

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

import tkinter

二、Tkinter之初体验

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

import tkinter as tk

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

执行程序,如图所示。

如何使用Tkinter进行窗口的管理与设置

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

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

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

import tkinter as tk


def create_button(root):
    # 创建一个按钮组件
    # fg 是 foreground 的缩写, 就是设置前景色的意思
    say_hello = tk.Button(root, text='打招呼', fg='blue', command=eat)
    say_hello.pack()
    return root


def eat():
    print('今天你吃饭了吗?')


root = tk.Tk()
app = create_button(root)

root.mainloop()

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

如何使用Tkinter进行窗口的管理与设置

三、窗口的管理与设置

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

3.1、基本属性设置

1.添加标题

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

2.添加图标

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

3.设置背景

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

完整代码

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

效果演示

如何使用Tkinter进行窗口的管理与设置

3.2、外形设置

1.设置透明度

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

2.设置工具栏样式

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

效果演示

如何使用Tkinter进行窗口的管理与设置

3.设置全屏

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

4.窗口置顶

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

5.设置成脱离工具栏

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

完整代码

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

3.3、窗体的方法

1.获取屏幕大小

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

完整代码

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

演示效果

如何使用Tkinter进行窗口的管理与设置

2.获取窗体位置

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

3.获取窗体大小

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

完整代码

#  导入模块,取别名
import tkinter as tk
#  实例化一个窗体对象
root = tk.Tk()
#  设置窗体高宽和位置
root.geometry("600x500+150+150")
#  更新窗体
root.update()
#  获取窗体位置
root_x = root.winfo_x()
root_y = root.winfo_y()
#  获取窗体大小
root_height = root.winfo_height()
root_width = root.winfo_width()
#  输出窗体位置和窗体高宽
print(root_x)
print(root_y)
print(root_width)
print(root_y)
#  进入消息循环,显示窗口
root.mainloop()

演示效果

如何使用Tkinter进行窗口的管理与设置

以上就是如何使用Tkinter进行窗口的管理与设置的详细内容,更多关于Tkinter 窗口的管理与设置的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
python中sleep函数用法实例分析
Apr 29 Python
Pycharm技巧之代码跳转该如何回退
Jul 16 Python
浅谈Python中的私有变量
Feb 28 Python
python list元素为tuple时的排序方法
Apr 18 Python
pytorch中nn.Conv1d的用法详解
Dec 31 Python
pandas和spark dataframe互相转换实例详解
Feb 18 Python
手把手教你安装Windows版本的Tensorflow
Mar 26 Python
Scrapy项目实战之爬取某社区用户详情
Sep 17 Python
Python爬虫自动化爬取b站实时弹幕实例方法
Jan 26 Python
20行代码教你用python给证件照换底色的方法示例
Feb 05 Python
Python生成九宫格图片的示例代码
Apr 14 Python
PyCharm 安装与使用配置教程(windows,mac通用)
May 12 Python
Python 语言实现六大查找算法
详解MindSpore自定义模型损失函数
教你用python实现12306余票查询
python实现简易自习室座位预约系统
如何用Python搭建gRPC服务
python not运算符的实例用法
Jun 30 #Python
pycharm部署django项目到云服务器的详细流程
You might like
PHP大批量插入数据库的3种方法和速度对比
2014/07/08 PHP
Laravel5.4框架使用socialite实现github登录的方法
2019/03/20 PHP
Using the TextRange Object
2006/10/14 Javascript
extjs 列表框(multiselect)的动态添加列表项的方法
2009/07/31 Javascript
js 函数的副作用分析
2011/08/23 Javascript
jquery 年会抽奖程序
2011/12/22 Javascript
javascript使用location.search的示例
2013/11/05 Javascript
JavaScript保留关键字汇总
2015/12/01 Javascript
纯javascript版日历控件
2016/11/24 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
elementUI vue this.$confirm 和el-dialog 弹出框 移动 示例demo
2019/07/03 Javascript
ES6基础之 Promise 对象用法实例详解
2019/08/22 Javascript
vue视频播放插件vue-video-player的具体使用方法
2019/11/08 Javascript
vue实现简单图片上传
2020/06/30 Javascript
[01:14]2019完美世界城市挑战赛(秋季赛)全国总决赛精彩花絮
2020/01/08 DOTA
Python网络编程基于多线程实现多用户全双工聊天功能示例
2018/04/10 Python
Python 读取某个目录下所有的文件实例
2018/06/23 Python
Django rest framework工具包简单用法示例
2018/07/20 Python
浅谈pytorch grad_fn以及权重梯度不更新的问题
2019/08/20 Python
Windows平台Python编程必会模块之pywin32介绍
2019/10/01 Python
Django继承自带user表并重写的例子
2019/11/18 Python
django model 条件过滤 queryset.filter(**condtions)用法详解
2020/05/20 Python
pycharm中使用request和Pytest进行接口测试的方法
2020/07/31 Python
python如何调用php文件中的函数详解
2020/12/29 Python
使用CSS3的背景渐变Text Gradient 创建文字颜色渐变
2014/08/19 HTML / CSS
利用HTML5中的Canvas绘制一张笑脸的教程
2015/05/07 HTML / CSS
Juicy Couture Beauty官方网站:香水和化妆品
2019/03/12 全球购物
英国123鲜花网站:123 Flowers
2019/07/07 全球购物
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
试用期员工考核制度
2014/01/22 职场文书
大班幼儿评语大全
2014/04/30 职场文书
员工教育培训协议书
2014/09/27 职场文书
会议欢迎词
2015/01/23 职场文书
自我评价优缺点范文
2015/03/11 职场文书
2016教师暑期培训学习心得体会
2016/01/09 职场文书
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android