#趣味学Python——使用tkinter设计任意形状的窗口
准备一张背景为白底的图片。
自定义照片制作教程:https://blog.csdn.net/qingdaoyin/article/details/106057577
import tkinter
from PIL import Image, ImageTk
dog = tkinter.Tk()
# 设置图片描绘的坐标,注意乘号是字母x
dog.geometry('500x500+200+100')
# 不允许修改大小
dog.resizable(False, False)
# 不显示标题栏
dog.overrideredirect(True)
# 设置白色透明色,这样图片中所有白色区域都被认为是透明的了
dog.wm_attributes('-transparentcolor', 'white')
# 打开图片并设置尺寸
image = Image.open(r'C:\Desktop\2.png').resize((500, 500))
image = ImageTk.PhotoImage(image)
lbImage = tkinter.Label(dog, image=image)
lbImage.pack(fill=tkinter.BOTH, expand=tkinter.YES)
# 鼠标左键按下时设置为1表示可移动窗口,抬起后不可移动
canMove = tkinter.IntVar(root, value=0)
# 记录鼠标左键按下的位置
X = tkinter.IntVar(root, value=0)
Y = tkinter.IntVar(root, value=0)
# 鼠标左键按下时的事件处理函数
def onLeftButtonDown(event):
X.set(event.x)
Y.set(event.y)
canMove.set(1)
lbImage.bind('' , onLeftButtonDown)
# 鼠标移动时的事件处理函数
def onLeftButtonMove(event):
if canMove.get()==0:
return
newX = dog.winfo_x()+(event.x-X.get())
newY = dog.winfo_y()+(event.y-Y.get())
g = f'500x500+{newX}+{newY}'
dog.geometry(g)
lbImage.bind('' , onLeftButtonMove)
# 鼠标左键抬起时的事件处理函数
def onLeftButtonUp(event):
canMove.set(0)
lbImage.bind('' , onLeftButtonUp)
# 鼠标右键抬起时的事件处理函数(关闭事件)
def onRightButtonUp(event):
dog.destroy()
lbImage.bind('' , onRightButtonUp)
dog.mainloop()
参数 | 鼠标事件 |
---|---|
< Button-1> | 鼠标左键单击 |
< Button-2> | 鼠标中键单击 |
< Button-3> | 鼠标右键单击 |
< B1-Motion> | 鼠标左键拖动 |
< B2-Motion> | 鼠标中键拖动 |
< B3-Motion> | 鼠标右键拖动 |
< ButtonRelease-1> | 鼠标左键释放 |
< ButtonRelease-1> | 鼠标中键释放 |
< ButtonRelease-1> | 鼠标右键释放 |
< Double-Button-1> | 鼠标左键双击 |
< Double-Button-2> | 鼠标中键双击 |
< Double-Button-3> | 鼠标右键双击 |