python3–tk窗体(tabControl控件)–mysql查询

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()

######################## 执行结果:

程序运行界面:


输入为空查询:


输入错误查询:


正确查询: