学python的第十五天

今天是复习了第十二天的内容图形用户界面开发--wxPython

还有一位好友生日,送上生日祝福,源码,和视频效果放在下方了

注:生日蛋糕源码借鉴于其他博主,原地址:用Python画一个生日蛋糕_python画蛋糕,生日快乐-CSDN博客icon-default.png?t=N7T8https://blog.csdn.net/m0_46207115/article/details/124093010

先看效果:

 

 复习代码:

# 开发人:wby
# 类型:python
# coding = utf-8
# 开发时间:2024/4/14  
# 复习第十二天:图形用户界面wxPython + 送朋友的生日祝福
# import wx  # 导入wxPython模块
#
# app = wx.App()  # 创建应用程序对象
# wby = wx.Frame(None, title='测试', size=(320, 150), pos=(550, 350))  # 创建窗口对象,设置参数
# wby.Show()  # 显示窗口
# app.MainLoop()  # 进入主事件循环

# 自定义
import wx
import random
# 定义粉色
PINK_COLOUR = (255, 192, 203)


class IIIWby(wx.Dialog):
    def __init__(self):
        super().__init__(None, title='祝君好', size=(320, 150))
        self.CentreOnScreen()

        self.quotes = ['人生最难的是遇见,更难的其实是重逢。',
                       '人是不容易看清楚自己的。',
                       '你不知道,一听到你的声音,我就很幸福了。',
                       '回忆是一条没有归途的路,以往的一切春天都无法复原。',
                       '有时候不喜欢你的人对你不好,其实就是对你好。',
                       '每一个不曾起舞的日子,都是对生命的辜负。',
                       'Out of sight,out of love. (看不到了,也就不再爱了)',
                       '不乱于心,不困于情,不畏将来,不念过往,如此,安好!',
                       '死亡时一面镜子,反射出生命在它面前做的各种姿态是如此的徒劳。',
                       '除了拼命工作之外,不存在第二条通向成功之路。一个人想要跨越到什么样的阶层,过什么样的生活,就看他怎样对待自己的工作,',
                       '拼不一定活,不拼一定死。',
                       '你若盛开,清风自来;你若精彩,天自安排。',
                       '我们必须接受有限的失望,但是千万不可失去无限的希望。'
                       '当你凝视深渊时,深渊也在凝视你。',
                       '你是我人生中唯一的主角,我却只能演配角。',
                       '我愿做一个不动声色的大人了。不准情绪化,不准偷偷想念,不准回头看,去过自己另外的生活。',
                       '你走之后,我再也没见过这么好看的天空。',
                       '你走,我走,来生再见。']

        random_1 = random.choice(self.quotes)
        # 添加窗口控件
        panel = wx.Panel(parent=self)  # 创建面板对象
        panel.SetBackgroundColour(PINK_COLOUR)  # 设置面板的背景颜色为粉色
        self.statictext = wx.StaticText(parent=panel, label=random_1)  # 创建静态文本

        # 创建垂直方向盒子布局管理器对象iiivbox
        iiivbox = wx.BoxSizer(wx.VERTICAL)
        iiivbox.Add(panel, 1, wx.EXPAND | wx.ALL, 10)
        # 设置面板的布局管理器为iiivbox
        self.SetSizer(iiivbox)
        self.Fit()


class IIWby(wx.Dialog):
    def __init__(self):
        super().__init__(None, title='警告!', size=(320, 150))
        self.CentreOnScreen()
        # 添加窗口控件
        panel = wx.Panel(parent=self)  # 创建面板对象
        panel.SetBackgroundColour(PINK_COLOUR)  # 设置面板的背景颜色为粉色
        self.statictext = wx.StaticText(parent=panel, label='说了不要碰我,不听是吧,想死是吧')  # 创建静态文本

        # 创建垂直方向盒子布局管理器对象iivbox
        iivbox = wx.BoxSizer(wx.VERTICAL)
        iivbox.Add(panel, 1, wx.EXPAND | wx.ALL, 10)
        # 设置面板的布局管理器为iivbox
        self.SetSizer(iivbox)
        self.Fit()


class IWby(wx.Dialog):
    def __init__(self):
        super().__init__(None, title='哼', size=(320, 150))
        self.CentreOnScreen()
        # 添加窗口控件
        panel = wx.Panel(parent=self)  # 创建面板对象
        panel.SetBackgroundColour(PINK_COLOUR)  # 设置面板的背景颜色为粉色
        self.statictext = wx.StaticText(parent=panel, label='点就点吧,真拿你没办法')  # 创建静态文本

        # 创建垂直方向盒子布局管理器对象ivbox
        ivbox = wx.BoxSizer(wx.VERTICAL)
        ivbox.Add(panel, 1, wx.EXPAND | wx.ALL, 10)
        # 设置面板的布局管理器为ivbox
        self.SetSizer(ivbox)
        self.Fit()


class Wby(wx.Frame):  # 自定义窗口父类Wby
    def __init__(self):
        super().__init__(None, title='反骨', size=(300, 350))
        self.CentreOnScreen()
        # 添加窗口控件
        panel = wx.Panel(parent=self)  # 创建面板对象
        panel.SetBackgroundColour(PINK_COLOUR)  # 设置面板的背景颜色为粉色
        self.statictext = wx.StaticText(parent=panel, label='我是反骨仔')  # 创建静态文本
        b1 = wx.Button(parent=panel, id=10, label='别点我!')  # 创建按钮对象
        b2 = wx.Button(parent=panel, id=11, label='不许碰我!')  # 创建按钮对象
        b3 = wx.Button(parent=panel, id=12, label='Bye!')  # 创建按钮对象

        # 创建水平方向盒子布局管理器对象hbox
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        # 添加b1按钮到hbox
        hbox.Add(b1, proportion=1, flag=wx.ALIGN_CENTER | wx.ALL, border=10)
        # 添加b2按钮到hbox
        hbox.Add(b2, proportion=1, flag=wx.ALIGN_CENTER | wx.ALL, border=10)
        # 添加b3按钮到hbox
        hbox.Add(b3, proportion=1, flag=wx.ALIGN_CENTER | wx.ALL, border=10)

        # 创建垂直方向盒子布局管理器对象vbox
        vbox = wx.BoxSizer(wx.VERTICAL)
        # 添加静态文本到vbox
        vbox.Add(self.statictext, proportion=1, flag=wx.CENTER | wx.FIXED_MINSIZE | wx.TOP, border=10)
        # 添加hbox到vbox
        vbox.Add(hbox, proportion=1, flag=wx.CENTER)
        # 设置面板的布局管理器为vbox
        panel.SetSizer(vbox)

        self.Bind(wx.EVT_BUTTON, self.next, id=10)  # 绑定事件
        self.Bind(wx.EVT_BUTTON, self.next, id=11)  # 绑定事件
        self.Bind(wx.EVT_BUTTON, self.next, id=12)  # 绑定事件

    def next(self, event):  # 事件处理函数
        event_id = event.GetId()  # 获取事件ID
        print(event_id)
        if event_id == 10:  # 判断事件ID
            iwby = IWby()
            iwby.ShowModal()
            iwby.Destroy()
        elif event_id == 11:
            iiwby = IIWby()
            iiwby.ShowModal()
            iiwby.Destroy()
        else:
            iiiwby = IIIWby()
            iiiwby.ShowModal()
            iiiwby.Destroy()
            self.Close()  # 关闭窗口


app = wx.App()  # 创建应用程序对象
kpl = Wby()  # 创建窗口对象
kpl.Show()  # 显示窗口
app.MainLoop()  # 进入主事件循环

生日祝福效果:

 

祝好友张总,生日快乐 ,代码如下:

# 开发人:wby
# 类型:python
# coding = utf-8
# 开发时间:2024/4/14  17:18
import wx

# 定义粉色
PINK_COLOUR = (255, 192, 203)
import turtle as t
import math as m
import random as r


class Greeting():
    def run(self):
        t.Turtle().screen.delay(0)  # 【画的更快 可以注释掉】

        def drawX(a, i):
            angle = m.radians(i)
            return a * m.cos(angle)

        def drawY(b, i):
            angle = m.radians(i)
            return b * m.sin(angle)

        # 设置背景颜色,窗口位置以及大小  可以放到__init__里面
        t.bgcolor("#d3dae8")
        t.setup(700, 800)
        t.penup()
        t.goto(150, 0)
        t.pendown()

        def layer_0():  # 第一层蛋糕

            # 蛋糕第一层白色糕身
            t.pencolor("white")
            t.fillcolor("#fef5f7")
            t.begin_fill()
            for i in range(180):
                x = drawX(150, i)
                y = drawY(-60, i) - 120
                t.goto(x, y)
            t.goto(x, y + 120)

            for i in range(180):
                x = drawX(-150, i)
                y = drawY(60, i)
                t.goto(x, y)
            t.end_fill()

            # 蛋糕第一层的顶部奶油(粉色)
            t.pencolor("#f2d7dd")
            t.begin_fill()
            for i in range(360):
                x = drawX(150, i)
                y = drawY(60, i)
                t.goto(x, y)
            t.fillcolor("#f2d7dd")  # 奶油色
            t.end_fill()

            # 粉色奶油下溢(类似于瀑布蛋糕)
            t.begin_fill()
            t.pensize(4)
            t.pencolor("#f2d7dd")
            for i in range(1800):
                x = drawX(150, 0.1 * i)
                y = drawY(-20, i) - 85
                t.goto(x, y)
            t.goto(-150, 0)
            t.pensize(1)
            for i in range(0, 180):
                x = drawX(-150, i)
                y = drawY(-60, i)
                t.goto(x, y)
            t.fillcolor("#f2d7dd")
            t.end_fill()

        def layer_1():  # 第二层蛋糕

            # 第二层蛋糕打底rose_pink色
            t.pencolor("#ffa79d")  # rose_pink
            t.begin_fill()
            t.pu()
            t.goto(120, 0)
            t.pd()
            t.begin_fill()
            for i in range(360):
                x = drawX(120, i)
                y = drawY(48, i)
                t.goto(x, y)
            t.fillcolor("#ffa79d")
            t.end_fill()

            t.begin_fill()
            t.fillcolor("#ffa79d")

            for i in range(180):
                x = drawX(120, i)
                y = drawY(48, i) + 70
                t.goto(x, y)
            t.goto(-120, 0)

            t.end_fill()
            t.pu()
            t.goto(120, 70)

            # 浇头蓝色蛋糕
            t.pd()
            t.begin_fill()
            t.pencolor('#cbd9f9')  # "#cbd9f9" blue color
            for i in range(360):
                x = drawX(120, i)
                y = drawY(48, i) + 70
                t.goto(x, y)

            t.fillcolor("#cbd9f9")
            # t.end_fill()  # 可加可不加,加了第二层蛋糕顶端就是蓝色

            # 蓝色中心为顶向下浇浇头
            t.begin_fill()
            t.pensize(8)
            t.goto(120, 70)
            for s in range(0, 12):  # 相当于涂抹糕身的特效
                for i in range(180):
                    x = drawX(120, i)
                    y = drawY(-48, i) + 70 - 5 * s
                    t.goto(x, y)
                for i in range(180):
                    x = drawX(-120, i)
                    y = drawY(-48, i) + 70 - 5.1 * s
                    t.goto(x, y)

            # 蓝色蛋糕的顶面白色涂层
            t.pu()
            t.goto(120, 70)
            t.pd()
            t.pencolor("#fff0f3")
            t.begin_fill()
            for i in range(360):
                x = drawX(120, i)
                y = drawY(48, i) + 70
                t.goto(x, y)
            t.fillcolor("#fff0f3")
            t.end_fill()

            # 蓝色蛋糕的顶面白色涂层里的涂层
            t.pu()
            t.goto(110, 70)
            t.pd()
            t.pencolor("#fff9fb")
            t.begin_fill()
            for i in range(360):
                x = drawX(110, i)
                y = drawY(44, i) + 70
                t.goto(x, y)
            t.fillcolor("#fff9fb")
            t.end_fill()

            # 第二层蛋糕圆弧部分(类似于瀑布蛋糕)
            t.pu()
            t.goto(120, 70)
            t.pd()
            t.begin_fill()
            t.pensize(4)
            t.pencolor("#fff0f3")
            for i in range(1800):
                x = drawX(120, 0.1 * i)
                y = drawY(-18, i) + 10
                t.goto(x, y)
            t.goto(-120, 70)
            t.pensize(1)
            for i in range(180, 360):
                x = drawX(120, i)
                y = drawY(48, i) + 70
                t.goto(x, y)
            t.fillcolor("#fff0f3")
            t.end_fill()

        def layer_2():  # 第三层棕色蛋糕部分

            # 棕色蛋糕糕身
            t.pencolor("#6f3732")
            t.pu()
            t.goto(80, 70)
            t.pd()
            t.begin_fill()
            t.pencolor("#6f3732")
            t.goto(80, 120)
            for i in range(180):
                x = drawX(80, i)
                y = drawY(32, i) + 120
                t.goto(x, y)
            t.goto(-80, 70)
            for i in range(180, 360):
                x = drawX(80, i)
                y = drawY(32, i) + 70
                t.goto(x, y)
            t.fillcolor("#6f3732")
            t.end_fill()

            # 棕色蛋糕的表面涂层
            t.pu()
            t.goto(80, 120)
            t.pd()
            t.pencolor("#ffaaa0")
            t.begin_fill()
            for i in range(360):
                x = drawX(80, i)
                y = drawY(32, i) + 120
                t.goto(x, y)
            t.fillcolor("#ffaaa0")
            t.end_fill()

            # 涂层内圈
            t.pu()
            t.goto(70, 120)
            t.pd()
            t.pencolor("#ffc3be")
            t.begin_fill()
            for i in range(360):
                x = drawX(70, i)
                y = drawY(28, i) + 120
                t.goto(x, y)
            t.fillcolor("#ffc3be")
            t.end_fill()

            # 第二层涂层圆弧部分(类似于瀑布蛋糕)
            t.pu()
            t.goto(80, 120)
            t.pd()
            t.begin_fill()
            t.pensize(3)
            t.pencolor("#ffaaa0")
            for i in range(1800):
                x = drawX(80, 0.1 * i)
                y = drawY(-12, i) + 80
                t.goto(x, y)
            t.goto(-80, 120)
            t.pensize(1)
            for i in range(180, 360):
                x = drawX(80, i)
                y = drawY(32, i) + 120
                t.goto(x, y)
            t.fillcolor("#ffaaa0")
            t.end_fill()

        def candle_part():  # 蜡烛
            t.pu()
            t.goto(0, 120)
            t.pd()
            t.pencolor("#b1c9e9")
            t.begin_fill()
            for i in range(360):
                x = drawX(4, i)
                y = drawY(1, i) + 130
                t.goto(x, y)
            t.goto(4, 180)
            for i in range(540):
                x = drawX(4, i)
                y = drawY(1, i) + 180
                t.goto(x, y)
            t.goto(-4, 130)
            t.fillcolor("#b1c9e9")
            t.end_fill()
            t.pencolor("white")
            t.pensize(2)
            for i in range(1, 6):
                t.goto(4, 130 + 10 * i)
                t.pu()
                t.goto(-4, 130 + 10 * i)
                t.pd()
            t.pu()
            t.goto(0, 180)
            t.pd()
            t.goto(0, 190)
            t.pensize(1)
            t.pu()
            t.goto(4, 200)
            t.pd()

            # 火焰部分
            t.pencolor("#F160AD")
            t.begin_fill()
            for i in range(360):
                ii = r.randint(0, 1)  # 模拟火焰大小随机形状
                if ii == 0:
                    x = drawX(4, i) + r.random()
                else:
                    x = drawX(4, i) - r.random()
                y = drawY(10, i) + 200
                t.goto(x, y)
            t.fillcolor("#F160AD")
            t.end_fill()

        # 随机星星点点
        def writing():
            color = ["#e28cb9", "#805a8c", "#eaa989", "#6e90b7", "#b8b68f", "#e174b5", "#cf737c", "#7c8782"]

            # 棕色蛋糕部分
            for i in range(24):  # 个人私设的小彩蛋,Ta的生日多大就有多少个小星星,你们开心就好
                t.pu()
                x = r.randint(-80, 80)
                y = r.randint(60, 90)
                t.goto(x, y)
                t.pd()
                t.dot(r.randint(2, 5), color[r.randint(0, 7)])

            # 背景板的星星点点(可加可不加,我个人不喜欢)
            for i in range(50):
                t.pu()
                x = r.randint(-500, 500)
                y = r.randint(150, 300)
                t.goto(x, y)
                t.pd()
                t.dot(r.randint(3, 5), color[r.randint(0, 7)])

            t.seth(90)
            t.pu()
            t.goto(0, 0)
            t.fd(210)
            t.left(90)
            t.fd(200)
            t.pd()

            # 祝福文字
            t.pencolor('white')
            t.write("Happy Birthday")  # 可以自己导入喜欢的字体
            t.done()

        layer_0()
        layer_1()
        layer_2()
        candle_part()
        writing()
        t.done()


# if __name__ == '__main__':
# happy_birthday = Greeting()
# happy_birthday.run()


class IIWby(wx.Dialog):
    def __init__(self, parent=None):
        super().__init__(parent, title='哇哦!', size=(250, 300))
        self.CentreOnScreen()
        # 添加窗口控件
        panel = wx.Panel(self)  # 创建面板对象
        panel.SetBackgroundColour(PINK_COLOUR)  # 设置面板的背景颜色为粉色

        self.tc1 = wx.TextCtrl(panel)
        self.tc2 = wx.TextCtrl(panel, style=wx.TE_PASSWORD)

        userid = wx.StaticText(panel, label='姓名ID:')
        password = wx.StaticText(panel, label='密码:')
        b = wx.Button(panel, label='查看')
        #
        b.Bind(wx.EVT_BUTTON, self.button, b)  # 绑定事件

        self.statictext = wx.StaticText(panel, label='张总,请登录后查看')  # 创建静态文本

        # 创建垂直方向盒子布局管理器对象iivbox
        iivbox = wx.BoxSizer(wx.VERTICAL)

        iivbox.Add(userid, 0, wx.EXPAND | wx.LEFT, 10)
        iivbox.Add(self.tc1, 0, wx.EXPAND | wx.ALL, 10)
        iivbox.Add(password, 0, wx.EXPAND | wx.LEFT, 10)
        iivbox.Add(self.tc2, 0, wx.EXPAND | wx.ALL, 10)
        iivbox.Add(self.statictext, 0, wx.CENTER | wx.FIXED_MINSIZE | wx.TOP, 10)
        #        iivbox.Add(panel, 1, wx.EXPAND | wx.ALL, 10)

        iivbox.Add(b, 1, wx.CENTER | wx.ALL, 20)

        # 设置面板的布局管理器为iivbox
        panel.SetSizer(iivbox)

    #        self.Fit()

    def button(self, event):
        tc1 = self.tc1.GetValue()
        tc2 = self.tc2.GetValue()
        print(f'姓名ID:{tc1}, 密码:{tc2}')
        self.EndModal(wx.ID_OK)
        if tc1 == 'zhangjie' and tc2 == '20240414':
            happy_birthday = Greeting()
            happy_birthday.run()


class IWby(wx.Dialog):
    def __init__(self):
        super().__init__(None, title='祝福语', size=(400, 350))
        self.CentreOnScreen()
        # 添加窗口控件
        panel = wx.Panel(parent=self)  # 创建面板对象
        panel.SetBackgroundColour(PINK_COLOUR)  # 设置面板的背景颜色为粉色
        self.statictext = wx.StaticText(parent=panel, label='祝张总前程似锦!愿你的未来更加灿烂辉煌!')  # 创建静态文本

        # 创建垂直方向盒子布局管理器对象ivbox
        ivbox = wx.BoxSizer(wx.VERTICAL)
        ivbox.Add(panel, 1, wx.EXPAND | wx.ALL, 10)
        # 设置面板的布局管理器为ivbox
        self.SetSizer(ivbox)
        self.Fit()


class Wby(wx.Frame):  # 自定义窗口父类Wby
    def __init__(self):
        super().__init__(None, title='生日祝福--->张杰', size=(300, 220))
        self.CentreOnScreen()
        # 添加窗口控件
        panel = wx.Panel(parent=self)  # 创建面板对象
        panel.SetBackgroundColour(PINK_COLOUR)  # 设置面板的背景颜色为粉色
        self.statictext = wx.StaticText(parent=panel,
                                        label='                     张总,生日快乐!           \n      在这个特殊的日子里,愿你的每个愿望都能如期而至,每个梦想都能触手可及。愿你的每一天都充满阳光和欢笑,每一步都留下美好的回忆。')  # 创建静态文本
        b1 = wx.Button(parent=panel, id=10, label='快点我!')  # 创建按钮对象
        b2 = wx.Button(parent=panel, id=11, label='蛋糕!')  # 创建按钮对象
        b3 = wx.Button(parent=panel, id=12, label='Bye!')  # 创建按钮对象

        # 创建水平方向盒子布局管理器对象hbox
        hbox = wx.BoxSizer(wx.HORIZONTAL)
        # 添加b1按钮到hbox
        hbox.Add(b1, proportion=1, flag=wx.ALIGN_CENTER | wx.ALL, border=10)
        # 添加b2按钮到hbox
        hbox.Add(b2, proportion=1, flag=wx.ALIGN_CENTER | wx.ALL, border=10)
        # 添加b3按钮到hbox
        hbox.Add(b3, proportion=1, flag=wx.ALIGN_CENTER | wx.ALL, border=10)

        # 创建垂直方向盒子布局管理器对象vbox
        vbox = wx.BoxSizer(wx.VERTICAL)
        # 添加静态文本到vbox
        vbox.Add(self.statictext, proportion=1, flag=wx.CENTER | wx.FIXED_MINSIZE | wx.TOP, border=10)
        # 添加hbox到vbox
        vbox.Add(hbox, proportion=1, flag=wx.CENTER)
        # 设置面板的布局管理器为vbox
        panel.SetSizer(vbox)

        self.Bind(wx.EVT_BUTTON, self.next, id=10)  # 绑定事件
        self.Bind(wx.EVT_BUTTON, self.next, id=11)  # 绑定事件
        self.Bind(wx.EVT_BUTTON, self.next, id=12)  # 绑定事件

    def next(self, event):  # 事件处理函数
        event_id = event.GetId()  # 获取事件ID
        print(event_id)
        if event_id == 10:  # 判断事件ID
            iwby = IWby()
            iwby.ShowModal()
            iwby.Destroy()
        elif event_id == 11:
            iiwby = IIWby()
            iiwby.ShowModal()
            iiwby.Destroy()
        else:
            self.Close()  # 关闭窗口


#        event.Skip()  # 调用默认的事件处理函数
app = wx.App()  # 创建应用程序对象
kpl = Wby()  # 创建窗口对象
kpl.Show()  # 显示窗口
app.MainLoop()  # 进入主事件循环

 

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

WBY·~阿崟呢

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值