import tkinter as tk import tkinter.font as tf from tkinter import * from tkinter import ttk import tkinter.messagebox import pymysql '''############ 查询按钮 功能函数 ###################''' def sel(): if IPtext.get() == "": tkinter.messagebox.showinfo("错误", "IP不能为空,请输入要查询的IP。") IPtext.focus() text1.delete(0.0, END) else: text1.delete(0.0, END) ##先清空文本框中的所有内容 ## 设置字体 text1.config(font=tf.Font(size=12),fg="#000000", bg="#ffffee") '''##第一步,创建一个连接,格式书写(用户名,密码,主机,数据库,端口)''' conn = pymysql.connect( host='192.168.222.62', user='pyth', password='rtyu..t3', database='server_info', port=3306, charset='utf8mb4' ) '''# 第二步,创建游标''' cur = conn.cursor(cursor=pymysql.cursors.DictCursor) ## 返回的,SQL语句结果是字典 '''# 声明 sql 语句''' sql = "select * from ali_ser where lanip = %(ipa)s" sql1 = "select server_class_name as '服务器类型',BusinessName as '业务名称',DdName as '担当' from server_class,alidd where alidd.Serverclass_id = server_class.server_class_id and lanip = %(ipa)s" cur.execute(sql, {"ipa": IPtext.get()}) ##执行SQL 语句 row = cur.fetchone() if not row: tkinter.messagebox.showinfo("错误", "没有查到服务器信息,请确认输入的IP是否正确。") IPtext.focus() else: '''## 遍历 字典''' for k, v in row.items(): #text1.insert(0.0,(str(k) + ':' + str(v)+"\n")) ##会把最前面的一行,放在最后面,顺序是反着的。 text1.insert("insert",(str(k) + ':' + str(v)+"\n")) ## insert 在光标处插入,顺序是正常的。 ## 当 服务器的状态为 Running 设置 Running 为粗体,绿色 if row[k] == "Running": text1.tag_add("t1",6.7,6.15) text1.tag_config("t1",font=tf.Font(weight="bold"),foreground="#00ff00") if row[k] == "Stopped": ##当 服务器的状态为 Stopped 设置 Stopped 为粗体,红色 text1.tag_add("t1",6.7,6.15) text1.tag_config("t1",font=tf.Font(weight="bold"),foreground="#ff0000") text1.insert("insert","##########################\n") cur.execute(sql1, {"ipa": IPtext.get()}) row1 = cur.fetchone() if not row1: pass else: for kk, vv in row1.items(): text1.insert("insert",("\n"+str(kk) + ':' + str(vv)+"\n")) ## insert 在光标处插入,顺序是正常的。 # 关闭游标 cur.close() conn.close() def vpcsel(): if IPtext2.get() == "": tkinter.messagebox.showinfo("错误", "IP不能为空,请输入要查询的IP。") IPtext2.focus() text2.delete(0.0, END) else: text2.delete(0.0, END) ##先清空文本框中的所有内容 text2.config(font=tf.Font(size=12),fg="#000000", bg="#ffffee") ##第一步,创建一个连接,格式书写(用户名,密码,主机,数据库,端口) conn2 = pymysql.connect( host='192.168.222.62', user='pyth', password='rtyu..t3', database='server_info', port=3306, charset='utf8mb4' ) # 第二步,创建游标 cur2 = conn2.cursor(cursor=pymysql.cursors.DictCursor) # 声明 sql 语句 sql = "select * from vpc_server where IP_Add = %(ipa)s" sql1 = "select server_class_name as '服务器类型',region_name as '区域',BusinessName as '业务名称',DdName as '担当' from server_class,esx\ i_region,vpcdd where server_class.server_class_id=vpcdd.Serverclass_ID and esxi_region.region_id=vpcdd.Esxi_Region_ID and vpcdd.IPAdd=%(ipa)s" cur2.execute(sql, {"ipa": IPtext2.get()}) ##执行SQL 语句 row2 = cur2.fetchone() if not row2: tkinter.messagebox.showinfo("错误", "没有查到服务器信息,请确认输入的IP是否正确。") IPtext2.focus() else: ## 遍历 字典 for k, v in row2.items(): text2.insert("insert",(str(k) + ':' + str(v)+"\n")) if row2[k] == "已打开电源": ## 当 服务器是开机时 设置 状态 为粗体,绿色 text2.tag_add("t1",7.7,7.15) text2.tag_config("t1",font=tf.Font(weight="bold"),foreground="#00ff00") if row2[k] == "已关闭电源": ##当 服务器的是关机时 设置 状态 为粗体,红色 text2.tag_add("t1",7.7,7.15) text2.tag_config("t1",font=tf.Font(weight="bold"),foreground="#ff0000") text2.insert("insert","################################\n") cur2.execute(sql1, {"ipa": IPtext2.get()}) row22 = cur2.fetchone() if not row22: pass else: for kk, vv in row22.items(): text2.insert("insert",("\n"+str(kk) + ':' + str(vv)+"\n")) # 关闭游标 cur2.close() conn2.close() '''############## 窗体控件 ############################''' root = tk.Tk() ## 初始化 root.title('服务器信息查询程序 V1.01 Author: XC ') ## 设置窗体标题 #root.geometry('850x700') ## 设置窗体 大小 ''' 窗体运行时居中 ''' #获取屏幕宽、高 winX = root.winfo_screenwidth() winY = root.winfo_screenheight() ## 设置 窗口 宽 高 width,height = 820,660 #计算 中心 坐标 left = (winX - width) / 2 top = (winY - height) / 2 # 宽度x高度+x偏移+y偏移 # 在设定宽度和高度的基础上指定窗口相对于屏幕左上角的偏移位置 root.geometry("%dx%d+%d+%d" % (width, height, left, top)) root.resizable(False,False)## 窗体 禁止拉伸,窗口的最大化按钮被禁用 tabControl = ttk.Notebook(root) tab1 = ttk.Frame(tabControl) tab2 = ttk.Frame(tabControl) tabControl.add(tab1, text='阿里云服务器信息查询') tabControl.add(tab2, text='ESXI虚拟平台--虚拟服务器信息查询') tabControl.grid(row=0,column=0) ''''######### 在 阿里云服务器信息查询 tab1 添加 控件''' #lb1 = LabelFrame(root, width=60, height=20, text='Select',foreground='red') ##添加一个 标签框架 lb1 = LabelFrame(tab1, width=60, height=20) lb1.grid(row=0, column=0,sticky=W,padx=5) ## 在 标签框架中 添加 label,entry(单行输入框) 按钮 控件 IPlabel = tk.Label(lb1,text='请输入服务器内网IP地址:') IPlabel.grid(row=0,column=1) ## 创建 单行 可输入 文本框 IPtext = tk.Entry(lb1) IPtext.grid(row=0,column=2)#如果是输入密码,可以写show='*' g=tk.Entry(window1,show=None) ##创建 Button 按钮 Select_button = tk.Button(lb1,text='查 询',command=sel) Select_button.grid(row=0,column=3, sticky=tk.W,padx=5,pady=5) ##################### sel_result = tk.Label(tab1,text='查询结果:').grid(row=1,column=0,sticky=tk.W,pady=1) '''##创建 文本框,用来存放查询出来的内容''' text1 = tk.Text(tab1,height=32,width=100,wrap='word') text1.grid(row=2,column=0, sticky=tk.W,padx=5,pady=5) '''######### 在 ESXI虚拟平台--虚拟服务器信息查询 tab2 添加 控件''' ##添加一个 标签框架 lb2 = LabelFrame(tab2, width=60, height=20) lb2.grid(row=0, column=0,sticky=W,padx=5) ## 在 标签框架中 添加 label,entry(单行输入框) 按钮 控件 IPlabel2 = tk.Label(lb2,text='请输入服务器内网IP地址:') IPlabel2.grid(row=0,column=1) ## 创建 单行 可输入 文本框 IPtext2 = tk.Entry(lb2) IPtext2.grid(row=0,column=2)#如果是输入密码,可以写show='*' g=tk.Entry(window1,show=None) ##创建 Button 按钮 Select_button2 = tk.Button(lb2,text='查 询',command=vpcsel) Select_button2.grid(row=0,column=3, sticky=tk.W,padx=5,pady=5) ##################### sel_result2 = tk.Label(tab2,text='查询结果:').grid(row=1,column=0,sticky=tk.W,pady=1) '''##创建 文本框,用来存放查询出来的内容''' text2 = tk.Text(tab2,height=32,width=100,wrap='word') text2.grid(row=2,column=0, sticky=tk.W,padx=5,pady=5) root.mainloop() ######################## 执行结果: 程序运行界面:输入为空查询:
输入错误查询:
正确查询:
![]()
![]()
![]()
![]()