超市收银小程序,一个小例子快速上手Tkiner使用,虽然最近有好多实验报告要写,但是我还是给大家写一个小例子,之前就用C、C++,java、特别是C#最好用,做过图形界面小程序,这里我之前给了一个C#socket聊天室:https://blog.csdn.net/hello_list/article/details/124075029
没有用过python写过桌面程序,久闻大名Tkinter看看是不是用起来好用,那做了一个小实例后,还是C#真香,除了C#还有可以通过js,html,css写桌面应用并且可以跨平台,就是Electron啦,可以通过这篇认识下:https://blog.csdn.net/hello_list/article/details/123736978,不过毕竟好多python程序,如果做一个简单的图形界面发给别人使用,那这一篇我们来学习下;
源码地址:链接:https://pan.baidu.com/s/1zO4laS_cHdwDyZugj2AdTg?pwd=pqur
提取码:pqur
来自百度百科:
python下面的一款图形化库,可以方便我们做桌面应用,那同样的还有,wxPython 、Jython ,其他两个没用过,大家如果喜欢可以去尝试下,那Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
快速体验这里我们快速体验下,再次出现源码地址:
链接:https://pan.baidu.com/s/1zO4laS_cHdwDyZugj2AdTg?pwd=pqur 提取码:pqur
里面有源文件和exe可执行文件,直接运行即可;
首先迎来的就是登录,那源码都在自己手里,知道个账户密码还不容易,都是root,注册没有写,老规矩留给你们去完善,给你们成长的空间,小作业提示:
当然了,错了也是进不去的:
登录进来之后,就两个区域,点击商品,这里想象超市都是扫码,一扫码添加一个,一扫码添加一个,这里呢,因为没有这个 *** 作,直接做了个添加商品:
我们添加一些商品,然后点击结算,之后会显示用户需要付的金额,收取用户金额,确认支付,即可显示需要找还给用户多少金额,比较简单的小过程,也是一个比较简单的小例子,没办法,美工确实不好,只能如此简陋了;
到这里就体验完了,我们看一下Tkinter知识点,通过这个小例子,学习下Tkinter;
代码解析,知识点 窗体我们要知道一个图形化界面首先是有窗体的,有了窗体,我们可以像上面放入面板,就好比页面div,然后再往上添加我们需要的组件,三步,其实任何图形化界面都是:
# 万事的开头先导包
# 注意:Python3.x 版本使用的库名为 tkinter,即首写字母 T 为小写。
# 我是python3.x所以使用tkinter,如果你是python2.x请使用Tkinter,当然了使用是一样的
from tkinter import *
import tkinter.messagebox #这个是消息框,对话框的关键
#=======创建窗体==========
root=Tk() # root作为我们登录窗体,放在最上面
#=======放入面板==========
# 我们首先使用的就是登录功能
root.title("登录") # 设置窗口标题
root.geometry("%dx%d" %(700,500)) # 设置窗体大小
MyFrame=Frame(root,width=700,height=500) # 创建面板,同时设置面板大小
#=======注册组件==========
name_l=Label(MyFrame,text="账号:") # 创建label组件,可以通过text="注册",width=10等,设置属性
name_p=Label(MyFrame,text="密码:")
zhuce_Btn=Button(MyFrame,text="注册",width=10)
name=Entry(MyFrame)
pwd=Entry(MyFrame,show="*") # 输入框组件,show可以显示输入的数字加密,里面指定什么都可以,例如:show="#"
#=======将面板放入窗体==========
MyFrame.pack()
#=======将组件放入面板==========
# 这里使用的是place放入,可以通过坐标调整放入组件的位置
zhuce_Btn.place(x=230,y=240)
denglu_Btn.place(x=340,y=240)
name_p.place(x=220,y=200)
name_l.place(x=220,y=170)
name.place(x=280,y=170)
pwd.place(x=280,y=200)
#=======将窗体打开,进行监听==========
root.mainloop()
# 到这里相信你已经会通过Tkinter创建一个图形化界面了
#=======窗体销毁==========
root.destroy()
# 这里我们登录完成即可销毁掉登录窗体,同时开启新的结账窗体
三种布局
1、pack布局
- 流式布局,就好像流水一样,你默认就是一层层往下放置组件,同时你也可以向四周放,我们创建的,结账页面的总布局为流式布局;
bottomFrame1=Frame(genFrame)
bottomFrame1.pack(side='bottom',fill=X)
# 靠底部,同时撑满x轴
bottomFrame2=Frame(genFrame)
bottomFrame2.pack(side='bottom',fill=X,pady=2)
# padx/pady,代表水平间距/垂直间距
2、grid布局
- 网格布局,很好理解,我们平常使用表格,我们可以通过几行几列的方式来放置组件:
# 通过表格放置
slabel.grid(row=1,column=1)
sentry.grid(row=1,column=2)
nlabel.grid(row=1,column=3)
nentry.grid(row=1,column=4)
plabel.grid(row=1,column=5)
pentry.grid(row=1,column=6)
tianjia.grid(row=1,column=8)
3、place布局
- 位置布局,我们可以直接通过指定x,y坐标来实现布局,上面窗体我们已经使用过了:
# 直接通过x,y坐标去放置组件
zhuce_Btn.place(x=230,y=240)
denglu_Btn.place(x=340,y=240)
调用方法,传递参数
这里面使用了计算,可以创建不同的方法去实现不同的计算方法调用;
command=lambda:方法名(参数)
# 这里我们什么都可以传的,一定不要局限于数字哦,比如我们的添加商品然后刷新商品列表,是将整个窗体传入,然后刷新
# 在这里
tianjia=Button(MyFrame,text="添加商品",command=lambda:content(MyFrame,sentry.get(),nentry.get(),pentry.get()))
def content(MyFrame,name,num,price):
SQ=SQin(name,num,price)
lists.append(SQ)
li_one=Listbox(MyFrame,heigh=20)
li_two=Listbox(MyFrame,heigh=20)
li_three=Listbox(MyFrame,heigh=20)
for list in lists:
li_one.insert(0,list.Sname)
for list in lists:
li_two.insert(0,list.Snum)
for list in lists:
li_three.insert(0,list.Sprice)
li_one.grid(row=2,column=2)
li_two.grid(row=2,column=4)
li_three.grid(row=2,column=6)
return lists
添加商品
这里我为了方便,创建了一个商品类,好管理,用户添加商品,构建一个新的对象同时加入集合,集合中的数据将会在面板中刷新;
class SQin :
Sname=""
Snum=0
Sprice=0
def __init__(self,Sname,Snum,Sprice):
self.Sname=Sname
self.Snum=Snum
self.Sprice=Sprice
# 接收到参数,并创建对象添加到列表
def content(MyFrame,name,num,price):
# contentFrame=Frame(MyFrame)
# contentFrame.pack(pady=2)
SQ=SQin(name,num,price)
lists.append(SQ)
# 通过循环展示出来
for list in lists:
li_one.insert(0,list.Sname)
for list in lists:
li_two.insert(0,list.Snum)
for list in lists:
li_three.insert(0,list.Sprice)
接收用户输入的值
# 创建一个StringVar接收
jie_labelV=StringVar()
# 通过textvariable绑定
jie_label=Label(bottomFrame3,text="用户总金额", textvariable=jie_labelV)
# 此时用户输入的值,就都会在jie_labelV,我们可以直接拿来使用
Tkinter打包exe
pyinstaller
1、python打包exe,需要pyinstaller,这里我们通过pip安装
pip install pyinstaller
2、切换到我们程序所在的目录通过命令进行打包,点击terminal即可切换到终端
3、执行命令,打包
pyinstaller -F -w -i icon.ico main.py
#生成的exe文件就在子目录dist中。-F表示指定打包后只生成一个exe格式的文件,-w表示窗口,无控制台。
#我们还可以修改图标,通过-i icon.ico
#我这里随便拿一张照片,找到现在照片格式转换网站https://www.ico51.cn/,即可搞定,选择尺寸是16*16
#常用参数
–i 图标路径
-F 打包成一个exe文件
-w 使用窗口,无控制台
-c 使用控制台,无窗口
-D 创建一个目录,里面包含exe以及其他一些依赖性文件
-h 查看参数
4、打包成功,双击即可运行,这里是不是没显示出我们的图标,我以为加载不上,找了半天;
那这里的解决办法就是:将生成的exe程序,移动下位置,搞定,啊~服了;
小结这个实例,不在难看,最失误的地方是,写的时候没有注释,啊~,写完过一会再看,这感觉真不好!大家写代码一定要加注释,所以这次给大家的源码也是没有注释的,啊 ~,那大家还是收藏下吧,我想后面多加点儿说明,这次太粗糙了!
这个小实例,希望你可以上手使用Tkinter,那不要手懒,源码有了,可以动手自己尝试下,参考着来,我写的代码太烂了,因为一边学习一边写这个,所以并没有考虑些更好的优化,那么交给你了
最后动动小手给博主点个赞吧,留个关注也行啊,还有好多实验报告呢~
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)