10 Python 用 turtle tkinter PIL 开始我们的故事

79 阅读5分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。

Python由荷兰数学和计算机科学研究学会的吉多·范罗苏姆于1990年代初设计,作为一门叫做ABC语言的替代品。 Python提供了高效的高级数据结构,还能简单有效地面向对象编程。Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言, 随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。 Python解释器易于扩展,可以使用C语言或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。 Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。 自从20世纪90年代初Python语言诞生至2022年,它已被逐渐广泛应用于系统管理任务的处理和Web编程。

----------七夕就要来了,不论你是不是一个人,都祝你开心快乐啊-------------

效果:

 

完整代码获取,以及修改免费帮助:

点击链接加入群聊【懒笑翻-Python学习交流】:jq.qq.com/?_wv=1027&k…

完整代码实现:

"""
* @Author: xiaofang
* @Date: Create in 14:57 2022/8/3
* @Description: 我们的故事的开始

"""


"""
 建议把两人合照命名为 couple.png  本代码中有3处用到了图片,通过调用showImg方法,也可以在调用方法的地方修改名称也可
"""

from turtle import *
import tkinter as tk
from PIL import Image, ImageTk

font = ("华文行楷", 17, "normal")  # 正文格式
title = ("华文行楷", 30, "normal")  # 标题格式
render = {}
color = 'pink'


# 载入图片
def showImg(face, name, side=tk.TOP, rate=1.0):
    global render
    load = Image.open('{}.png'.format(name))
    size = (int(load.size[0] * rate), int(load.size[1] * rate))
    load = load.resize(size)
    render[name] = ImageTk.PhotoImage(load)
    img = tk.Label(face, image=render[name]).pack(side=side)


# 启动页面
class Init():
    def __init__(self, master):
        self.master = master
        self.master.config(width=600, height=400)
        self.face = tk.Frame(self.master)
        self.face.pack()

        text = '\n\n\n宝贝准备好开启我们的故事了吗\n\n'

        tk.Label(self.face, text=text, font=title).pack()
        tk.Button(self.face, text="开启我们的故事", font=font, command=self.next, bg=color).pack()

    def next(self):
        self.face.destroy()
        StoryBegin(self.master)

    # 正文页


# 开始页
class basedesk():
    def __init__(self, master):
        self.root = master
        self.root.config()
        self.root.title('开启我们的故事')
        self.root.geometry('600x450')
        self.root.resizable(False, False)
        Init(self.root)

    # 开始页


# 故事开始
class StoryBegin():
    def __init__(self, master):
        self.master = master
        self.master.config(width=600, height=400)
        self.face = tk.Frame(self.master)
        self.face.pack()

        text = '\n2020年年5月20日\n我们的故事开始\n' \
               '还记得我们发的官宣说说吗?\n' \
               '还我们一起看电影拍的照片'

        tk.Label(self.face, text=text, font=font).pack()
        tk.Button(self.face, text="继续我们的故事", command=self.next, bg=color).pack(side=tk.BOTTOM)

        showImg(self.face, 'couple', rate=1.5)

    def next(self):
        self.face.destroy()
        Milktea(self.master)

    # 测试页1


class Milktea():
    def __init__(self, master):
        self.master = master
        self.master.config(width=600, height=400)
        self.face = tk.Frame(self.master)
        self.face.pack()
        text = '\n随堂小测验开始~\n' \
               '还记得我最喜欢什么颜色吗?'
        tk.Label(self.face, text=text, font=font).pack()

        self.namestr = tk.StringVar()
        tk.Entry(self.face, textvariable=self.namestr, font=font).pack(side=tk.TOP)
        tk.Button(self.face, text="确定", command=self.judge, bg=color).pack(side=tk.TOP)

    def judge(self):
        if self.namestr.get() != '蓝色':
            tk.messagebox.askokcancel(title='警告', message='回答错误!\n提示:输入两个字哦~')
        else:
            self.story_continue()

    def story_continue(self):
        text = '\n回答正确~\n' \
               '我们都喜欢这个颜色\n' \
               '你说蓝色\n' \
               '还得是淡蓝色\n' \
               '当然我知道我的喜好你都记得\n'
        tk.Label(self.face, text=text, font=font).pack()
        tk.Button(self.face, text="继续我们的故事", command=self.next, bg=color).pack(side=tk.TOP)

    def next(self):
        self.face.destroy()
        Christmas(self.master)

    # 测试页2-1


class Christmas():
    def __init__(self, master):
        self.master = master
        self.master.config(width=600, height=400)
        self.face = tk.Frame(self.master)
        self.face.pack()
        text = '\n根据图片,你能看出这是哪一天吗?'
        tk.Label(self.face, text=text, font=font).pack()

        self.namestr = tk.StringVar()
        tk.Entry(self.face, textvariable=self.namestr, font=font).pack(side=tk.TOP)
        tk.Button(self.face, text="确定", command=self.judge, bg=color).pack(side=tk.TOP)
        showImg(self.face, 'couple', rate=1.5)

    def judge(self):
        if self.namestr.get() != '20200520':  # 时间修改在这里
            tk.messagebox.askokcancel(title='警告', message='回答错误!\n提示:输入格式比如:20200520')
        else:
            self.next()

    def next(self):
        self.face.destroy()
        Christmas2(self.master)

    # 测试页2-2


class Christmas2():
    def __init__(self, master):
        self.master = master
        self.master.config(width=600, height=400)
        self.face = tk.Frame(self.master)
        self.face.pack()
        text = '\n回答正确~\n是2020年05月20日\n' \
               '当然是我们在一起的第一天啦!'
        tk.Label(self.face, text=text, font=font).pack()
        text = '我们还拉了勾,\n' \
               '要在一起一辈子不分开的'
        tk.Label(self.face, text=text, font=font).pack()
        tk.Button(self.face, text="继续我们的故事", bg=color, command=self.next).pack(side=tk.TOP)

    def next(self):
        self.face.destroy()
        Heart(self.master)

    # 结尾页


class Heart():
    def __init__(self, master):
        self.master = master
        self.master.config()

        self.canvas = tk.Canvas(self.master, width=600, height=450)
        self.canvas.pack()

        self.tu = RawTurtle(self.canvas)
        self.tu.hideturtle()

        self.tu.home()
        self.tu.clear()
        self.tu.speed(0)
        self.tu.screen.delay(0)

        self.person(0, 50)
        s = '亲爱的宝贝:\n' \
            '  今天不是什么特别的日子,\n' \
            '  没有什么日子需要赋予特殊意义,\n' \
            '  因为我时时爱你,\n' \
            '  不需要在某个节点才袒露心意。'
        self.word(s, -100, -150)

    def go_to(self, x, y):
        self.tu.penup()
        self.tu.goto(x, y)
        self.tu.down()

    def ring(self, a, b, c, d):
        for i in range(a):
            self.tu.forward(b)
            if d == 'right':
                self.tu.right(c)
            else:
                self.tu.left(c)

    def heart(self, x, y, size):
        self.go_to(x, y)
        self.tu.left(150)
        self.tu.begin_fill()
        self.tu.forward(51 * size)
        self.ring(150, size, 0.3, 'right')
        self.ring(210, size, 0.786, 'right')
        self.tu.left(120)
        self.ring(210, size, 0.786, 'right')
        self.ring(150, size, 0.3, 'right')
        self.tu.forward(51 * size)
        self.tu.end_fill()

    def person(self, xbias, ybias):
        # 头部
        self.tu.color('black')
        self.go_to(-228, 72 - ybias)
        self.tu.pensize(3)
        self.tu.left(150)
        self.ring(350, 1, 0.8, 'right')

        # 手臂
        self.tu.left(150)
        self.tu.forward(70)
        self.tu.left(90)
        self.tu.forward(10)
        self.ring(200, 0.1, 0.9, 'right')
        self.tu.forward(10)
        self.tu.left(90)
        self.tu.forward(20)
        self.ring(200, 0.1, 0.9, 'right')
        self.tu.forward(10)
        self.tu.left(90)
        self.ring(200, 0.2, 0.9, 'right')
        self.tu.left(100)
        self.tu.left
        self.tu.forward(80)

        # 身体
        self.go_to(-228, 72 - ybias)
        self.tu.left(40)
        self.tu.forward(40)
        self.ring(120, 0.2, 0.9, 'left')

        self.go_to(-219, 52 - ybias)
        self.tu.right(95)
        self.tu.forward(80)
        self.tu.right(85)
        self.ring(205, 0.1, 0.9, 'left')
        self.tu.forward(40)
        self.tu.left(90)
        self.tu.forward(10)
        self.ring(200, 0.1, 0.9, 'right')
        self.tu.forward(10)
        self.tu.left(90)
        self.tu.forward(40)
        self.ring(205, 0.1, 0.9, 'left')
        self.tu.right(92)
        self.tu.forward(90)

        # 左眼
        self.go_to(-217, 155 - ybias)
        self.tu.fillcolor('black')
        self.tu.begin_fill()
        self.tu.circle(5)
        self.tu.end_fill()

        # 右眼
        self.go_to(-169, 158 - ybias)
        self.tu.fillcolor('black')
        self.tu.begin_fill()
        self.tu.circle(5)
        self.tu.end_fill()

        # 微笑
        self.go_to(-210, 132 - ybias)
        self.tu.right(180)
        self.ring(200, 0.2, 0.9, 'left')

        # 腮红
        self.tu.color('#ffa0a0')
        self.tu.pensize(5)
        self.tu.left(170)

        self.go_to(-235, 135 - ybias)
        self.tu.forward(11)
        self.go_to(-225, 135 - ybias)
        self.tu.forward(11)
        self.go_to(-155, 140 - ybias)
        self.tu.forward(11)
        self.go_to(-165, 140 - ybias)
        self.tu.forward(11)

        # 比心
        self.tu.setheading(0)
        self.heart(-35, 135 - ybias, 0.10)
        self.tu.setheading(0)
        self.heart(5, 150 - ybias, 0.13)
        self.tu.setheading(0)
        self.heart(52, 165 - ybias, 0.15)

    def word(self, s, x, y):
        self.go_to(x, y)
        self.tu.write(s, align="left", font=("华文行楷", 20, "normal"))


# 学习中遇到问题没人解答?小编创建了一个Python学习交流QQ群:732481539
# 寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!

if __name__ == '__main__':
    root = tk.Tk()
    basedesk(root)
    root.mainloop()