ERP-库存与存货-原料采购单


import tkinter as tk
from  tkinter import ttk
from tkinter import *                                                               #导入tkinter
from tkinter import messagebox                                                      #引入弹出框
#from typing import Any, Union
import pymysql                                                                       #导入pymysql
from pymysql.cursors import Cursor                                                  #导入游标
from hashlib import sha1                                                            #导入hashlib,引用函数
from PIL import Image                                                                #图像缩放
from tkinter import Scrollbar
from tkinter.ttk import Treeview
import datetime


                    #采购单直接完成对原材料的采购,根据采购单,产生相应的原材料入库清单(可在页面设置按钮显示),只要输入货物编码,可自动出现其他属性
window=tk.Tk()
window.title('原料采购单')
window.geometry('1200x600-100-100')
window['bg'] = 'Beige'
window.resizable(False, False)#不允许改变窗口大小
class YLCG:                                                             #原料采购
    def __init__(self,window):
        self.conn = pymysql.Connect(
            host='localhost',
            port=3306,
            user='root',
            passwd='12345',
            db='库存与存货系统',
            charset="utf8"
        )

    #Label
        YLCG_name_Label=tk.Label(window,text='原料采购单',font=('Arial',25),bg= 'Beige')
        YLCG_name_Label.place(x=350,y=15)

        YLCG_id_Label=tk.Label(window,text='采购单号:',font=('Arial',12),bg= 'Beige')
        YLCG_id_Label.place(x=100,y=80)

        #YLCG_date_Label=tk.Label(window,text='采购日期:',font=('Arial',12),bg= 'Beige')
        #YLCG_date_Label.place(x=300,y=80)

        YLCG_WareHouse_Label=tk.Label(window,text='采购日期:',font=('Arial',12),bg= 'Beige')
        YLCG_WareHouse_Label.place(x=497,y=80)

        YLCG_Department_Label=tk.Label(window,text='采购部门:',font=('Arial',12),bg= 'Beige')
        YLCG_Department_Label.place(x=100,y=120)

        YLCG_reference_Label=tk.Label(window,text='备注:',font=('Arial',12),bg= 'Beige')
        YLCG_reference_Label.place(x=332,y=120)

        YLCG_ZhiDanRen_Label = tk.Label(window, text='制单人:', font=('Arial', 12),bg= 'Beige')
        YLCG_ZhiDanRen_Label.place(x=100, y=450)


        #详细
        frame = tk.Frame(window)  # 锁定框架
        frame.place(x=85, y=200, width=620, height=230)
        scrollBarx = tk.Scrollbar(frame, orient='horizontal')  # 定义滑动条
        scrollBarx.pack(side=tk.BOTTOM, fill=tk.X)
        scrollBary = tk.Scrollbar(frame)
        scrollBary.pack(side=tk.RIGHT, fill=tk.Y)
        tree = ttk.Treeview(frame, show="headings", xscrollcommand=scrollBarx.set, yscrollcommand=scrollBary.set)
        scrollBarx['command'] = tree.xview  # 根据视图x移动
        scrollBary['command'] = tree.yview  # 根据视图y移动
        tree['columns'] = ('原料编码', '原料名字', '原料类别', '采购数目', '价格', '主计量', '采购时间', '生产批号', '描述', '颜色', '硬度', '供应商ID')
        tree.column('原料编码', width=120, anchor='center')
        tree.column('原料名字', width=120, anchor='center')
        tree.column('原料类别', width=120, anchor='center')
        tree.column('采购数目', width=120, anchor='center')
        tree.column('价格', width=120, anchor='center')
        tree.column('主计量', width=120, anchor='center')
        tree.column('采购时间', width=120, anchor='center')
        tree.column('生产批号', width=120, anchor='center')
        tree.column('描述', width=120, anchor='center')
        tree.column('颜色', width=120, anchor='center')
        tree.column('硬度', width=120, anchor='center')
        tree.column('供应商ID', width=120, anchor='center')

        tree.heading('原料编码', text='原料编码')
        tree.heading('原料名字', text='原料名字')
        tree.heading('原料类别', text='原料类别')
        tree.heading('采购数目', text='采购数目')
        tree.heading('价格', text='价格')
        tree.heading('主计量', text='主计量')
        tree.heading('采购时间', text='采购时间')
        tree.heading('生产批号', text='生产批号')
        tree.heading('描述', text='描述')
        tree.heading('颜色', text='颜色')
        tree.heading('硬度', text='硬度')
        tree.heading('供应商ID', text='供应商ID')
        tree.insert('', 'end', values=('', '', '', '', '', '', '', '', '', '', '', ''))

        def buy_product():
            #数据转移
            window.quit()
        tk.Button(window, text='采购', width=10, height=1, command=buy_product,bg= 'LemonChiffon').place(x=500, y=440)
        tree.pack()
        def treeviewClick(event):
            iid = tree.identify_row(event.y)
            xy = tree.identify_element(event.x, event.y)
            s = tree.selection()
            print(iid,xy )
            print(s)#元祖(x,y)
            if s:
                # var 变量
                var_MaterialID_Text = tk.StringVar()
                var_MaterialName_Text = tk.StringVar()
                var_Category_Text = tk.DoubleVar
                var_MaterialNum_Text = tk.StringVar()
                var_MaterialPrice_Text = tk.IntVar()
                var_MaterialCalculate_Text = tk.IntVar()
                var_date_Text = tk.IntVar()
                var_BatchNumber_Text = tk.StringVar()
                var_M_Specificetions_Text = tk.IntVar()
                var_Color_Text = tk.IntVar()
                var_Hard_Text = tk.IntVar()
                var_SupplierID_Text = tk.StringVar()
                product = tk.Tk()
                product.title('原材料货物详细')
                product.geometry('600x500')
                product['bg']='Beige'

                MaterialID_Label = tk.Label(product, text='原料编码:', font=('Arial', 12), bg='Beige')
                MaterialID_Label.place(x=100, y=20)
                MaterialName_Label = tk.Label(product, text='原料名字:', font=('Arial', 12), bg='Beige')
                MaterialName_Label.place(x=100, y=50)
                M_Category_Label = tk.Label(product, text='原料类别:', font=('Arial', 12), bg='Beige')
                M_Category_Label.place(x=100, y=80)
                MaterialNum_Label = tk.Label(product, text='采购数目:', font=('Arial', 12), bg='Beige')
                MaterialNum_Label.place(x=100, y=110)



                MaterialPrice_Label = tk.Label(product, text='价格:', font=('Arial', 12), bg='Beige')
                MaterialPrice_Label.place(x=100, y=140)
                MaterialCalculate_Label = tk.Label(product, text='主计量:', font=('Arial', 12), bg='Beige')
                MaterialCalculate_Label.place(x=100, y=170)
                date_Label = tk.Label(product, text='采购时间:', font=('Arial', 12), bg='Beige')
                date_Label.place(x=100, y=200)
                BatchNumber_Label = tk.Label(product, text='生产批号:', font=('Arial', 12), bg='Beige')
                BatchNumber_Label.place(x=100, y=230)
                M_Specificetions_Label = tk.Label(product, text='描述:', font=('Arial', 12), bg='Beige')
                M_Specificetions_Label.place(x=100, y=260)
                Color_Label = tk.Label(product, text='颜色:', font=('Arial', 12), bg='Beige')
                Color_Label.place(x=100, y=290)
                Hard_Label = tk.Label(product, text='硬度:', font=('Arial', 12), bg='Beige')
                Hard_Label.place(x=100, y=320)
                SupplierID_Label = tk.Label(product, text='供应商ID:', font=('Arial', 12), bg='Beige')
                SupplierID_Label.place(x=100, y=350)
                # Entry

                MaterialID_Entry = tk.Entry(product, width=15)
                MaterialID_Entry.place(x=175, y=20)


                MaterialName_Entry = tk.Entry(product, width=15)
                MaterialName_Entry.place(x=175, y=50)

                M_Category_Entry = tk.Entry(product, width=15)
                M_Category_Entry.place(x=175, y=80)

                MaterialNum_Entry = tk.Entry(product, width=15)
                MaterialNum_Entry.place(x=175, y=110)

                MaterialbigNum_Entry = tk.Entry(product, width=25)                #最大采购量
                MaterialbigNum_Entry.place(x=300, y=110)

                MaterialPrice_Entry = tk.Entry(product, width=15)
                MaterialPrice_Entry.place(x=175, y=140)

                MaterialCalculate_Entry = tk.Entry(product, width=15)
                MaterialCalculate_Entry.place(x=175, y=170)

                date_Entry = tk.Entry(product, width=30)
                date_Entry.place(x=175, y=200)

                BatchNumber_Entry = tk.Entry(product, width=15)
                BatchNumber_Entry.place(x=175, y=230)

                M_Specificetions_Entry = tk.Entry(product, width=15)
                M_Specificetions_Entry.place(x=175, y=260)

                Color_Entry = tk.Entry(product, width=15)
                Color_Entry.place(x=175, y=290)

                Hard_Entry = tk.Entry(product, width=15)
                Hard_Entry.place(x=175, y=320)

                SupplierID_Entry = tk.Entry(product, width=15)
                SupplierID_Entry.place(x=175, y=350, width=350)

                # 变量赋值

                def look_point():  # 在列表里继续插入(原材料)

                    # 输入编码,其余自动显示
                    var_MaterialID_Text = MaterialID_Entry.get()
                    cursor = self.conn.cursor()
                    cursor.execute("select * from material where `MaterialID`='%s'" % var_MaterialID_Text)
                    self.conn.commit()
                    data = cursor.fetchone()
                    print(data[1])  # 获取到数据
                    var_MaterialName_Text = data[1]
                    var_M_Category_Text = data[2]
                    var_MateriralNum_Text = MaterialNum_Entry.get()

                    num = data[12] - data[3]
                    print(num)
                    var_MaterialbigNum_Text = num

                    var_MaterialPrice_Text = data[4]
                    var_MaterialCalculate_Text = data[5]
                    var_date_Text = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 现在时间
                    var_BatchNumber_Text = data[7]
                    var_M_Specificetions_Text = data[8]
                    var_Color_Text = data[9]
                    var_Hard_Text = data[10]
                    var_SupplierID_Text = data[11]

                    var_MateriralNum_Text = num
                    MaterialName_Entry.insert('end', data[1])
                    M_Category_Entry.insert('end', data[2])
                    MaterialNum_Entry.insert('end', MaterialNum_Entry.get())

                    MaterialbigNum_Entry.insert('end', '当前最大采购数量为:%d'%num)
                    MaterialPrice_Entry.insert('end', data[4])
                    MaterialCalculate_Entry.insert('end', data[5])
                    date_Entry.insert('end', datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S'))
                    BatchNumber_Entry.insert('end', data[7])
                    M_Specificetions_Entry.insert('end', data[8])
                    Color_Entry.insert('end', data[9])
                    Hard_Entry.insert('end', data[10])
                    SupplierID_Entry.insert('end', data[11])



                def insert_point():                                             #在列表里继续插入(原材料)

                    #输入编码,其余自动显示
                    var_MaterialID_Text = MaterialID_Entry.get()

                    cursor = self.conn.cursor()
                    cursor.execute("select * from material where `MaterialID`='%s'" % var_MaterialID_Text )
                    self.conn.commit()
                    data = cursor.fetchone()
                    print(data[1])  # 获取到数据

                    var_MaterialName_Text = data[1]
                    var_M_Category_Text =data[2]
                    var_MaterialNum_Text = MaterialNum_Entry.get()
                    var_MaterialPrice_Text = data[4]
                    var_MaterialCalculate_Text = data[5]
                    var_date_Text =datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 现在时间
                    var_BatchNumber_Text =data[7]
                    var_M_Specifications_Text = data[8]
                    var_Color_Text = data[9]
                    var_Hard_Text =data[10]
                    var_SupplierID_Text = data[11]
                    tree.insert('','end',values=(var_MaterialID_Text, var_MaterialName_Text,var_M_Category_Text,var_MaterialNum_Text,var_MaterialPrice_Text,var_MaterialCalculate_Text,var_date_Text, var_BatchNumber_Text, var_M_Specifications_Text,var_Color_Text,var_Hard_Text,var_SupplierID_Text))
                    #数据插入原料入库表里

                    cursor = self.conn.cursor()
                    sql = "INSERT INTO material_linshi(MaterialID, MaterialName,M_Category,MaterialNum,MaterialPrice,MaterialCalculate,date, BatchNumber, M_Specifications,Color,Hard,SupplierID) VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s','%s');" % (
                    var_MaterialID_Text, var_MaterialName_Text, var_M_Category_Text, var_MaterialNum_Text,
                    var_MaterialPrice_Text, var_MaterialCalculate_Text, var_date_Text, var_BatchNumber_Text,
                    var_M_Specifications_Text, var_Color_Text, var_Hard_Text, var_SupplierID_Text)  # 插入数据
                    cursor.execute(sql)


                    self.conn.commit()




                tk.Button(product, text='查看', width=10, height=1, command=look_point).place(x=200, y=380)
                tk.Button(product, text='插入', width=10, height=1, command=insert_point).place(x=300,y=380)
                product.mainloop()

        tree.bind('<Double-Button-1>',treeviewClick)

    def __Entry(self,window):
        YLCG_MaterialID_Entry=tk.Entry(window,width=15)
        YLCG_MaterialID_Entry.place(x=175,y=83)


        YLCG_MaterialNum_Entry=tk.Entry(window,width=15)               #采购部门
        YLCG_MaterialNum_Entry.place(x=175,y=123)
        YLCG_MaterialNum_Entry.insert('end', '采购部')

        YLCG_date_Entry = tk.Entry(window, width=30)
        YLCG_date_Entry.place(x=175, y=83)

        YLCG_M_Specificetions_Entry = tk.Entry(window, width=17)
        YLCG_M_Specificetions_Entry.place(x=572, y=83)
        nowTime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')  # 现在时间
        YLCG_M_Specificetions_Entry.insert('end', nowTime)

        YLCG_Hard_Entry = tk.Entry(window, width=15)                 #备注
        YLCG_Hard_Entry.place(x=375, y=120, width=320)
        YLCG_SupplierID_Entry = tk.Entry(window, width=15)           #制单人
        YLCG_SupplierID_Entry.place(x=170, y=450)



    def show(self,window):
        self.__Entry(window)
        window.mainloop()

YLCG=YLCG(window)
YLCG.show(window)

window.mainloop()

猜你喜欢

转载自blog.csdn.net/weixin_40838568/article/details/81043315