Tkinter GUI开发:常用窗口属性与控件设置详解

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

本文详细介绍Python Tkinter库中创建和管理GUI窗口的常用方法。涵盖窗口基础创建、尺寸与位置设置、图标与背景配置、透明度调整、置顶及工具栏样式控制,以及标签、按钮和事件绑定的具体实现,帮助开发者快速构建功能完整的桌面应用程序。

首先,引入tkinter模块。该模块通常随Python环境自带,无需额外安装即可直接使用。


import tkinter

接着,实例化Tk类以创建一个基础窗口,并调用mainloop()启动主事件循环,使窗口保持运行状态。


import tkinter
tk=tkinter.Tk()
tk.mainloop()

 

完成上述步骤后,一个基础的GUI窗口即已生成。后续我们将在此基础上添加各类控件,使界面更加丰富和独特。

通过调用tk.title()方法,可以自定义窗口的标题栏显示文字,例如设置为“窗口”。


tk.title("窗口")

使用tk.geometry()方法可以精确设定窗口的初始大小和屏幕位置。


tk.geometry("300x150+700+300")

该方法的参数格式为“width x height+x+y”,其中width和height分别代表窗口的宽度和高度。

紧随其后的+x和+y参数,分别表示窗口左上角相对于屏幕坐标系的X轴和Y轴偏移量。

桌面坐标系以屏幕左上角为原点(0,0),向右为X轴正方向,向下为Y轴正方向。

若需限制窗口大小,防止用户随意拖拽改变尺寸,可设置最小和最大尺寸。


tk.minsize(560, 545) # 最小尺寸
 
tk.maxsize(560, 545) # 最大尺寸

通过调用tk.minsize()和tk.maxsize()方法,可以分别设定窗口的最小宽度和高度,以及最大宽度和高度,从而固定窗口大小。


tk.attributes("-fullscreen", True)#全屏模式:True 全屏;False 正常显示

注:全屏模式没有退出按钮,关闭可使用win+D最小化才能关闭

调用tk.attributes("-fullscreen", True)可将窗口设置为全屏模式。

在某些场景下,我们需要根据当前屏幕的实际分辨率来动态调整窗口大小。为此,需获取屏幕的宽度和高度信息。


w = tk.winfo_screenwidth()#获取屏幕宽
h = tk.winfo_screenheight()#获取屏幕高

使用tk.iconbitmap()方法可以为窗口设置自定义图标,需将.ico文件放置在代码同级目录下。


tk.iconbitmap('favicon.ico')#设置窗口图标,将ico放在同级目录下。

通过修改tk["background"]属性,可以设置窗口的背景颜色,支持十六进制颜色代码或颜色名称。


tk["background"] ="#7AC5CD"# 采用16色,或者"blue",颜色名称

为了方便用户选择颜色,推荐使用在线颜色选择工具,例如:

https://tool.oschina.net/commons?type=3

利用tk.attributes("-alpha", value)可以调整窗口的透明度,value取值范围为0到1。


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

通过设置tk.attributes("-toolwindow", True),可以改变窗口顶部的工具栏样式。


tk.attributes("-toolwindow", True)#有退出,可以移动

当该参数为True时,窗口仅显示退出按钮且无图标;若为False,则显示正常的窗体样式。

若希望完全隐藏退出按钮及工具栏,可使用tk.overrideredirect(True)。


tk.overrideredirect(True)#无退出,不能移动,无工具栏

调用tk.attributes("-topmost", True)可将窗口设置为始终置顶显示。


tk.attributes("-topmost", True)
窗体置顶:True 所有窗口中处于最顶层;False 正常显示

此功能常用于桌面便签等应用,确保窗口始终位于其他软件之上,同时不影响其他软件的操作。

通过tk.winfo_width()、tk.winfo_height()、tk.winfo_x()和tk.winfo_y()等方法,可以获取窗口的当前尺寸和位置信息。


# 获取屏幕的大小;
height = tk.winfo_height()
width = tk.winfo_width()
# 获取窗体的位置
x = tk.winfo_x()
y = tk.winfo_y()
通常结合.update()使用,获取窗口改变之后的数据。
我们可以用bind来记录。
tk.bind("", update_test)#绑定事件

def update_test(e):
    tk.update()
    # 获取屏幕的大小;
    height = tk.winfo_height()
    width = tk.winfo_width()
    # 获取窗体的位置
    x = tk.winfo_x()
    y = tk.winfo_y()
    print(width, height, x, y)
tk.bind("", update_test)

使用tkinter.Label()类可以在窗口中添加文本标签,并通过grid()方法定位。


tkinter.Label(tk,text='标签1(0,0)').grid(column=0,row=0)#column表示x,row表示y

那如何来理解这个参数呢?
grid中参数,依然可以把他看做是x,y,当两个标签中间没有数据时,就会自然缩进。
如图2,其中没有2,所以就会自动将2省去。
如图三中,坐标就是确定这些小方格。设置标签样式:

tkinter.Label(tk,text='标签1(0,0)',background='red',font=30,).grid(column=0,row=0)#x,y
tkinter.Label(tk,text='标签1(1,1)',foreground='red').grid(column=1,row=1)#x,y

background='red'#标签背景颜色
font=30#字体大小
foreground='red'#字体颜色

通过tk.bind()方法,可以将特定的事件(如按键、鼠标点击)与处理函数绑定。


button=Button(tk, text="事件调用", fg="blue",bd=2,width=8,command=update_test).grid(column=1,row=5)

每次触发绑定的事件时,系统会自动调用对应的处理函数执行相应操作。

利用tkinter.PhotoImage()加载图片,并通过Label控件的image属性将图片嵌入窗口。


photo = tkinter.PhotoImage(file="图片.png")#file:t图片路径
imgLabel = tkinter.Label(tk,image=photo).grid(column=1,row=6)#把图片整合到标签类中

 

以下是整合上述功能的完整代码示例。


import tkinter
from tkinter import *
tk=tkinter.Tk()
tk.title("窗口")#设置窗口名称
tk.geometry("300x150+700+300")
"""width x height+x+y,分别对应,窗口 宽,高,以及窗口出现的坐标
    桌面的坐标系:以桌面左上角为(0,0)向右为x轴正半轴,向下为y轴正半轴"""
w = tk.winfo_screenwidth()#获取屏幕宽
h = tk.winfo_screenheight()#获取屏幕高
print(w,h)
tk.iconbitmap('favicon.ico')#设置窗口图标,将ico放在同级目录下。
# 设置背景色,以“蓝色”为例
tk["background"] ="#7AC5CD"# "blue"
tk.attributes("-alpha",1)#设置窗口透明度,透明度的值是:0~1 可以是小数点,0:全透明;1:全不透明
tk.attributes("-toolwindow", True)#有退出,可以移动,工具样式:True 只有退出按钮,也没有图标; False 正常的窗体样式
#tk.overrideredirect(True)#无退出,不能移动,无工具栏
#tk.attributes("-fullscreen", True)#全屏模式:True 全屏;False 正常显示
tk.attributes("-topmost", True)#窗体置顶:True 所有窗口中处于最顶层;False 正常显示
# 获取屏幕的大小;
height = tk.winfo_height()
width = tk.winfo_width()
# 获取窗体的位置
x = tk.winfo_x()
y = tk.winfo_y()
print(width,height,x,y)
def update_test():
    tk.update()
    # 获取屏幕的大小;
    height = tk.winfo_height()
    width = tk.winfo_width()
    # 获取窗体的位置
    x = tk.winfo_x()
    y = tk.winfo_y()
    print(width, height, x, y)
# tk.bind("<Configure>", update_test)#绑定事件,窗体的改变事件
tkinter.Label(tk,text='标签1(0,0)',background='red',font=30,).grid(column=0,row=0)#x,y,设置标签,grid设置位置
tkinter.Label(tk,text='标签1(1,1)',foreground='red').grid(column=1,row=1)#x,y
tkinter.Label(tk,text='标签2').grid(column=4,row=3)
tkinter.Label(tk,text='标签3').grid(column=3,row=4)
 
button=Button(tk, text="事件调用", fg="blue",bd=2,width=8,command=update_test).grid(column=1,row=5)#按钮,添加按钮事件
 
photo = tkinter.PhotoImage(file="Figure_1.png")#file:t图片路径
imgLabel = tkinter.Label(tk,image=photo).grid(column=1,row=6)#把图片整合到标签类中
tk.mainloop()

本文介绍了Tkinter中常用的窗口及控件设置函数,更多相关内容可参考本站往期文章或继续浏览后续教程,感谢支持。

相关标签:

本站声明

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

Python 相关产品和应用

全部下载

专题列表