tkinter笔记

tkinter操作相关代码笔记

在这里插入图片描述

from tkinter import *
import datetime
import pymysql
import threading
import openpyxl
from tkinter.filedialog import askdirectory
from tkinter import messagebox as messagebox

def connDb(sql):
    conn = pymysql.connect(
        host='XXX',
        port=3306,
        user='XXX',
        password='XXX',
        charset='utf8',
        database='XXX'
    )
    cursor = conn.cursor()
    try:
        cursor.execute(sql)
    except Exception as e:
        print('发生异常:', e)
        conn.rollback()

    return conn, cursor


def quit(tk):
    print('溜了溜了')
    tk.quit()
def makeFilename(createTime, endTime, level, ent5):
    ent5.delete('0', 'end')
    # print(ent5.get())
    start_list = createTime.split(' ')[0].split('-')
    end_list = endTime.split(' ')[0].split('-')
    time_tittle = ['年', '月', '日']
    res_start = ''
    res_end = ''
    for i in range(3):
        res_start = res_start + start_list[i] + time_tittle[i]
        res_end = res_end + end_list[i] + time_tittle[i]
    res_name = res_start + '至' + res_end + '的三级和三级以上的事件工单列表'

    ent5.insert('end', res_name)

def showDate(entList):
    global data
    # 每次点击确认前先初始化
    entList[3].delete('1.0', 'end')
    entList[3].insert('end', '查询语句为:\n')
    entList[4].delete('1.0', 'end')
    entList[4].insert('end', '输出查询结果:\n')

    createTime = entList[0].get()
    endTime = entList[1].get()
    level = entList[2].get()
    sql = makeSql(createTime, endTime, level)
    makeFilename(createTime, endTime, level, entList[5])  # 制作导出文件名,插入输入框内后面再取
    print('sql语句为:', sql)
    # 将sql语句插入界面
    entList[3].insert('end', sql)

    entList[4].insert('end', '数据查询中-----------\n\n')

    conn, cursor = connDb(sql)
    data = list(cursor.fetchall())
    # to_excel(data)

    if data is []:
        entList[4].insert('end', '无数据\n')
    else:
        entList[4].insert('end', '查询到' + str(len(data)) + '条记录\n\n')
        for onedata in data:
            entList[4].insert('end', onedata)
            entList[4].insert('end', '\n\n')
            print(onedata, '\n')

    print('结果查询结束!')
    entList[4].insert('end', '查询结束!-----------\n')
    conn.commit()
    cursor.close()
    conn.close()


def to_excel(data, save_path):
    # 创建excel对象
    workbook = openpyxl.Workbook()
    workbook_sheet = workbook.active
    tittle = [XXX]
    workbook_sheet.append(tittle)
    for onedata in data:
        print(onedata, '\n')
        workbook_sheet.append(onedata)

    workbook.save(save_path)
    workbook.close()

def selectDirectory(ent4):
    directory = askdirectory()
    print(directory)
    ent4.delete('0', 'end')
    ent4.insert('end', directory)

def export(ent4, ent5):
    global data
    directory = ent4.get()
    file_name = ent5.get()

    save_path = directory+'\\'+file_name+'.xlsx'
    print(save_path)

    print(data)

    to_excel(data, save_path)

    # 导出完成界面
    exportOK()

def exportOK():
    # tk2 = Tk()
    messagebox.showinfo('', '导出完成')
    # tk2.mainloop()

def clear(text1, text2):
    # 清空sql和输出结果的text框
    text1.delete('1.0', 'end')
    text2.delete('1.0', 'end')

    text1.insert('end', '查询语句为:\n')
    text2.insert('end', '输出查询结果:\n')

def createTk():
    global data
    nowDate = datetime.datetime.now().strftime('%Y-%m-%d')

    tk = Tk()
    tk.geometry("730x760+500+100")  # 窗口宽度730x760,横向偏移500,纵向偏移100
    tk.title('查询工单')

    lab1_text = StringVar()
    lab1_text.set('测试')

    lab = Label(textvariable=lab1_text, height=2, width=30)
    ent1 = Entry()
    ent2 = Entry()
    ent3 = Entry()
    # sql语句输出框
    text1 = Text(width=65)
    text1.insert('end', '查询语句为:\n')
    # 查询结果输出框
    text2 = Text(height=23, width=102)
    text2.insert('end', '输出查询结果:\n')

    lab1 = Label(text='开始时间:')
    lab2 = Label(text='结束时间:')
    lab3 = Label(text='事件等级:')

    # 文件导出控件
    lab4 = Label(text='文件保存路径:')
    lab5 = Label(text='文件命名:')
    ent4 = Entry(width=77)
    ent4.insert('end', r'C:\Users\Administrator\Desktop')
    ent5 = Entry(width=77)
    ent5.insert('end', '工单列表')
    but4 = Button(text='选择', command=lambda: selectDirectory(ent4))
    but5 = Button(text='导出', command=lambda: export(ent4, ent5))

    but1 = Button(text='确认', command=lambda: createThread(showDate, [ent1, ent2, ent3, text1, text2, ent5]))
    but2 = Button(text='退出', command=lambda: quit(tk))
    but3 = Button(text='清空', command=lambda: clear(text1, text2))

    lab1.grid(column=0, row=0, padx=5, pady=10, sticky='E')
    lab2.grid(column=0, row=1, padx=5, pady=10, sticky='E')
    lab3.grid(column=0, row=2, padx=5, pady=10, sticky='E')
    ent1.grid(column=1, row=0, padx=5, pady=10, columnspan=2, sticky='E')
    ent2.grid(column=1, row=1, padx=5, pady=10, columnspan=2, sticky='E')
    ent3.grid(column=1, row=2, padx=5, pady=10, columnspan=2, sticky='E')

    but1.grid(column=0, row=3)
    but3.grid(column=1, row=3, padx=23, sticky='W')
    but2.grid(column=2, row=3)
    ent1.insert(0, nowDate + ' 08:30:00')
    ent2.insert(0, nowDate + ' 08:30:00')
    ent3.insert(0, "'一级', '二级', '三级'")

    # lab4.grid(column=3, row=0, padx=5, pady=10, sticky='W')
    text1.grid(column=3, row=0, rowspan=4, columnspan=2, padx=5, pady=10, sticky='W')
    text2.grid(column=0, row=5, columnspan=7, padx=5, pady=10, sticky='W')

    # 挂载导出组件
    lab4.grid(column=0, row=6, padx=5, pady=10)
    ent4.grid(column=1, row=6, columnspan=3, padx=5, pady=10, sticky='W')
    but4.grid(column=4, row=6, padx=5, pady=10, sticky='W')

    lab5.grid(column=0, row=7, padx=5, pady=10)
    ent5.grid(column=1, row=7, columnspan=3, padx=5, pady=10, sticky='W')
    but5.grid(column=4, row=7, padx=5, pady=10, sticky='W')

    # showDate([ent1, ent2, ent3])  # 启动使用输入框默认值为当前时间

    tk.mainloop()


def makeSql(createTime, endTime, level):
    print(createTime, endTime, level)
    sql = '''
		XXX
'''

    return sql


def createThread(func, *args):
    t = threading.Thread(target=showDate, args=args)  # 创建进程
    t.setDaemon(True)  # 守护进程
    t.start()  # 启动进程


if __name__ == '__main__':
    data = []
    createTk()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值