大家好,给大家分享一下python做微信小程序开发,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!
利用python中的tkinter来开发自己的小程序或小工具之查询数据库并返回和导出查询结果
本人也是python小白,各位大佬不要喷,毕竟咱不是专业的开发的,只是为了偷懒,写一下自己的小程序,如果大佬可以帮自己完善一下的话,自己也是很高兴的。
- 这个工具可以用来干什么
- 如果你需要经常的从数据库里面提取数据,那么他可以帮你实现
- 如果你热爱爬虫的话,需要美化一下操作界面的话,那么你可能需要他
- 如果你想逗你女朋友开心的话,那么你可能值得拥有他
- 等等等等等Python创意编程比赛作品——名侦探柯南:真相只有一个!。。。
先来看看效果
建议一定要看这个效果图哈,否则,你到下面的代码就是一脸懵
python运维小工具(1)
1. 思路
思路是非常重要的,有一个好的思路,能让自己事半功倍
我的实例工具,思路如下
- 利用tkinter来构建基本的工具框架,也就是程序或者工具UI界面(小编是找了张A4纸,用铅笔花出来的,\哭)
- 需要具体能实现功能的python代码,需要镶嵌到框架中
- 建立个测试环境,测试一下看看效果如何
2. 实操
先引入我们需要的模板
#!/usr/bin/env python
# coding:gbk
import tkinter as tk
import tkinter.messagebox
import pymssql
import datetime
import openpyxl
import split
import time
import os
import sys
- import tkinter as tk :这个是今天的主角
- import tkinter.messagebox :这个是弹出来的那个框口
- import pymssql:这个是连接数据库用的,我这边的是sql server数据库
- import datetime:这个是获取当前时间用的,主要是一个导出文件的时候命名作用
- import openpyxl:这个是操作execl用的,把查询结果写入到execl表中
- import split:这个是字符切割用的
- import time:这个用来时间延长的。time.sleep
- import os:这个是获取当前程序运行路径的,方便放置或者提醒文件保存位置
- import sys:这个好像没用到,先写上吧
再构建出我们需要的大框
也就是我们外面用到的大框
import tkinter as tk
import tkinter.messagebox
import pymssql
import datetime
import openpyxl
import split
import time
import os
import sys
root = tk.Tk() # 创建窗口对象的背景色
root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu") #这个就是大框左上角的文字显示
root.geometry("950x300") #这个是框的大小
root.mainloop() # 进入消息循环
效果如下:
再构建出里面的小框
import tkinter as tk
import tkinter.messagebox
import pymssql
import datetime
import openpyxl
import split
import time
import os
import sys
root = tk.Tk() # 创建窗口对象的背景色
root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu") #这个就是大框左上角的文字显示
root.geometry("950x300") #这个是框的大小
#当前不会显示出来这个框,因为框里面没有内容
denglu = tk.LabelFrame(root,text="登录",padx=10,pady=5)
denglu.grid(row=0,sticky='N',column=0,padx=10,pady=10)
#当前不会显示出来这个框,因为框里面没有内容
jg = tk.LabelFrame(root,text="查询结果",padx=10,pady=10)
jg.grid(row=0,rowspan=2,column=1,sticky='N',padx=10,pady=10)
root.mainloop() # 进入消息循环
效果和上面的一样:
再给左边的这个框里面添加内容
import tkinter as tk
import tkinter.messagebox
import pymssql
import datetime
import openpyxl
import split
import time
import os
import sys
root = tk.Tk() # 创建窗口对象的背景色
root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu") #这个就是大框左上角的文字显示
root.geometry("950x300") #这个是框的大小
denglu = tk.LabelFrame(root,text="登录",padx=10,pady=5)
denglu.grid(row=0,sticky='N',column=0,padx=10,pady=10)
##下面的这四行对应的下面的效果图看,比较容易理解
tk.Label(denglu,text= "数据库ip:").grid(row=0,column=0)
tk.Label(denglu,text= "数据库端口:").grid(row=1,column=0)
tk.Label(denglu,text= "数据库账户:").grid(row=2,column=0)
tk.Label(denglu,text= "数据库密码:").grid(row=3,column=0)
jg = tk.LabelFrame(root,text="查询结果",padx=10,pady=10)
jg.grid(row=0,rowspan=2,column=1,sticky='N',padx=10,pady=10)
root.mainloop() # 进入消息循环
效果图:
再给这四个标签添加后面的输入框
import tkinter as tk
import tkinter.messagebox
import pymssql
import datetime
import openpyxl
import split
import time
import os
import sys
root = tk.Tk() # 创建窗口对象的背景色
root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu") #这个就是大框左上角的文字显示
root.geometry("950x300") #这个是框的大小
denglu = tk.LabelFrame(root,text="登录",padx=10,pady=5)
denglu.grid(row=0,sticky='N',column=0,padx=10,pady=10)
tk.Label(denglu,text= "数据库ip:").grid(row=0,column=0)
tk.Label(denglu,text= "数据库端口:").grid(row=1,column=0)
tk.Label(denglu,text= "数据库账户:").grid(row=2,column=0)
tk.Label(denglu,text= "数据库密码:").grid(row=3,column=0)
##下面就是添加输入框部分
v1 = tk.StringVar()
v2 = tk.StringVar()
v3 = tk.StringVar()
v4 = tk.StringVar()
e1 = tk.Entry(denglu, textvariable=v1)
e2 = tk.Entry(denglu, textvariable=v2)
e3 = tk.Entry(denglu, textvariable=v3)
e4 = tk.Entry(denglu, textvariable=v4, show="*")
e1.grid(row=0, column=1, padx=10, pady=5)
e2.grid(row=1, column=1, padx=10, pady=5)
e3.grid(row=2, column=1, padx=10, pady=5)
e4.grid(row=3, column=1, padx=10, pady=5)
###
jg = tk.LabelFrame(root,text="查询结果",padx=10,pady=10)
jg.grid(row=0,rowspan=2,column=1,sticky='N',padx=10,pady=10)
root.mainloop() # 进入消息循环
效果如下:
输入框里面可以输入内容了,那我们需要将用户输入到框中的内容,get出来
import tkinter as tk
import tkinter.messagebox
import pymssql
import datetime
import openpyxl
import split
import time
import os
import sys
root = tk.Tk() # 创建窗口对象的背景色
root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu") #这个就是大框左上角的文字显示
root.geometry("950x300") #这个是框的大小
denglu = tk.LabelFrame(root,text="登录",padx=10,pady=5)
denglu.grid(row=0,sticky='N',column=0,padx=10,pady=10)
tk.Label(denglu,text= "数据库ip:").grid(row=0,column=0)
tk.Label(denglu,text= "数据库端口:").grid(row=1,column=0)
tk.Label(denglu,text= "数据库账户:").grid(row=2,column=0)
tk.Label(denglu,text= "数据库密码:").grid(row=3,column=0)
v1 = tk.StringVar()
v2 = tk.StringVar()
v3 = tk.StringVar()
v4 = tk.StringVar()
e1 = tk.Entry(denglu, textvariable=v1)
e2 = tk.Entry(denglu, textvariable=v2)
e3 = tk.Entry(denglu, textvariable=v3)
e4 = tk.Entry(denglu, textvariable=v4, show="*")
e1.grid(row=0, column=1, padx=10, pady=5)
e2.grid(row=1, column=1, padx=10, pady=5)
e3.grid(row=2, column=1, padx=10, pady=5)
e4.grid(row=3, column=1, padx=10, pady=5)
##创建一个def ,因为下面需要个按钮来触发他
def ceshi_sql():
#利用异常判断,如果能正常连接则提示测试连接成功
try:
conn = pymssql.connect(host=e1.get(), user=e3.get(),port=e2.get(),password=e4.get())
#输入框里面取值就在这里,e1.get()
tk.messagebox.askokcancel("提示","测试连接成功") #弹出提示框的功能
conn.close() #断开数据库连接
except Exception as e:
##如果不能连接则将异常e抛出
tk.messagebox.askokcancel("提示", e)
## 增加两个按钮,一个连接测试,一个退出,注意按钮触发的是command后面的def函数,这里没有()哈,注意
tk.Button(denglu, text="连接测试", width=10, command=ceshi_sql).grid(row=4, column=0, sticky='W', padx=10, pady=5) # W左边
tk.Button(denglu, text="退出", width=10, command=root.quit).grid(row=4, column=1, sticky='E', padx=10, pady=5) # E右边
jg = tk.LabelFrame(root,text="查询结果",padx=10,pady=10)
jg.grid(row=0,rowspan=2,column=1,sticky='N',padx=10,pady=10)
root.mainloop() # 进入消息循环
效果图:
看到了这里相信大家也是不是感觉非常简单可呢,下面小编就把第二个框里面的内容结合源码一起讲了哈
整体源码:
#!/usr/bin/env python
# coding:gbk
import tkinter as tk
import tkinter.messagebox
import pymssql
import datetime
import openpyxl
import split
import time
import os
import sys
root = tk.Tk() # 创建窗口对象的背景色
root.title("Voc --统计长期离线企业小助手 v1.10 Mr.liu")
root.geometry("950x300")
#第一个框开始
denglu = tk.LabelFrame(root,text="登录",padx=10,pady=5)
denglu.grid(row=0,sticky='N',column=0,padx=10,pady=10)
tk.Label(denglu,text= "数据库ip:").grid(row=0,column=0)
tk.Label(denglu,text= "数据库端口:").grid(row=1,column=0)
tk.Label(denglu,text= "数据库账户:").grid(row=2,column=0)
tk.Label(denglu,text= "数据库密码:").grid(row=3,column=0)
v1 = tk.StringVar()
v2 = tk.StringVar()
v3 = tk.StringVar()
v4 = tk.StringVar()
e1 = tk.Entry(denglu, textvariable=v1)
e2 = tk.Entry(denglu, textvariable=v2)
e3 = tk.Entry(denglu, textvariable=v3)
e4 = tk.Entry(denglu, textvariable=v4, show="*")
e1.grid(row=0, column=1, padx=10, pady=5)
e2.grid(row=1, column=1, padx=10, pady=5)
e3.grid(row=2, column=1, padx=10, pady=5)
e4.grid(row=3, column=1, padx=10, pady=5)
def ceshi_sql():
try:
conn = pymssql.connect(host=e1.get(), user=e3.get(),port=e2.get(),password=e4.get())
tk.messagebox.askokcancel("提示","测试连接成功")
conn.close()
except Exception as e:
tk.messagebox.askokcancel("提示", e)
tk.Button(denglu, text="连接测试", width=10, command=ceshi_sql).grid(row=4, column=0, sticky='W', padx=10, pady=5) # W左边
tk.Button(denglu, text="退出", width=10, command=root.quit).grid(row=4, column=1, sticky='E', padx=10, pady=5) # E右边
###第二个框的开始
###创建框
jg = tk.LabelFrame(root,text="查询结果",padx=10,pady=10)
jg.grid(row=0,rowspan=2,column=1,sticky='N',padx=10,pady=10)
###引入一个文本框text,设置他的大小为width=80,height=15
text=tk.Text(jg,width=80,height=15)
###创建一个滚动条,因为要显示的内容太多,没有滚动条,看不全部
scroll=tk.Scrollbar(jg)
scroll.grid(row=0,column=1)
text.grid(row=0,column=0)
#创建是上下滚动的条:y
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)
#创建一个def,让他可以被抹个按钮触发
def chaxun():
sql = 'select * from ceshi'
##利用异常处理
try:
#主要实现的功能,就是到一个库里面执行一个sql语句,如果大家有需要可以自己设置
chaxun_conn = pymssql.connect(host=e1.get(), user=e3.get(),port=e2.get(),password=e4.get(), database='ya',charset='cp936')
chaxun_conn.autocommit(True)
cursor = chaxun_conn.cursor()
#text文本域里面最开始显示空白
text.delete(0.0, tk.END)
#执行sql语句
cursor.execute(sql)
#拿到语句查询结果
jieguo = cursor.fetchall()
cursor.close() #连接完一定要断开连接哈,数据库最怕没有这个
###
###下面的是一个execl的写入,可以自己根据自己的实际情况改写
wb = openpyxl.Workbook()
#sheet命名为长期离线企业数据统计'
ws = wb.create_sheet('长期离线企业数据统计')
#execl里面第一行第一列显示“字段名1”
ws.cell(row=1, column=1).value = "字段名1"
#execl里面第一行第二列显示“字段名2”
ws.cell(row=1, column=2).value = "字段名2"
#execl里面第一行第三列显示“字段名3”
ws.cell(row=1, column=3).value = "字段名3"
ws.cell(row=1, column=4).value = "字段名4"
ws.cell(row=1, column=5).value = "字段名5"
ws.cell(row=1, column=6).value = "字段名6"
ws.cell(row=1, column=7).value = "字段名7"
ws.cell(row=1, column=8).value = "字段名8"
ws.cell(row=1, column=9).value = "字段名9"
ws.cell(row=1, column=10).value = "字段名10"
x = 1
for i in jieguo:
x+=1
y = 1
ii = str(i) + '\n'
text.insert(tk.INSERT,ii) #这个是写入到文本域里面
for n in i:
ws.cell(row=x, column=y).value = n
y+=1
else:
text.insert(tk.END,'===================查询结束====================\n')
today = ((str(datetime.datetime.now())).split('.')[0]).replace(':', "-")
name = today + '长期离线企业数据.xlsx'
##保存execl
wb.save(name)
time.sleep(2)
##获取当前路径
pwd = os.getcwd()
file_pwd = pwd + '\\' + name
mess = '导出的文件保存于:' + file_pwd
##提示出,文件被保存的位置,方便查找文件
tk.messagebox.askokcancel("提示", mess)
except Exception as e:
text.delete(0.0, tk.END)
jieguo = '\n======================不是有效的查询,请先【连接测试】======================='
text.insert(tk.INSERT, jieguo)
text.insert(tk.INSERT, e)
#关联
#创建一个函数,等待按钮触发
def show():
tk.messagebox.askokcancel("提示", '功能在进一步的确认中......')
#创建一个按钮,触发chaxun函数,也就是上面的def函数
tk.Button(root, text="开始查询并导出文件", width=20, command=chaxun).grid(sticky='ws',row=1,column=0,padx=30, pady=5) # W左边
tk.Button(root, text="功能待定", width=10, command=show).grid(sticky='es',row=1,column=0, padx=30, pady=5) # W左边
root.mainloop() # 进入消息循环
结束语
- 小编写的这个程序是固定死的,但是思路是活得,主要是让大家理解一下思路。
- 小编的技术有限,希望大家不要建议,如果大家有什么好的建议,不妨评论出来,大家一起分享一下
- 最后就是希望和大家一起努力,创建更加美好的明天,为社会技术贡献一份自己的力量