Python Tkinter窗口管理与设置详解
本文详细介绍Python Tkinter库中窗口的管理与设置方法。内容涵盖Tkinter基础介绍、主事件循环机制、面向对象封装,以及窗口标题、图标、背景色、透明度、全屏、置顶和无边框等具体属性的配置。通过代码示例演示如何获取屏幕尺寸、窗口位置及大小,帮助开发者构建界面友好且功能完善的Python桌面应用程序。
一、Tkinter介绍
作为Python专用的图形用户界面库,Tkinter提供了一个可视化的窗口环境。它是Python标准库的一部分,无需额外安装即可使用。通过Tkinter,我们可以开发出具有良好用户体验的图形界面应用,例如计算器等工具。如果仅使用命令行输入输出,缺乏直观的交互体验,因此开发图形化窗口界面是提升应用可用性的必要手段。
对于具备一定GUI编程经验的开发者而言,Python的Tkinter界面库显得尤为简洁。在众多的Python GUI库中,选择Tkinter主要基于三个原因:一是其API设计简单直观;二是作为内置库,无需下载安装,开箱即用;三是从实际需求出发,Python作为一种脚本语言或“胶水语言”,其优势在于灵活性和集成能力,而非开发复杂的桌面级应用。因此,将Python作为辅助工具来制作小型实用程序,既方便个人使用,也易于分享给他人,在这种场景下,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()
执行程序后,界面效果如图所示。

变量loop意为循环,root.mainloop()的作用正是让root窗口不断刷新。若缺少mainloop,窗口将保持静态,传入的值无法产生动态更新。mainloop本质上是一个巨大的while循环,每次用户交互(如点击)都会触发界面更新,因此它是窗口运行的核心。
一旦进入主事件循环,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来精确控制窗口的显示效果。
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()
效果演示

3.2、外形设置
1.设置透明度
# 透明度的值:0~1 也可以是小数点,0:全透明;1:全不透明
root.attributes("-alpha", 0.6)
2.设置工具栏样式
# True 只有退出按钮,也没有图标;False 正常的窗体样式
root.attributes("-toolwindow", True)
效果演示

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()
演示效果

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 窗口的管理与设置的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









