给小美的感恩节表白

作者: 听风轻咛 | 来源:发表于2018-11-23 17:35 被阅读72次

    程序员最近想恋爱了,脑子里面想的除了代码,填充了些别的画面(当然,别那么猥琐,程序员还是很纯情的);

    夏目友人帐夏目友人帐

    刚好最近在学习python,上网找了几个GUI库进行了对比,花了一上午工夫写了个小软件,班门弄斧了有点,一来讨女神欢心,二来作学习用,将代码照进现实

    程序一共100行不到,逻辑也蛮简单,我们的环境是使用Sublime text 3,在windows上运行,这里因为我们用的sublime text,在哪个平台上都无所谓,而且最后编译我们会采用一个命令行工具(python的),所以很好完成;

    话不多说我们直接开始;

    环境配置

    首先下载Sumblime text 3,安装Python 3,这些步骤就不做详细解释了,接着我们需要ST的两个工具,打开ST,按ctrl+shift+p,出现输入框输入pci,回车稍等一会出现pci工具,

    PCIPCI

    我们在里面搜索SublimeCodeIntelSumblimeREPL这两个插件,其中,前者是实现代码智能提示和自动完成功能,后者是python的编译工具,这里我们主要用的是后者。

    安装完之后我们就可以通过ctrl+B(mac上是command+b)直接运行python程序了;

    需要的库

    首先你的python需要有pip工具,多的内容不细说,另外在windows上还需要做两件事情,一是安装git bash,因为win的终端好多命令是在git里的,二是将python路径添加到环境变量中,否则终端也是用不了python工具的;

    解决完上面两件事情,我们安装一下tkinter包,理论上这个库是系统GUI库,但是为了保证程序运行,你可以在终端安装一下,安装很容易,直接pip install tkinter

    另外还需要一个打包工具,直接将python脚本打包成exe可执行文件,发给你的女神(要知道小白是只会双击,并不懂你的什么python脚本,不要强行给你的女神解释什么叫脚本,小心凉凉);

    开始写代码了

    from tkinter import *
    
    class Application(Frame):
        ···
    

    我们需要写一个类,继承自tkinter库里的Frame,该库可以定义一个窗口容器,供程序添加控件;

    接下来讲解将会写到注释里;

    # 初始化函数,我们主要的内容在方法createWidgets里
    def __init__(self, master=None):
        Frame.__init__(self, master)
        self.pack()
        self.createWidgets()
    
    def createWidgets(self):
    
        # 下面这两个字符变量用来显示程序中变化的字符
        # 依附在Label上
        self.stringVar = StringVar()
        self.stringVar.set("说你爱我")
    
        self.buttonVar = StringVar()
        self.buttonVar.set("点我")
    
        # 这是一个按钮,上面的buttonVar字符变量依附在它上面
        # 所以说按钮的字符也是可以变的
        # 另外button还有一个command属性,是一个函数名
        # 它定义了点击button将要发生的事件
        self.quitButton = Button(self, textvariable=self.buttonVar, 
            command=self.hit_me, width=30, height=3)
        self.quitButton.pack()
    
        # 接下来就是一个背景图片
        # 背景图片上有一个label用来显示字符(把你想说的情话写在上面吧)
        image_path = "xiaomei.png"
        if os.path.exists(image_path):
            self.background = PhotoImage(file=image_path)
            self.backLabel = Label(self, textvariable=self.stringVar, 
                justify=CENTER, image=self.background,
                compound=CENTER, fg='red', font=("华文行楷", 30))
            self.backLabel.pack()
        else:
            self.backLabel = Label(self, textvariable=self.stringVar, 
                justify=CENTER, compound=CENTER, fg='red', font=("华文行楷", 30))
            self.backLabel.pack()
        # 为了保证程序的健壮性,我们在用图片做背景时要确保图片路径的存在性
        # 万一找不到我们不能让程序闪退不是么?
        # 另外一点默认的控件排列方式是从上到下依次进行的
        # 具体想进行排版还要再进行研究
    
    on_hit = False
    hit_count = 0
    # 我们使用了一个计数器,对每一步进行判断
    # 虽然傻瓜了点,但这不正体现了我们的用心吗?
    # 哈哈哈,每一步,都是我爱你的表现,你不会懂的!
    def hit_me(self):
        # global on_hit
        if self.on_hit == False:
            self.on_hit = True
            self.hit_count += 1
        else:
            self.on_hit = False
            self.hit_count += 1
    
        if self.hit_count == 1:
            # 第一步,是我爱你的开始
            self.stringVar.set("爱我")
        elif self.hit_count == 2:
            # 第二步,是你爱我的回答
            self.stringVar.set("还是爱我")
        elif self.hit_count == 3:
            # 第三步,是你逃不掉的缘份
            self.stringVar.set("你逃不掉的!!!")
        elif self.hit_count == 4:
            # 第四步,是我对你的承诺
            self.stringVar.set("看见中间那个框了吗,给你个机会。。。")
            self.buttonVar.set("写嘛写嘛")
    
            self.e = Entry(self, show=None, 
                highlightcolor="blue", highlightthickness=2,
                fg="black", relief=SUNKEN)
            self.e.pack()
            
            # 确认过程序,我遇上对的人
            self.sureButton = Button(self, text="点我确认", 
                width=15, height=2, command=self.sureAction)
            self.sureButton.pack()
    
            self.textInsert = Text(self, height=2)
            self.textInsert.pack()
    
    # 若爱,定深爱
    # 爱就要勇敢的表达出来
    # 所以,我爱你
    def sureAction(self):
        self.stringVar.set("不能反悔了啊!")
        var = self.e.get()
        var = "你输入什么都不管用的,对不起我也爱你!"
        self.textInsert.insert('end', var)
        self.e.delete(0, END)
        self.e.insert(END, "我爱你")
        self.e.pack()
    
    # 这里是程序入口
    if __name__ == '__main__':
        
        # 我们的故事
        # 从这里开始
        
        app = Application()
        # 设置窗口标题:
        app.master.title('大哥 大哥,说你爱我!')
        app.master.geometry('1200x800')
        # 主消息循环:
        app.mainloop()
    
    

    效果展示

    第一次用gif图,看看效果,下了一个LICEcap软件做这件事;

    xiaomeixiaomei

    编译成exe

    安装pyinstaller工具,方法很简单,使用pip install pyinstaller命令;

    安装完成在终端一路cd到刚才写的脚本路径下,同时需要在当前路径下把需要的图片拷贝进来;

    pyinstaller --onefile ./tk.py

    上面这句话会将程序进行编译生成exe文件,接着把图片拷贝到exe文件目录下,压缩打包发给你的女神吧!

    这里有一个问题就是可以用pyi-makespec把资源文件也打包到程序中,具体我没有实现,需要的自行去百度吧;

    相关文章

      网友评论

        本文标题:给小美的感恩节表白

        本文链接:https://www.haomeiwen.com/subject/wixsqqtx.html