今天我教大家做tkinter窗口美化

第一章 · tkinter内部美化功能

  1. 窗口透明化
  2. 窗口居中
  3. 窗口最大最小化
  4. 删除窗口标题栏
  5. 窗口大小调整的设置

1.窗口透明化

可以通过调整第二个值来设置透明度

透明度数值: 0 ~ 1 

from tkinter import *

root = Tk()
root.attributes("-alpha",0.5)

# 开始主窗口循环
root.mainloop()

 效果图:

 显然易见,窗口已经透明了一半了

最后再补充一下,数值越大,越不透明

2.窗口居中

其实这个不是通过一个内置函数直接搞定的,道理是先获取屏幕的高度和宽度,在通过计算,把窗口居中,关键还在geometry这个函数

我们先获取屏幕的高度和宽度:

from tkinter import *

print(Tk().winfo_screenwidth())
print(Tk().winfo_screenheight())

会返回你的窗口高度和宽度

我们把窗口居中的代码:

from tkinter import *

root = Tk()
width = 100
height = 100

root.geometry(
    f"{str(width)}x{str(height)}+"+
    f"{int((root.winfo_screenwidth() - width) / 2)}+"+
    f"{int((root.winfo_screenheight() - height) / 2)}"
)

# 开始主窗口循环
root.mainloop()

运行你就会发现,窗口移动到了屏幕中间

3.窗口最大最小化

1.窗口最小化

这个其实很简单,用iconify就行了

代码:

from tkinter import *

root = Tk()

# 窗口最小化
root.iconify()

# 开始主窗口循环
root.mainloop()

运行就会发现,窗口没有出现在屏幕上,但在任务栏却有显示

除了iconify,也可以用state

那么,问题来了,怎么用代码取消最小化呢?

其实还是很简单,一行代码直接搞定

from tkinter import *

root = Tk()

# 窗口最小化
root.iconify()

# 取消最小化,即为显示窗口 
root.state(NORMAL)

# 开始主窗口循环
root.mainloop()

结果是,窗口闪了一下,然后出现在屏幕上,如果没有iconify,那么窗口会出现在屏幕上,不会有任何变化

2.窗口最大化

这个要用到tkinter的state,

还有一点要说明,即使你已经用代码表示窗口得大小不能调整,他依旧会把窗口最大化

关于窗口大小调整的设置,请往下看

state函数的形参有:

iconic (最小化窗口)

normal (显示窗口,取消最小化)

withdrawn (撤回此窗口,即关闭)

zoomed (最大化窗口)

相信大家不用我货都已经明白了对吧?

既然如此,我就不上代码了

额额,好吧,代码还是要给的

from tkinter import *

root = Tk()

# 最大化窗口 
root.state("zoomed")

# 开始主窗口循环
root.mainloop()

运行就会发现,窗口占满了整个屏幕!

额,好吧,还有个任务栏呢

如果要缩小成原来的大小,用取消最小化的方法也能行

4.删除窗口的标题栏

一行代码直接搞定!

但,没有了标题栏,也就无法移动窗口了

但我们可以绘制一个标题栏,实现绘制标题栏,

至于详细代码,请看第二章

删除标题栏代码:

from tkinter import *

root = Tk()

# 删除标题栏
root.overrideredirect(True)
# True 删除标题栏,False 不删除标题栏

# 开始主窗口循环
root.mainloop()

运行之后,标题栏不见了,窗口只能在原始位置不能移动

5.窗口大小调整的设置

首先,调整初始大小的函数不用我说了吧?

我们来谈一谈窗口的后期调整

1.禁止手动调整大小

这个很简单, 就是用resizable

resizable的第一个参数调整宽度,第二个调整高度

如果为True,则窗口的某一边不能调整大小、拉伸窗口

如果形参为True、True,则都可以拉伸

root.resizable(True,True)
root.resizable(True,True)

如果形参为False、True,则宽度能拉伸

root.resizable(False,True)
root.resizable(False,True)

如果形参为True、False,则高度能拉伸

root.resizable(True,False)
root.resizable(True,False)

如果形参为False、False,则都不能拉伸

root.resizable(False,False)
root.resizable(False,False)

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐