tkinter+pymysql实现gui数据库查询功能

首先引用tkinter和pymysql库;

import tkinter
import pymysql

构造一个格式化时间戳的类

#遇到日期特殊处理
class ComplexEncoder(json.JSONEncoder):
    def default(self,obj):
        if isinstance(obj,datetime):
            return obj.strftime('%Y-%m-%d %H:%M:%S')
        elif isinstance(obj,date):
            return obj.strftime('%Y-%m-%d')
        else:
            return json.JSONEncoder.default(self,obj)

定义一个函数,实现sql查询的功能,使用entry和combobox获取用户的输入,使用open函数将查询结果导出并存储到D盘;

#定义查询函数
def interface_table_cx_sql():
    try:
        db = pymysql.connect(host=ip_down_menu.get(),port=int(port_down_menu.get()),user=user_down_menu.get(),password=pw_down_menu.get(),database=db_down_menu.get(), charset='utf8' )
        tkinter.messagebox.showinfo('消息框', '数据库连接成功', parent=win)
    except:
        tkinter.messagebox.showerror('消息框', 'error 数据库连接失败', parent=win)
    cursor = db.cursor()    #创建一个游标

    sql = "select * from " + interface_table_down_menu.get() 

    try:
    # 执行SQL语句
        cursor.execute(sql)
        results = cursor.fetchall()
        cols = cursor.description
        data = format_data(results,cols)
        cursor.close()
        db.close()
        data_json=json.dumps(data,cls=ComplexEncoder,indent=1,ensure_ascii=False)
        with open('D:/接口库全表查询结果.txt','w') as file:
            file.write(data_json)
        tkinter.messagebox.showinfo('消息框', '数据已导入D盘 接口库全表查询结果.txt', parent=win)
    except:
        tkinter.messagebox.showerror('消息框', '错误!!请检查输入信息', parent=win)

定义一个format_data函数将导出的数据格式化为json格式;

def format_data(results,cols):
    keys = []
    for column in cols:
        keys.append(column[0])
    key_number = len(keys)

    json_data = []
    for row in results:
        item = dict()
        for q in range(key_number):
            item[keys[q]] = row[q]
        json_data.append(item)

    return json_data

以下为主程序:

win = tkinter.Tk()
win.title(test')
# 设置窗口大小
winWidth = 800
winHeight = 600

# 获取屏幕分辨率
screenWidth = win.winfo_screenwidth()
screenHeight = win.winfo_screenheight()
 
x = int((screenWidth - winWidth) / 2)
y = int((screenHeight - winHeight) / 2)

# 设置窗口初始位置在屏幕居中
win.geometry("800x600")
# 设置窗口图标
win.iconbitmap("D:/ztshouhou for mysql/image/34.ico")
#p1 = PhotoImage(file = 'D:/project/34.jpg')
#win.iconphoto(False, '34.jpg') 
# 设置窗口宽高固定
win.resizable(0, 0)
#创建一个菜单项,类似于导航栏
menubar = Menu(win)
#提示1
tishi1 = Label(win,text = '数据库IP和端口号',font = 16)
tishi1.grid(row=0)
'''
下拉菜单
'''
down_menu_ip = tkinter.StringVar()    #创建变量,便于取值
down_menu_port = tkinter.StringVar()    #创建变量,便于取值
down_menu_user = tkinter.StringVar()    #创建变量,便于取值
down_menu_pw = tkinter.StringVar()    #创建变量,便于取值
down_menu_db = tkinter.StringVar()    #创建变量,便于取值
down_menu_table = tkinter.StringVar()    #创建变量,便于取值
down_menu_interface_table = tkinter.StringVar()    #创建变量,便于取值
 
ip_down_menu = ttk.Combobox(win, textvariable=down_menu_ip)     # #创建下拉菜单
ip_down_menu.grid(row=1,column=0)     # #将下拉菜单绑定到窗体
ip_file = open("D:/ztshouhou for mysql/ip.config",'r+')
for x in ip_file:
    ip_down_menu["value"] = x 
ip_file.close()
ip_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即********

port_down_menu = ttk.Combobox(win, textvariable=down_menu_port)     # #创建下拉菜单
port_down_menu.grid(row=2,column=0)     # #将下拉菜单绑定到窗体
port_file = open("D:/ztshouhou for mysql/port.config",'r+')
for x in port_file:
    port_down_menu["value"] = x 
port_file.close()
port_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即********

user_down_menu = ttk.Combobox(win, textvariable=down_menu_user)     # #创建下拉菜单
user_down_menu.grid(row=4,column=0)     # #将下拉菜单绑定到窗体
user_file = open("D:/ztshouhou for mysql/user.config",'r+')
for x in user_file:
    user_down_menu["value"] = x 
user_file.close()
user_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即********

pw_down_menu = ttk.Combobox(win, textvariable=down_menu_pw)     # #创建下拉菜单
pw_down_menu.grid(row=5,column=0)     # #将下拉菜单绑定到窗体
pw_down_menu["value"] = ('**********************','11111111')    # #给下拉菜单设定值
pw_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即********

db_down_menu = ttk.Combobox(win, textvariable=down_menu_db)     # #创建下拉菜单
db_down_menu.grid(row=7,column=0)     # #将下拉菜单绑定到窗体
db_file = open("D:/ztshouhou for mysql/db.config",'r+')
for x in db_file:
    db_down_menu["value"] = x 
db_file.close()
db_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即********

table_down_menu = ttk.Combobox(win, textvariable=down_menu_table)     # #创建下拉菜单
table_down_menu.grid(row=7,column=1)     # #将下拉菜单绑定到窗体
table_file = open("D:/ztshouhou for mysql/table.config",'r+')
for x in table_file:
    table_down_menu["value"] = x
table_file.close()
table_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即null

interface_table_down_menu = ttk.Combobox(win, textvariable=down_menu_interface_table)     # #创建下拉菜单
interface_table_down_menu.grid(row=7,column=2)     # #将下拉菜单绑定到窗体
interface_table_file = open("D:/ztshouhou for mysql/interface_table.config",'r+')
for x in interface_table_file:
    interface_table_down_menu["value"] = x
interface_table_file.close()
interface_table_down_menu.current(0)    # #设定下拉菜单的默认值为第1个,即null
'''









  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
基于tkinter+mysql登录界面系统的开发可以分为以下几步: 1. 安装MySQL数据库Python的MySQL驱动程序。 2. 创建一个MySQL数据库和一张用户表,用于存储用户信息。 3. 使用Python连接MySQL数据库,并编写SQL语句实现用户信息的查询、插入、更新和删除等操作。 4. 使用Tkinter创建登录窗口,包括输入用户名和密码的文本框、登录按钮和注册按钮等控件。 5. 在登录按钮的事件处理函数中,获取用户名和密码,使用Python查询用户信息,判断用户是否存在并且密码是否正确。如果验证通过,则跳转到主界面,否则提示用户登录失败。 6. 在注册按钮的事件处理函数中,弹出一个注册窗口,包括输入用户名、密码和确认密码的文本框、注册按钮和取消按钮等控件。在注册按钮的事件处理函数中,获取用户输入的信息,使用Python插入新的用户信息到数据库中。 下面是一个基于tkinter+mysql登录界面系统的代码示例: ```python import tkinter as tk import tkinter.messagebox import pymysql class LoginWindow: def __init__(self): self.win = tk.Tk() self.win.title('登录') self.win.geometry('300x200') tk.Label(self.win, text='用户名:').grid(row=0, column=0) self.username_entry = tk.Entry(self.win) self.username_entry.grid(row=0, column=1) tk.Label(self.win, text='密码:').grid(row=1, column=0) self.password_entry = tk.Entry(self.win, show='*') self.password_entry.grid(row=1, column=1) tk.Button(self.win, text='登录', command=self.login).grid(row=2, column=0) tk.Button(self.win, text='注册', command=self.register).grid(row=2, column=1) self.conn = pymysql.connect(host='localhost', user='root', password='root', database='test', charset='utf8') self.cursor = self.conn.cursor() def login(self): username = self.username_entry.get() password = self.password_entry.get() sql = f"SELECT * FROM user WHERE username='{username}' AND password='{password}'" self.cursor.execute(sql) result = self.cursor.fetchone() if result: tk.messagebox.showinfo('登录成功', f'欢迎回来,{username}!') self.win.destroy() MainWindow() else: tk.messagebox.showerror('登录失败', '用户名或密码错误!') def register(self): RegisterWindow(self.cursor) def __del__(self): self.cursor.close() self.conn.close() class RegisterWindow: def __init__(self, cursor): self.win = tk.Toplevel() self.win.title('注册') self.win.geometry('300x200') tk.Label(self.win, text='用户名:').grid(row=0, column=0) self.username_entry = tk.Entry(self.win) self.username_entry.grid(row=0, column=1) tk.Label(self.win, text='密码:').grid(row=1, column=0) self.password_entry = tk.Entry(self.win, show='*') self.password_entry.grid(row=1, column=1) tk.Label(self.win, text='确认密码:').grid(row=2, column=0) self.confirm_password_entry = tk.Entry(self.win, show='*') self.confirm_password_entry.grid(row=2, column=1) tk.Button(self.win, text='注册', command=self.register).grid(row=3, column=0) tk.Button(self.win, text='取消', command=self.win.destroy).grid(row=3, column=1) self.cursor = cursor def register(self): username = self.username_entry.get() password = self.password_entry.get() confirm_password = self.confirm_password_entry.get() if password != confirm_password: tk.messagebox.showerror('注册失败', '两次输入的密码不一致!') return sql = f"SELECT * FROM user WHERE username='{username}'" self.cursor.execute(sql) result = self.cursor.fetchone() if result: tk.messagebox.showerror('注册失败', '用户名已存在!') else: sql = f"INSERT INTO user (username, password) VALUES ('{username}', '{password}')" self.cursor.execute(sql) tk.messagebox.showinfo('注册成功', '注册成功!') self.win.destroy() class MainWindow: def __init__(self): self.win = tk.Tk() self.win.title('主界面') self.win.geometry('300x200') tk.Label(self.win, text='欢迎使用本系统!').pack() if __name__ == '__main__': LoginWindow() ``` 这个程序中,LoginWindow类表示登录窗口,RegisterWindow类表示注册窗口,MainWindow类表示主界面。程序使用pymysql模块连接MySQL数据库,使用tkinter模块创建GUI界面。在登录按钮的事件处理函数中,通过SQL语句查询用户信息,判断用户是否存在并且密码是否正确。在注册按钮的事件处理函数中,弹出一个注册窗口,等待用户输入用户名和密码,并将新的用户信息插入到数据库中。如果登录成功,则跳转到主界面。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值