用python写一个小软件
背景:1.在电子厂工作,现在部门只剩下我这个小的,什么事情都需要自己弄(说多了心疼),其中由一个钢网(生产的一种工装治具)需要每天去管理,决定弄一个程序减轻自己的工作任务。自学了一段时间,试试给自身搞一个小项目。走起~~~
2.使用的python 工具:tkinter 、sqlite3
3.基本框架和实现功能
4.目标。坦白说,能跑起来,不要一堆异常就好。目前不知道用不用面向对象类,想慢慢学一下类是怎么写的
5,代码(2021-2-5)
5-0.大概的GUI界面框架如下:
5-1.GUI界面代码
def gui():
root=tk.Tk() #框架tk对象
root.title("stencil")
root.iconbitmap(r"net.ico")
root.geometry("1400x600")
root.columnconfigure(1, weight=10)
root.rowconfigure(0, weight=1)
#树状标签
tree=ttk.Treeview(root,show="tree")
tree.grid(row=0,column=0,sticky="snw")
base=tree.insert("",0,text="钢网",value="0")
#1.钢网录入和报废
control=tree.insert(base,0,text="钢网信息登记",value="0")
login=tree.insert(control,0,text="注册",value="1")
scarp=tree.insert(control,1,text="报废",value="2")
#2.钢网查询与日常点检
search=tree.insert(base,1,text="钢网查询与日常点检",value="3")
#3.数据维护
data=tree.insert(base,2,text="数据维护",value="4")
importfile=tree.insert(data,0,text="数据表导入",value="5")
exportfile=tree.insert(data,1,text="导出数据",value="6")
#think 双击鼠标事件通过value值的不同,触发不同的界面
#创建notebook多界面对象 分为界面note_1和note_2
note=ttk.Notebook(root,)
note.grid(row=0,column=1,sticky="nswe")
note_1=tk.Frame(note,bg="blue") #界面note_1 使用Frame组件,再向里面放一些功能组件\
note.columnconfigure(0,weight=1)
note_1.grid(row=0,column=0,sticky="ew")
note.add(note_1,text="钢网信息登记")
note_1.columnconfigure(0,weight=1)
#界面note_1放置组件labelFrame
f1=ttk.LabelFrame(note_1,text="钢网信息填写")
f1.grid(row=0, column=0, pady=3,padx=3,sticky="nwe")
#l(1-7)和i(1-7)为标签和输入框的设置,放在LabelFrame组件f1里面
l = tk.Label(f1, text="钢网编号:").grid(row=1, column=1, sticky=tk.E)
i = tk.Entry(f1, width=10)
i.grid(row=1, column=2, sticky=tk.E)
l1 = tk.Label(f1, text="钢网名称:").grid(row=2, column=1, sticky=tk.E)
i1 = tk.Entry(f1, width=10)
i1.grid(row=2, column=2, sticky=tk.E)
l2 = tk.Label(f1, text="k3编号:").grid(row=1, column=3, sticky=tk.E)
i2 = tk.Entry(f1, width=10)
i2.grid(row=1, column=4, sticky=tk.E)
l3 = tk.Label(f1, text="制作日期:").grid(row=2, column=3, sticky=tk.E)
i3 = tk.Entry(f1, width=10)
i3.grid(row=2, column=4, sticky=tk.E)
l4 = tk.Label(f1, text="客户:").grid(row=1, column=5, sticky=tk.E)
i4 = tk.Entry(f1, width=10)
i4.grid(row=1, column=6, sticky=tk.E)
l5 = tk.Label(f1, text="PCB物料编号:").grid(row=2, column=5, sticky=tk.E)
i5 = tk.Entry(f1, width=10)
i5.grid(row=2, column=6, sticky=tk.E)
l6 = tk.Label(f1, text="拼板数:").grid(row=1, column=7, sticky=tk.E)
i6 = tk.Entry(f1, width=10)
i6.grid(row=1, column=8, sticky=tk.E)
l7 = tk.Label(f1, text="厚度:").grid(row=2, column=7, sticky=tk.E)
i7 = tk.Entry(f1, width=10)
i7.grid(row=2, column=8, sticky=tk.E)
#treeview组件显示设置
column = ["钢网编号", "钢网名称", "K3编号", "制作日期", "客户", "PCB物料编号", "拼板数", "厚度", "印刷次数"]#列名#列名印刷默认为0
width=[60, 400, 100, 90, 50, 200, 50,50,50] #列宽度设置
treeShow=ttk.Treeview(note_1,show="headings",column=column,height=24)
treeShow.grid(row=1,column=0,sticky="ewsn",)
for i in range(len(column)):
treeShow.heading(column[i],text=column[i]) #列名的设置
treeShow.column(column=column[i],width=width[i])#treeview对象没有width属性,由每列的宽度之和组成
root.mainloop()
5-1-1.问题1:关于grid的布局,给界面填充卡了一下下,后来参考这篇文章 https:// blog.csdn.net/acaic/art icle/details/80963688
对行列进行权重配置,root.columnconfigure(1, weight=10) 和root.rowconfigure(1, weight=10),再使用sticky=“wens”,才能自动填充。
5-1-2.感觉组件的创建,代码有点累赘,优化又无从下手(能跑就行,先完成后面再优化代码)
5-1-2.代码调试:效果图
5-2.新钢网信息注册类的定义(不知道类能不能写下去,先试试,不行再转),涉及到数据库不好调试,迟点再弄,先把框架搭好。
class dataControl():
1.注册:输入数据并写入钢网明细表 名暂为stone
2.报废:异常的钢网信息从钢网明细表stone移除,存入钢网报废表中
def __init__(self):
def login(self,data):#注册钢网,存入数据表
for i in data:
if i=="":
print("数据缺少,无法录入")
return
self.con=sql.connect("stencil.db")
self.cursor=self.con.cursor("insert into stone values({0})".format(data))