Skip to content

窗口的管理与设置

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

基本属性设置

添加标题

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

添加图标

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

提示

ico 图标必须是 ico 格式并且以 ico 结尾的图标。可以在百度搜索 ico 图标查找并且下载。

也可以在这里找: icons 图标

设置背景

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

完整代码

python
#  导入模块,取别名
import tkinter as tk

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

效果演示

image-20231021230601492

外形设置

1.设置透明度

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

2.设置工具栏样式

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

效果演示

image-20231021232340426

3.设置全屏

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

4.窗口置顶

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

5.设置成脱离工具栏

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

完整代码

py
#  导入模块,取别名
import tkinter as tk

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

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

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

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

窗体的方法

1.获取屏幕大小

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

完整代码

py
#  导入模块,取别名
import tkinter as tk

#  实例化一个窗体对象
root = tk.Tk()
#  获取屏幕大小
screen_height = root.winfo_screenheight()
screen_width = root.winfo_screenwidth()
print("屏幕高度:", screen_height)
print("屏幕宽度:", screen_width)
root_width = 500
root_height = 300
#  设置窗口在屏幕居中
root.geometry(
    "%dx%d+%d+%d" % (
        root_width, root_height,
        (screen_height - root_width) / 2, (screen_width - root_height) / 2)
)
#  进入消息循环,显示窗口
root.mainloop()

运行代码

2.获取窗体位置

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

3.获取窗体大小

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

完整代码

py
#  导入模块,取别名
import tkinter as tk

#  实例化一个窗体对象
root = tk.Tk()
#  设置窗体高宽和位置
root.geometry("500x300+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()

演示效果

image-20200217180958137

案例:居中显示

创建一个窗口页面,需求如下 标题为:正心-学生信息管理系统 位置:出现的位置为屏幕居中 窗口大小为:300*300

python

import tkinter

root = tkinter.Tk()

root.title('正心-学生信息管理系统')

# 获取屏幕的宽度与高度
screen_x = root.winfo_screenwidth()
screen_y = root.winfo_screenheight()

print(screen_x, screen_y)
print(screen_x / 2 - 150, screen_y / 2 - 150)

# 计算中心点的位置
position_x = screen_x / 2 - 250
position_y = screen_y / 2 - 150

root.geometry('500x300+{}+{}'.format(int(position_x), int(position_y)))

root.mainloop()