Tkinter超市收银小程序(附源码),看完这一篇你还不会Tkinter吗,快来试试吧

Tkinter超市收银小程序

引言

超市收银小程序,一个小例子快速上手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,那不要手懒,源码有了,可以动手自己尝试下,参考着来,我写的代码太烂了,因为一边学习一边写这个,所以并没有考虑些更好的优化,那么交给你了

最后动动小手给博主点个赞吧,留个关注也行啊,还有好多实验报告呢~

  • 12
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 6
    评论
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

学习日记

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

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

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

打赏作者

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

抵扣说明:

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

余额充值