程序员最近想恋爱了,脑子里面想的除了代码,填充了些别的画面(当然,别那么猥琐,程序员还是很纯情的);
夏目友人帐刚好最近在学习python,上网找了几个GUI库进行了对比,花了一上午工夫写了个小软件,班门弄斧了有点,一来讨女神欢心,二来作学习用,将代码照进现实;
程序一共100行不到,逻辑也蛮简单,我们的环境是使用Sublime text 3,在windows上运行,这里因为我们用的sublime text,在哪个平台上都无所谓,而且最后编译我们会采用一个命令行工具(python的),所以很好完成;
话不多说我们直接开始;
环境配置
首先下载Sumblime text 3,安装Python 3,这些步骤就不做详细解释了,接着我们需要ST的两个工具,打开ST,按ctrl+shift+p
,出现输入框输入pci
,回车稍等一会出现pci工具,
我们在里面搜索SublimeCodeIntel
和SumblimeREPL
这两个插件,其中,前者是实现代码智能提示和自动完成功能,后者是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软件做这件事;
xiaomei编译成exe
安装pyinstaller
工具,方法很简单,使用pip install pyinstaller
命令;
安装完成在终端一路cd到刚才写的脚本路径下,同时需要在当前路径下把需要的图片拷贝进来;
pyinstaller --onefile ./tk.py
上面这句话会将程序进行编译生成exe文件,接着把图片拷贝到exe文件目录下,压缩打包发给你的女神吧!
这里有一个问题就是可以用pyi-makespec把资源文件也打包到程序中,具体我没有实现,需要的自行去百度吧;
网友评论