Tkinter自定义窗口生成代码
时间: 2024-12-30 15:35:41 浏览: 20
### 使用 Tkinter 创建自定义窗口
为了创建带有自定义样式的窗口,可以利用 `Tkinter` 的灵活性来调整窗口的各种属性。下面展示了一个较为完整的例子,其中不仅设置了窗口的基础样式,还实现了自定义标题栏的功能。
#### 基础窗口设置与组件添加
首先,通过导入必要的模块并初始化主窗口来进行基础配置:
```python
import tkinter as tk
from PIL import Image, ImageTk # 需要安装Pillow库用于处理图标
root = tk.Tk()
root.overrideredirect(True) # 移除默认的窗口装饰器(边框和标题栏)
width = 600
height = 400
screen_width = root.winfo_screenwidth()
screen_height = root.winfo_screenheight()
x_cordinate = int((screen_width/2) - (width/2))
y_cordinate = int((screen_height/2) - (height/2))
root.geometry("{}x{}+{}+{}".format(width,
height, x_cordinate, y_cordinate)) # 居中显示窗口
```
这段代码移除了标准的窗口边界,并计算出使窗口居中的位置[^1]。
#### 添加自定义标题栏
接着,在窗口顶部加入一个模拟标题栏的部分,允许拖动窗口移动,并放置一些基本控制按钮(最小化、最大化/还原、关闭)。这里假设已经准备好了四个状态图标的图片文件。
```python
title_bar = tk.Frame(root, bg='#2e2e2e', relief='raised', bd=2)
title_bar.pack(fill=tk.X, side=tk.TOP)
close_button = tk.Button(title_bar, text='✕', command=root.destroy, bg="#2e2e2e", fg='white')
minimize_button = tk.Button(title_bar, text='—', command=root.iconify, bg="#2e2e2e", fg='white')
# 加载图标资源
icon_close = Image.open("state_closeIcon.png")
icon_minimize = Image.open("state_miniIcon.png")
photo_close = ImageTk.PhotoImage(icon_close)
photo_minimize = ImageTk.PhotoImage(icon_minimize)
close_button.config(image=photo_close)
minimize_button.config(image=photo_minimize)
close_button.pack(side=tk.RIGHT)
minimize_button.pack(side=tk.LEFT)
def get_pos(event):
global xpos, ypos
global click
click = True
xpos, ypos = event.x_root, event.y_root
def move_window(event):
global click
global xpos, ypos
if click:
dx = event.x_root - xpos
dy = event.y_root - ypos
new_xpos = root.winfo_x() + dx
new_ypos = root.winfo_y() + dy
pos_str = "600x400+" + str(new_xpos) + "+" + str(new_ypos)
root.geometry(pos_str)
xpos, ypos = event.x_root, event.y_root
def release_click(event):
global click
click = False
title_bar.bind("<ButtonPress-1>", get_pos)
title_bar.bind("<B1-Motion>", move_window)
title_bar.bind("<ButtonRelease-1>", release_click)
```
上述代码片段展示了如何构建一个可交互的标题栏,支持拖拽移动窗口以及执行相应的命令操作[^4]。
#### 完整示例总结
以上就是基于 `Tkinter` 实现的一个简单而功能齐全的自定义窗口案例。它去掉了系统的原生标题栏,取而代之的是由开发者自行设计的一套界面元素,从而能够更好地适应特定应用场景的需求。
阅读全文