Python Tkinter窗口管理与设置详解

Cora
Cora
发布时间:2026-10-14 | 3人浏览过
原创

本文详细介绍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 窗口的管理与设置的资料请关注本站其它相关文章!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表