python tkinter 数据处理小工具
主要用于解决有个项目需要频繁的进行数据处理,并且自己无法直接链接环境,偶尔业务无法联系到相关人员,为了减少沟通成本,写了个GUI小工具直接给到业务相关技术负责人,由他直接进行数据操作,莫烦我。。。。
主要采用python进行编写,GUI使用了python3的 tkinter,excel处理使用了openpyxl,整体代码完成之后使用pyinstaller打包成了exe,直接丢给他了
因为分了好几次编写,下面是主要代码,希望大佬提提建议
能否更简短一些,新手上路,请多多指教!!
from tkinter import *
from tkinter import filedialog
import tkinter.messagebox
from openpyxl import load_workbook
class hkFile(): # 文件处理类,主要生成了需要的sql文件
def __init__(self, file, datatype):
self.file = file
# self.data_list = []
self.dataType = datatype
# self.sqlfile = self.file.split('.')[-2].split('/')[-1] + '.sql'
self.wb = load_workbook(self.file)
self.ws1 = self.wb['房屋数据']
self.ws2 = self.wb['客户数据']
self.ws3 = self.wb['报事类别']
def fwsj(self):
ws = self.ws1
# 房屋数据sql生成
dataList = []
for rowNum in range(2, ws.max_row + 1):
sql = "INSERT into hk_treedata(EMUN_ID,VALUE_KEY,VALUE_DESC,PARENT_VALUE_ID,SORT_NUM) VALUES ('{}','{}','{}'," \
"'{}','{}');".format(self.dataType, ws.cell(row=rowNum, column=4).value, ws.cell(row=rowNum, column=6).value,
ws.cell(row=rowNum, column=3).value, ws.cell(row=rowNum, column=7).value)
dataList.append(sql)
# print(dataList)
return dataList
def khzl(self):
ws = self.ws2
# 客户资料及房屋数据关联sql生成
dataList = []
for rowNum in range(2, ws.max_row + 1):
if ws.cell(row=rowNum, column=9).value is None:
col9 = ''
else:
col9 = ws.cell(row=rowNum, column=9).value
# 客户资料
sql1 = "INSERT into hycc_cus_info(CustID,CUS_NAME,FIELD02,FIELD08,FIELD20,HOST_NUM,FIELD11,FIELD13,RoomID,FIELD04) VALUES('{}','{}','{}','{}','{}','{}','{}','{}','{}','{}');".format(
ws.cell(row=rowNum, column=2).value,
ws.cell(row=rowNum, column=3).value,
ws.cell(row=rowNum, column=3).value,
ws.cell(row=rowNum, column=4).value,
ws.cell(row=rowNum, column=5).value,
ws.cell(row=rowNum, column=6).value,
ws.cell(row=rowNum, column=6).value,
col9,
ws.cell(row=rowNum, column=11).value,
ws.cell(row=rowNum, column=12).value)
# 客户资料与房屋数据关联关系
sql2 = "INSERT into hk_roomtocust(RoomID,CustID) VALUES('{}','{}');".format(
ws.cell(row=rowNum, column=11).value,
ws.cell(row=rowNum, column=2).value)
dataList.append(sql1)
dataList.append(sql2)
return dataList
def bslbs(self):
ws = self.ws3
# 报事类别sql生成
dataList = []
for rowNum in range(2, ws.max_row + 1):
if ws.cell(row=rowNum, column=6).value == '咨询':
bslb = '21'
elif ws.cell(row=rowNum, column=6).value == '报事':
bslb = '22'
elif ws.cell(row=rowNum, column=6).value == '报修':
bslb = '23'
else:
continue
sql = "INSERT into hk_treedata(EMUN_ID,VALUE_KEY,VALUE_DESC,PARENT_VALUE_ID,SORT_NUM,CommID) VALUES('{}','{}','{}','{}',CONCAT('1',SUBSTRING('{}',7)),'{}');".format(
bslb, ws.cell(row=rowNum, column=4).value,
ws.cell(row=rowNum, column=5).value,
str(ws.cell(row=rowNum, column=4).value)[:-4] if str(ws.cell(row=rowNum, column=4).value)[
:-4] != '' else 'NULL',
ws.cell(row=rowNum, column=1).value, ws.cell(row=rowNum, column=3).value)
dataList.append(sql)
return dataList
class mainTop(): #GUI主体窗口
def __init__(self):
#初始化
self.results = []
self.root=Tk()
self.wuye = IntVar()
self.dichan = IntVar()
self.chanye = IntVar()
#设置窗体标题
self.root.title('Python GUI Learning')
#设置窗口大小和位置
self.root.geometry('500x300+570+200')
self.label1=Label(self.root,text='请选择文件:')
# self.label1.grid(column=1, row=2)
self.text1=Entry(self.root,bg='white',width=45)
# self.text1.grid(column=0, row=2)
self.button1=Button(self.root,text='浏览',width=8,command=self.selectExcelfile)
# self.button1.grid(column=0, row=2)
self.button2=Button(self.root,text='处理',width=8,command=self.doProcess)
self.button3=Button(self.root,text='保存',width=8,command=self.saveFile)
# self.chsjlx = IntVar()
self.shuJuLeiXing1=Checkbutton(self.root, text="物业", variable=self.wuye, onvalue=1, offvalue=0)
# self.shuJuLeiXing1.grid(column=0, row=3, sticky=W)
self.shuJuLeiXing2=Checkbutton(self.root, text="地产", variable=self.dichan, onvalue=1, offvalue=0)
# self.shuJuLeiXing2.grid(column=1, row=3, sticky=W)
self.shuJuLeiXing3=Checkbutton(self.root, text="产业", variable=self.chanye, onvalue=1, offvalue=0)
# self.shuJuLeiXing3.grid(column=2, row=3, sticky=W)
self.fwsj = IntVar()
self.shuJuXinXi1=Checkbutton(self.root, text="房屋数据", variable=self.fwsj, onvalue=1, offvalue=0)
self.khsj = IntVar()
self.shuJuXinXi2=Checkbutton(self.root, text="客户数据", variable=self.khsj, onvalue=1, offvalue=0)
self.bslb = IntVar()
self.shuJuXinXi3=Checkbutton(self.root, text="报事类别", variable=self.bslb, onvalue=1, offvalue=0)
self.label1.pack()
self.text1.pack()
self.button1.pack()
self.button2.pack()
self.button3.pack()
self.shuJuLeiXing1.pack()
self.shuJuLeiXing1.pack()
self.shuJuLeiXing1.pack()
self.shuJuXinXi1.pack()
self.shuJuXinXi2.pack()
self.shuJuXinXi3.pack()
self.label1.place(x=30,y=30)
self.text1.place(x=100,y=30)
self.button1.place(x=390,y=26)
self.button2.place(x=160,y=80)
self.button3.place(x=260,y=80)
self.shuJuLeiXing1.place(x=30,y=120)
self.shuJuLeiXing2.place(x=120,y=120)
self.shuJuLeiXing3.place(x=210,y=120)
self.shuJuXinXi1.place(x=30,y=150)
self.shuJuXinXi2.place(x=120,y=150)
self.shuJuXinXi3.place(x=210,y=150)
self.root.mainloop()
def selectExcelfile(self):
self.sfname = filedialog.askopenfilename(title='选择Excel文件', filetypes=[('All Files', '*')])
print(self.sfname)
self.text1.insert(INSERT,self.sfname)
def saveFile(self):
self.savename = filedialog.asksaveasfilename(title='保存sql文件', filetypes=[('SQL', '*.sql')])
sqllist = self.results
# print(self.savename)
with open(self.savename, 'a', encoding='utf-8') as f:
f.writelines([line + '\n' for line in sqllist])
tkinter.messagebox.showinfo('提示','sql文件已生成')
def doProcess(self):
# 物业=24,地产=25,产业=26
dataType = 24
if self.wuye.get() == 1:
dataType = 24
if self.dichan.get() == 1:
dataType = 25
if self.chanye.get() == 1:
dataType == 26
hksql = hkFile(self.sfname, dataType)
print(self.fwsj.get())
if self.fwsj.get() == 1:
self.results += hksql.fwsj()
# print(self.results)
if self.khsj.get() == 1:
self.results += hksql.khzl()
if self.bslb.get() == 1:
self.results += hksql.bslbs()
# return results
tkinter.messagebox.showinfo('提示','sql文件处理完成,请保存您的文件')
if __name__=="__main__":
mainTop()