python+tkinter一步步展示漂亮的棒棒糖和云朵

Posted dhjabc_1

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python+tkinter一步步展示漂亮的棒棒糖和云朵相关的知识,希望对你有一定的参考价值。

作为专题的效果,也记录下这些代码,分享给大家,希望大家喜欢。

一、先上个效果图吧

在这里插入图片描述
换一个棒棒糖的图,生活甜蜜蜜。
在这里插入图片描述
好的,下面慢慢开始介绍整个实现过程。

二、准备图片素材

在这里插入图片描述
在这里插入图片描述

三、搭个框架,上个云朵图

import tkinter
from PIL import ImageTk,Image

root = tkinter.Tk()
root.geometry('500x500+200+100')
root.resizable(False,False)
root.overrideredirect(True)
root.wm_attributes('-transparentcolor','red')
root.wm_attributes('-topmost',1)

image = Image.open('云朵3.png').resize((500,500))
image = ImageTk.PhotoImage(image)
lbImage = tkinter.Label(root,image=image)
lbImage.pack(fill=tkinter.BOTH,expand=tkinter.YES)
root.mainloop()

在这里插入图片描述
云朵出来了。

四、增加点文字

人生苦短,我用python,然后也换个棒棒糖的图。好看点。

lbImage = tkinter.Label(root,
                        text="人生苦短\\n我用python\\n\\n\\n\\n",
                        font=("微软雅黑", 26),
                        foreground='blue',
                        compound="center",
                        image=image)

完整代码:

import tkinter
from PIL import ImageTk,Image

root = tkinter.Tk()
root.geometry('500x500+200+100')
root.resizable(False,False)
root.overrideredirect(True)
root.wm_attributes('-transparentcolor','white')
root.wm_attributes('-topmost',1)
root.config(highlightthickness=0)

image = Image.open('timg.jpg').resize((500,500))
# image = Image.open('云朵3.png').resize((500,500))

image = ImageTk.PhotoImage(image)
lbImage = tkinter.Label(root,
                        text="人生苦短\\n我用python\\n\\n\\n\\n",
                        font=("微软雅黑", 26),
                        foreground='blue',
                        compound="center",
                        image=image)
lbImage.config(highlightthickness=0)
lbImage.pack(fill=tkinter.BOTH,expand=tkinter.YES)

root.mainloop()

五、增加鼠标移动效果

(一)记录变量

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('<Button-1>',onLeftButtonDown)

(三)鼠标左键弹起

def onLeftButtonUp(event):
    canMove.set(0)

(四)鼠标移动

def onLeftButtonMove(event):
    if canMove.get()==0:
        return
    newX = root.winfo_x()+(event.x-X.get())
    newY = root.winfo_y()+(event.y-Y.get())
    root.geometry(f'500x500+{newX}+{newY}')

lbImage.bind('<B1-Motion>',onLeftButtonMove)

完整代码:

import tkinter
from PIL import ImageTk,Image

root = tkinter.Tk()
root.geometry('500x500+200+100')
root.resizable(False,False)
root.overrideredirect(True)
root.wm_attributes('-transparentcolor','white')
root.wm_attributes('-topmost',1)
root.config(highlightthickness=0)

image = Image.open('timg.jpg').resize((500,500))
# image = Image.open('云朵3.png').resize((500,500))

image = ImageTk.PhotoImage(image)
lbImage = tkinter.Label(root,
                        text="人生苦短\\n我用python\\n\\n\\n\\n",
                        font=("微软雅黑", 26),
                        foreground='blue',
                        compound="center",
                        image=image)
lbImage.config(highlightthickness=0)
lbImage.pack(fill=tkinter.BOTH,expand=tkinter.YES)

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('<Button-1>',onLeftButtonDown)

def onLeftButtonUp(event):
    canMove.set(0)

lbImage.bind('<ButtonRelease-1>',onLeftButtonUp)

def onLeftButtonMove(event):
    if canMove.get()==0:
        return
    newX = root.winfo_x()+(event.x-X.get())
    newY = root.winfo_y()+(event.y-Y.get())
    root.geometry(f'500x500+{newX}+{newY}')

lbImage.bind('<B1-Motion>',onLeftButtonMove)

root.mainloop()

六、自己动起来

import tkinter
from PIL import ImageTk,Image

root = tkinter.Tk()
root.geometry('500x500+200+100')
root.resizable(False,False)
root.overrideredirect(True)
root.wm_attributes('-transparentcolor','white')
root.wm_attributes('-topmost',1)
root.config(highlightthickness=0)

image = Image.open('timg.jpg').resize((500,500))
image = ImageTk.PhotoImage(image)
lbImage = tkinter.Label(root,
                        # padx=10,
                        # pady=20,
                        # background="pink",
                        # relief="ridge",
                        # borderwidth=10,
                        # 文本
                        text="人生苦短\\n我用python\\n\\n\\n\\n",
                        font=("微软雅黑", 26),
                        # justify="center",
                        foreground='blue',
                        # underline=4,
                        # anchor="ne",
                        # 图像
                        # image=normal_image,
                        compound="center",
                        image=image)
lbImage.config(highlightthickness=0)
lbImage.pack(fill=tkinter.BOTH,expand=tkinter.YES)

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('<Button-1>',onLeftButtonDown)

def onLeftButtonUp(event):
    canMove.set(0)

lbImage.bind('<ButtonRelease-1>',onLeftButtonUp)

def onLeftButtonMove(event):
    if canMove.get()==0:
        return
    newX = root.winfo_x()+(event.x-X.get())
    newY = root.winfo_y()+(event.y-Y.get())
    root.geometry(f'500x500+{newX}+{newY}')

lbImage.bind('<B1-Motion>',onLeftButtonMove)



# 定义函数
def getMove():
    newX = root.winfo_x()+1
    newY = root.winfo_y()+1
    root.geometry(f'500x500+{newX}+{newY}')
    root.after(100, getMove)  # 每隔1s调用函数 gettime 自身获取时间

# 调用函数
getMove()

root.mainloop()

七、不足

可以看到棒棒糖旁边有很多白色的锯齿状的东东,这个应该是图片处理的需要优化的地方,而且动态图在拖动的时候会闪动,需要优化。

八、通过canvas实现了一个版本

在这里插入图片描述
看起来会舒服些,大家有兴趣想知道怎么实现的吗?

欢迎持续关注,欲知详情如何,请听下回分解!

以上是关于python+tkinter一步步展示漂亮的棒棒糖和云朵的主要内容,如果未能解决你的问题,请参考以下文章

python+tkinter一步步展示漂亮的棒棒糖和云朵

python+tkinter一步步展示漂亮的棒棒糖和云朵

python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜

python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜

python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜

python+tkinter+canvas实现天降棒棒糖,生活甜甜蜜蜜