欢哥带你玩编程程序员程序猿阵线联盟-汇总各类技术干货

给小美的感恩节表白

2018-11-23  本文已影响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把资源文件也打包到程序中,具体我没有实现,需要的自行去百度吧;

上一篇下一篇

猜你喜欢

热点阅读