tkinter制作任意图形窗口

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'D:\bg.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(dog, value=0)
# 记录鼠标左键按下的位置
X = tkinter.IntVar(dog, value=0)
Y = tkinter.IntVar(dog, 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()

你可能感兴趣的:(python,开发语言)