一:项目背景
利用tkinter做一个GUI页面,用于实现学生信息的管理,实现学生信息的新增、修改、删除、查询等功能
二:布局
pack()、grid() 以及 place()
三:使用技术栈
标签(Label)与单行输入框(Entry)
样例:
代码实现:
# 新增页面
class InsertFrame(tk.Frame):
def __init__(self ,root):
super().__init__(root)
# tk.Label(self,text='学生信息的录入').pack()
self.stuid =tk.StringVar()
self.create_page()
# 新增一条数据方法
def create_page(self):
tk.Label(self).grid(row=0 ,pady=10) # 布局
tk.Label(self, text='学号:').grid(row=1 ,column=1 ,pady=5)
tk.Entry(self ,textvariable=self.stuid).grid(row=1 ,column=2 ,pady=5)
tk.Label(self, text='姓名:').grid(row=2, column=1, pady=5)
tk.Entry(self, textvariable=self.name).grid(row=2, column=2, pady=5)
# 按钮
tk.Button(self, text='确定', command=self.usr_insertIn).grid(row=7, column=2, pady=5)
单选按钮(Radiobutton)
样例
:
代码实现:
# 新增页面
class InsertFrame(tk.Frame):
def __init__(self ,root):
super().__init__(root)
# tk.Label(self,text='学生信息的录入').pack()
self.sex =tk.IntVar()
self.create_page()
# 新增一条数据方法
def create_page(self):
tk.Label(self).grid(row=0 ,pady=10) # 布局
tk.Label(self, text='性别:').grid(row=3, column=1, pady=5)
tk.Radiobutton(self ,text='男',variable=self.sex,value=0).grid(row=3, column=2, pady=5)
tk.Radiobutton(self, text='女',variable=self.sex,value=1).grid(row=3, column=3, pady=5)
# 按钮
tk.Button(self, text='确定', command=self.usr_insertIn).grid(row=7, column=2, pady=5)
复选框(Checkbutton)
样例:
代码实现:
# 新增页面
class InsertFrame(tk.Frame):
def __init__(self ,root):
super().__init__(root)
# tk.Label(self,text='学生信息的录入').pack()
self.stuInterest =tk.StringVar()
self.create_page()
# 新增一条数据方法
def create_page(self):
tk.Label(self).grid(row=0 ,pady=10) # 布局
# 新建整型变量
CheckVar1 = tk.IntVar()
CheckVar2 = tk.IntVar()
CheckVar3 = tk.IntVar()
CheckVar1.set(1) #设置默认选中一个
tk.Label(self, text='爱好:').grid(row=5, column=1, pady=5)
tk.Checkbutton(self ,text='Python' ,variable=CheckVar1 ,onvalue=1 ,offvalue=0).grid(row=5, column=2, pady=5)
tk.Checkbutton(self, text='C++', variable=CheckVar2, onvalue=2, offvalue=0).grid(row=5, column=3, pady=5)
tk.Checkbutton(self, text='Java', variable=CheckVar3, onvalue=3, offvalue=0).grid(row=5, column=4, pady=5)
self.stuInterest =CheckVar1, CheckVar2, CheckVar3 # 列表的格式
# 按钮
tk.Button(self, text='确定', command=self.usr_insertIn).grid(row=7, column=2, pady=5)
多行文本框(Text)
样例:
代码实现:
# 新增页面
class InsertFrame(tk.Frame):
def __init__(self ,root):
super().__init__(root)
# tk.Label(self,text='学生信息的录入').pack()
self.messages = tk.StringVar()
self.create_page()
# 新增一条数据方法
def create_page(self):
tk.Label(self).grid(row=0 ,pady=10) # 布局
tk.Label(self, text='其它:').grid(row=6, column=1, pady=5)
tesxt = tk.Text(self, width=20, height=5)
tesxt.grid(row=6, column=2, pady=5)
tesxt.insert('insert', '请在这里输入')
self.messages = tesxt # 把文本框的值传递给变量,然后在按钮中使用get()获取值
# 按钮
tk.Button(self, text='确定', command=self.usr_insertIn).grid(row=7, column=2, pady=5)
消息框(messagebox)
样例:
代码实现:
from tkinter import messagebox # 注意:需要引用这个包
try:
if username == 'admin' and passward == '123456':
tk.messagebox.showinfo(title='Welcome', message='登录成功,欢迎您!!!')
self.page.destroy() # 销毁登录界面
MainPage(self.win)
else:
tk.messagebox.showerror(title='Error', message='用户名或密码错误,请重新登录!')
except:
tk.messagebox.showerror(title='错误', message='该用户可能不存在')
菜单栏(Menu)
样例:
代码实现:
class MainPage:
def __init__(self,master:tk.Tk):
self.root=master
# 设置窗口title
self.root.title('学生信息录入系统')
self.root.geometry('600x400') # 设置窗口大小:宽x高,注,此处不能为 "*",必须使用 "x"
self.create_page()
#创建菜单栏
def create_page(self):
# 先引用
self.insert_frame=InsertFrame(self.root) #调用封装好的--录入页面
self.look_frame=LookFrame(self.root) #调用封装好的--查询页面
self.delete_frame = DeleteFrame(self.root) # 调用封装好的--删除页面
self.Change_frame = ChangeFrame(self.root) #调用封装好的--修改页面
self.about_frame=AboutFrame(self.root) #调用封装好的--关于页面
# 添加菜单项
menubar=tk.Menu(self.root)
menubar.add_command(label='录入',command=self.insert_about)
menubar.add_command(label='查询',command=self.look_about)
menubar.add_command(label='删除',command=self.delete_about)
menubar.add_command(label='修改',command=self.Change_about)
menubar.add_command(label='关于',command=self.show_about)
self.root['menu']=menubar # 绑定到整个 root对象上
if __name__ =='__main__':
root=tk.Tk() # 调用Tk()创建主窗口 【实现学生信息录入】
MainPage(master=root)
root.mainloop() # 开启主循环,让窗口处于显示状态
树形列表控件(tree_view)
def create_page(self):
# columns==数据列 columns_values==列名
columns = ('stuid', 'stuName', 'stuSex', 'age', 'stuInterest', 'message')
columns_values = ('学号', '姓名', '性别', '年龄', '兴趣爱好', '其它')
# 创建 Treeview
self.tree_view = ttk.Treeview(self, show='headings', columns=columns)
self.tree_view.column('stuid', width=80, anchor='center')
self.tree_view.column('stuName', width=80, anchor='center')
self.tree_view.column('stuSex', width=80, anchor='center')
self.tree_view.column('age', width=80, anchor='center')
self.tree_view.column('stuInterest', width=80, anchor='center')
self.tree_view.column('message', width=80, anchor='center')
self.tree_view.heading('stuid', text='学号')
self.tree_view.heading('stuName', text='姓名')
self.tree_view.heading('stuSex', text='性别')
self.tree_view.heading('age', text='年龄')
self.tree_view.heading('stuInterest', text='兴趣爱好')
self.tree_view.heading('message', text='其它')
# 填充数据
self.tree_view.pack(fill=tk.BOTH, expand=True)
# 写的一个查询数据的方法
self.show_Data_frame()
# 刷新按钮
tk.Button(self, text='刷新数据', command=self.show_Data_frame).pack(anchor=tk.E, pady=5)
四、DBhelper(SQL查询的类)
import mysql.connector
class MysqlDb():
__db_config = {
'host':'localhost',
'port':3306,
'username':'root',
'password':'root',
'database':'tkinter',
'charset':'utf8'
}
def __init__(self,host=__db_config['host'],port=__db_config['port'],user=__db_config['username'],passwd=__db_config['password'],db=__db_config['database'],charset=__db_config['charset']):
try:
self.connection = mysql.connector.connect(host=host,port=port,user=user,passwd=passwd,db=db,charset=charset)
except mysql.connector.Error as e:
print("Connect Database Failed.",str(e))
self.cursor = self.connection.cursor(buffered=True)
# 查询所有
def fetchall(self, sql):
try:
self.__execute(sql)
return self.cursor.fetchall()
except Exception as error:
print(error)
# 查询多条数据
def fetchmany(self, sql, size=1):
try:
self.__execute(sql)
return self.cursor.fetchmany(size)
except Exception as error:
print(error)
# 查询一条数据
def fetchone(self, sql):
try:
self.__execute(sql)
return self.cursor.fetchall()
except Exception as error:
print(error)
# 增删改的方法
def change(self, sql):
try:
self.__execute(sql)
self.connection.commit()
return self.cursor.rowcount # 返回影响行数
except Exception as error:
print(error)
# 执行的私有方法
def __execute(self, sql):
self.cursor.execute(sql)
# 关闭连接和游标
def __del__(self):
self.connection.close()
四:界面优化
使用ttkbootstrap 优化tkinter 界面
pip install ttkbootstrap # 安装包
实例:
参考: https://ttkbootstrap.readthedocs.io/en/latest/styleguide/
标签:__,tkinter,column,text,self,笔记,学习,tk,root From: https://blog.51cto.com/u_16091142/6273588