赞
踩
琦鱼 花了不少米在莫平台买了不少课,以下是针对 python GUI 的相关学习笔记。
没有学历太难受了,光有技术可不行啊!业余道行才不看学历呢!
秉持着活到老学到老的信念,慢慢成为优秀的软件设计师。
文字太单调,直接看代码演示,代码每一行都有写注释。
开发环境 Python3.8
PyCharm 2020.1.3 (Professional Edition)
库安装命令:
pip install tkinter
使用tkinter库实现一个简单的窗体,并在窗体里添加一张图片,代码如下:
- """
- 使用 tkinter 库来实现 Python 窗体 GUI
- """
-
- import tkinter as tk # 导入tkinter库
-
- root = tk.Tk() # 创建一个名为root的窗体
- root.title("Py窗体") # 设置窗体标题
- # root.geometry("800x560") # 设置窗体大小
- root.geometry("800x460+120+60") # 设置窗体大小及显示位置
- root.resizable(False, False) # 设置窗体大小是否可变 False 为不可变 True 为可变(默认可变)
- root.iconbitmap("wwn.ico") # 设置窗体图标
- # root.configure(bg="blue") # 设置窗体背景颜色
- root.config(bg="#202124") # 设置窗体背景颜色
- text = tk.Label(root, text="滚一滚", bg="#202124", fg="#FFF", font=('楷体', 14, 'bold'))
- # 设置一个文本标签及其背景颜色和前景颜色、字体及字体大小 样式(bold)
- text.pack() # 将文本标签添加到窗体
- photo = tk.PhotoImage(file='jww.png') # 创建 PhotoImage 对象并指定图片文件
- lab = tk.Label(root, image=photo) # 创建一个标签(lab) 并将photo作为标签内容传入
- lab.pack() # 将图片标签添加到窗体
- root.mainloop() # 设置窗体可见(循环)
使用pillow库实现在窗体里添加图片,代码如下:
- """
- 为了更好的添加图片到窗体 ,这里用到了 pillow 库
- """
- from tkinter import * # 导入 tkinter 库及加载其所有方法
- from PIL import ImageTk, Image # 导入 PIL 库及加载 ImageTk和Image 方法
-
- root = Tk() # 创建一个名为root的窗体
- root.title("图片窗体") # 设置窗体标题
- image = ImageTk.PhotoImage(Image.open("jww.png")) # 使用ImageTk.PhotoImage方法获取图片
- label = Label(image=image) # 创建一个标签(lab) 并将image作为标签内容传入
- label.pack() # 将图片标签添加到窗体
- root.mainloop() # 设置窗体可见(循环)
Grid 布局相关代码如下:
- """ grid布局 网格布局 """
- import tkinter as tk # 导入tkinter库并重命名为 tk
-
- root = tk.Tk() # 创建一个名为root的窗体
- root.title("Py窗体") # 设置窗体标题
- # root.geometry("800x560") # 设置窗体大小
- root.geometry("800x460+120+60") # 设置窗体大小及显示位置
- tk.Button(root, text="按钮1").grid(row=0, column=0) # 创建一个按钮并使用grid布局
- tk.Button(root, text="按钮2").grid(row=1, column=1)
- tk.Button(root, text="按钮3").grid(row=2, column=2)
- tk.Button(root, text="按钮4").grid(row=3, column=3)
- tk.Button(root, text="按钮5").grid(row=4, column=4)
- tk.Button(root, text="按钮6").grid(row=5, column=5)
- root.mainloop() # 设置窗体可见
Pack 布局相关代码如下:
- """ pack 布局 """
-
- import tkinter as tk # 导入tkinter库并重命名为 tk
-
- root = tk.Tk() # 创建一个名为root的窗体
- root.title("Py窗体") # 设置窗体标题
- # root.geometry("800x560") # 设置窗体大小
- root.geometry("800x460+120+60") # 设置窗体大小及显示位置
- tk.Button(root, text="按钮").pack() # 创建一个按钮并使用pack布局
-
- Bt0 = tk.Button(root, text="按钮0").pack(side="right") # 创建一个按钮并将按钮添加到窗体
- # side 设置组件布局位置 right(右边)left(左边) bottom (底部) top (顶部)
-
- Bt1 = tk.Button(root, text="按钮1").pack(expand="yes",fill="x") # 创建一个按钮并将按钮添加到窗体
- # expand="yes" (扩展) fill="x" (水平方向填充组键) fill="y" (垂直方向填充组键)
-
- Bt2 = tk.Button(root, text="按钮2").pack(side="top",pady="10")
- Bt3 = tk.Button(root, text="按钮3").pack(side="top")
- # pady="10" 按钮之间垂直方向间隔 10 像素
-
- Bt4 = tk.Button(root, text="按钮4").pack(side="left",padx="10")
- Bt5 = tk.Button(root, text="按钮5").pack(side="left")
- # pady="10" 按钮之间水平方向间隔 10 像素
-
- Bt6 = tk.Button(root, text="按钮6").pack(side="left",ipadx="10")
- Bt7 = tk.Button(root, text="按钮7").pack(side="left")
- # ipadx="10" (组建填充10像素,组建扩大 水平方向)
- # ipady="10" (组建填充10像素,组建扩大 垂直方向)
-
- root.mainloop() # 设置窗体可见
place 布局相关代码如下:
- """ place 布局 绝对布局 灵活 """
- import tkinter as tk # 导入tkinter库并重命名为 tk
-
- root = tk.Tk() # 创建一个名为root的窗体
- root.title("Py窗体") # 设置窗体标题
- # root.geometry("800x560") # 设置窗体大小
- root.geometry("800x460+120+60") # 设置窗体大小及显示位置
- tk.Label(root, text="请输入姓名:").place(x=30, y=10) # 创建标签并使用place布局
- tk.Entry(root).place(x=30, y=50) # 创建输入框并使用place布局
- tk.Button(root, text="提交").place(x=30, y=90) # 创建一个按钮并使用place布局
- # (x=0, y=0) 设置按钮的坐标
- root.mainloop() # 设置窗体可见
-
- '''
- 使用 place 布局需要注意的问题:
- >>> 对于大型和复杂界面,手动设置每个小部件的位置可能会变得困难而且容易出错
- >>> 如果窗体发生大小变化,需要手动调整小部件的大小和尺寸,因为 place 布局不会自动适应大小变化
- >>> 如果小部件之间有重叠,可能会导致无法正常显示和交互
- 虽然 place 布局具有灵活性,但通常建议在简单布局中使用 pack 或 grid 布局管理器,而将 place 保留给需要更精确控制的特定情况
- '''
相关代码如下:
- """
- 事件绑定和处理
- quit 退出
- command 控制,指挥
- click 点击
- Motion 运动
- """
- import tkinter as tk # 导入tkinter库并重命名为 tk
-
-
- # 事件回调函数会自动接收一个参数(通常命名event),该参数包含有关事件的信息,如鼠标位置,按下的键值等。
- def click(event):
- print("鼠标单击:", event.x, event.y) # 获取鼠标实时在按钮上的坐标
- # print("按钮点击触发!")
-
-
- root = tk.Tk() # 创建一个名为root的窗体
- root.title("Py事件窗体") # 设置窗体标题
- root.geometry("500x460") # 设置窗体大小
-
- button = tk.Button(root, text="关闭") # 创建一个关闭按钮
- button.bind("<Motion>", click)
- # <Button-1> 表示鼠标左键 <Button-2> 表示鼠标中键 <Button-3> 表示鼠标右键 <Motion> 表示鼠标运动
- button.pack() # 设置按钮布局
- # tk.Button(root, text="关闭", command=quit).pack() # 创建一个关闭按钮并使用 pack 布局
- # command=quit (command :控制 指挥 quit 退出)command 事件
-
-
- root.mainloop() # 设置窗体可见
相关代码如下:
- """
- 事件绑定和处理
- quit 退出
- command 控制,指挥
- click 点击
- Motion 运动
- keypress 按键
- """
- import tkinter as tk # 导入tkinter库并重命名为 tk
-
-
- def key(event):
- print("键盘事件触发:", event.keysym)
-
-
- # 键盘事件触发时,def key函数被调用,事件返回键盘键值
-
- root = tk.Tk() # 创建一个名为root的窗体
- frame = tk.Frame(root, width=300, height=500) # 在窗体里设置一个容器,宽300,高500
- frame.bind("<KeyPress>", key)
- frame.pack() # 设置容器布局
- frame.focus_set() # 设置焦点,已接收键盘事件
- root.mainloop() # 设置窗体可见
相关代码如下:
- """
- 弹窗,警告窗口
- """
- import tkinter as tk # 导入tkinter库并重命名为 tk
-
- win = tk.Tk() # 创建一个名为win的窗体
- win.title("登录")
- win.geometry("500x460") # 设置窗体大小
- tk.Label(win, text="账号:").grid(row=0)
- tk.Label(win, text="密码:").grid(row=2)
- # 使用 grid 布局,将两个标签分别布置在第一行和第二行
- e1 = tk.Entry(win) # 创建一个输入框控件
- e2 = tk.Entry(win, show='*') # 创建一个输入框控件 以 * 号形式显示密码
- e1.grid(row=0, column=1, padx=10, pady=5) # 控件设置为 grid 布局,并设置相关属性
- e2.grid(row=2, column=1, padx=10, pady=5) # 控件设置为 grid 布局,并设置相关属性
-
- tk.Button(win, text="登录", width=10).grid(row=3, column=0, padx=15, pady=5)
- tk.Button(win, text="退出", width=10, command=win.quit).grid(row=3, column=1, padx=15, pady=5)
-
- # 使用 grid() 的函数布局,并控制按钮的显示位置
- win.mainloop() # 设置窗体可见
登录时的相关弹窗:
- """
- 弹窗,警告窗口
- """
- import tkinter as tk # 导入tkinter库并重命名为 tk
- from tkinter import messagebox # 导入messagebox模块
-
- win = tk.Tk() # 创建一个名为win的窗体
- win.title("登录")
- win.geometry("500x460") # 设置窗体大小
- tk.Label(win, text="账号:").grid(row=0)
- tk.Label(win, text="密码:").grid(row=2)
- # 使用 grid 布局,将两个标签分别布置在第一行和第二行
- e1 = tk.Entry(win) # 创建一个输入框控件
- e2 = tk.Entry(win, show='*') # 创建一个输入框控件 以 * 号形式显示密码
- e1.grid(row=0, column=1, padx=10, pady=5) # 控件设置为 grid 布局,并设置相关属性
- e2.grid(row=2, column=1, padx=10, pady=5) # 控件设置为 grid 布局,并设置相关属性
-
-
- def login():
- messagebox.showinfo("提示", "欢迎使用该软件!")
-
-
- # 登录按钮被点击触发 login 函数,调用messagebox库的showinfo方法,该方法弹出一个提示窗口,内容:欢迎使用该软件!
-
- tk.Button(win, text="登录", width=10, command=login).grid(row=3, column=0, padx=15, pady=5)
- tk.Button(win, text="退出", width=10, command=win.quit).grid(row=3, column=1, padx=15, pady=5)
-
- # 使用 grid() 的函数布局,并控制按钮的显示位置
- win.mainloop() # 设置窗体可见
-
- '''
- 在 tkinter 中,可以使用 messagebox 模块创建不同的提示窗口。
- messagebox.showinfo(title, message) : 显示信息窗口,显示一般信息和成功消息
- messagebox.showwarning(title, message) : 显示警告窗口,显示警告信息和提示消息
- messagebox.showerror(title, message) : 显示错误窗口,显示错误信息和异常消息
- messagebox.askquestion(title, message) : 显示询问窗口,显示用户是与否的问题
- messagebox.askyesno(title, message) : 显示是与否选择窗口,让用户选择
- messagebox.askokcancel(title, message) : 显示确定与取消选择窗口,让用户选择
- messagebox.askyesnocancel(title, message) : 显示是与否和取消选择窗口,让用户选择
- '''
相关代码如下:
- """
- 多行文本框
- """
-
- import tkinter as tk # 导入tkinter库并重命名为 tk
-
- wino = tk.Tk() # 创建一个名为wino的窗体
- wino.title("多行文本框") # 设置窗体标题
- wino.geometry("800x460+120+60") # 设置窗体大小及显示位置
- textarea = tk.Text(wino, height=12, width=20, bg="#242528", fg="white", font=("楷体", 16))
- # 设置一个多行文本框,指定高12,宽20,背景为黑色(#242528) 前景色为白色,设置字体为 楷体 字号 16
- textarea.pack() # 选择布局方式
- wino.mainloop() # 设置窗体可见
相关代码如下:
- """
- 下拉选择菜单
- """
-
- import tkinter as tk # 导入tkinter库并重命名为 tk
- from tkinter import ttk # 导入ttk 模块
-
- wino = tk.Tk() # 创建一个名为wino的窗体
- wino.title("下拉菜单") # 设置窗体标题
- wino.geometry("800x460+120+60") # 设置窗体大小及显示位置
- cbox = ttk.Combobox(wino, width=16, font=("楷体", 16)) # 设置一个下拉菜单 宽16 字体为楷体 字体大小16
- cbox['value'] = ('醉翁', '莲花', '瑶池') # 设置下拉菜单 的菜单项
- cbox.pack() # 选择布局方式
- wino.mainloop() # 设置窗体可见
相关代码如下:
- """
- 用户登录时的密码验证
- 变动函数:login
- """
- import tkinter as tk # 导入tkinter库并重命名为 tk
- from tkinter import messagebox # 导入messagebox模块
-
- win = tk.Tk() # 创建一个名为win的窗体
- win.title("登录")
- win.geometry("500x460") # 设置窗体大小
- tk.Label(win, text="账号:").grid(row=0)
- tk.Label(win, text="密码:").grid(row=2)
- # 使用 grid 布局,将两个标签分别布置在第一行和第二行
- e1 = tk.Entry(win) # 创建一个输入框控件
- e2 = tk.Entry(win, show='*') # 创建一个输入框控件 以 * 号形式显示密码
- e1.grid(row=0, column=1, padx=10, pady=5) # 控件设置为 grid 布局,并设置相关属性
- e2.grid(row=2, column=1, padx=10, pady=5) # 控件设置为 grid 布局,并设置相关属性
-
-
- def login():
- username = e1.get() # 将e1用户输入的内容赋值给变量username
- password = e2.get() # 将e2用户输入的内容赋值给变量password
- if username == "qiyu" and password == "12345678":
- messagebox.showinfo("提示", "登录成功!")
- else:
- messagebox.showerror("登录失败", "用户名或密码错误!")
-
-
- # 使用 if... else (条件判断) 判断用户的账户密码是否正确
-
- # 登录按钮被点击触发 login 函数,调用messagebox库的showinfo方法,该方法弹出一个提示窗口
-
- tk.Button(win, text="登录", width=10, command=login).grid(row=3, column=0, padx=15, pady=5)
- tk.Button(win, text="退出", width=10, command=win.quit).grid(row=3, column=1, padx=15, pady=5)
-
- # 使用 grid() 的函数布局,并控制按钮的显示位置
- win.mainloop() # 设置窗体可见
相关代码如下:
- """
- 单选框和复选框
- """
- import tkinter as tk # 导入tkinter库并重命名为 tk
-
- root = tk.Tk() # 创建一个名为root的窗体
- root.title("Py窗体") # 设置窗体标题
-
- root.geometry("800x460+120+60") # 设置窗体大小及显示位置
- r1 = tk.Radiobutton(root, text="错", font=("楷体", 16), value=1) # 设置一个单选框 文本为 对 使用pack布局 设置字体字号
- r1.pack()
- r2 = tk.Radiobutton(root, text="错", font=("楷体", 16), value=1) # 设置一个单选框 文本为 错 使用pack布局 设置字体字号
- r2.pack()
-
- c1 = tk.Checkbutton(root, text="红", font=("楷体", 16))
- c1.pack()
- c2 = tk.Checkbutton(root, text="红", font=("楷体", 16))
- c2.pack()
- c3 = tk.Checkbutton(root, text="红", font=("楷体", 16))
- c3.pack()
- # 设置三个单选框 文本为 红 绿 蓝 使用pack布局 设置字体字号
- root.mainloop() # 设置窗体可见
相关写入代码如下:
- import tkinter # 导入 tkinter 库
- import tkinter as tk
- from tkinter import ttk
- from openpyxl import Workbook # 导入库,openpyxl用于处理Excel文件
-
- win = tk.Tk()
- win.title('ExcelDate') # 设置窗体标题
- win.geometry("400x350") # 设置窗体大小
-
- tk.Label(win, text="姓名:").grid(row=0) # 创建一个标签,使用grid布局,行=0
- name = tk.Entry(win) # 创建 对应输入框 组件
- name.grid(row=0, column=1, pady=5) # 使用grid布局,行=0 列=1 组建间距Y=5
-
- tk.Label(win, text="课程:").grid(row=1) # 创建一个标签,使用grid布局,行=0
- course = ttk.Combobox(win, width=18) # 创建下拉列表组件,设置宽18
- course['value'] = ('语文', '数学', '英语') # 添加下拉列表选项
- course.grid(row=1, column=1) # 使用grid布局,行=1 列=1
-
- tk.Label(win, text="成绩:").grid(row=2) # 创建一个标签,使用grid布局,行=2
- score = tk.Entry(win) # 创建 对应输入框 组件
- score.grid(row=2, column=1, pady=5) # 使用grid布局,行=2 列=1 组建间距Y=5
-
-
- def save(): # 点击"写入"按钮被触发的函数
- wb = Workbook() # 创建一个新的工作簿
- ws = wb.active # 选择默认的工作表
- ws['A1'] = "姓名" # 写入内容到对应单元格 A1
- ws['B1'] = "课程" # 写入内容到对应单元格 B1
- ws['C1'] = "成绩" # 写入内容到对应单元格 C1
-
- ws['A2'] = name.get() # 获取name输入框内容写入对应单元格 A2
- ws['B2'] = course.get() # 获取name输入框内容写入对应单元格 B2
- ws['C2'] = score.get() # 获取name输入框内容写入对应单元格 C2
- wb.save("Date.xlsx") # 保存文件 "Date.xlsx"
-
-
- tkinter.Button(win, text="写入", width=10, command=save).grid(row=3, column=1)
- # 创建一个按钮,设置宽为10,绑定save事件,使用grid布局,行=3 列=1
-
- win.mainloop() # 设置窗体可见
-
- # 缺点:每运行一次,之前的数据会被覆盖;而且每次写入的数据有局限性,点击"写入"按钮后输入的数据没有清空
相关读取代码如下:
- import tkinter as tk # 导入tkinter库
-
- from openpyxl.reader.excel import load_workbook # 导入openpyxl库
-
- win = tk.Tk() # 创建一个窗体
- win.title("信息查询") # 设置窗体标题
- win.geometry('340x200') # 设置窗体大小
-
-
- def search(): # "查询" 按钮被点击的回调函数
- name = namentry.get() # 获取输入框相关内容
- workbook = load_workbook(filename='Date.xlsx') # 加载要查询的Excel文件
- sheet = workbook.active
-
- for row in sheet.iter_rows(values_only=True): # 遍历查找数据
- if name in row:
- score = row[2]
- resultlabel.config(text="成绩:{}".format(score)) # 如果结果匹配就输出
- return
- resultlabel.config(text="未查询到相关成绩!") # 如果没有查询到结果就输出这句话
-
-
- namelabel = tk.Label(win, text="请输入姓名:") # 创建一个标签
- namelabel.pack() # 设置pack布局
-
- namentry = tk.Entry(win) # 创建输入框
- namentry.pack() # 设置pack布局
-
- searchbutton = tk.Button(win, text="查询", command=search) # 创建一个按钮并绑定相关事件
- searchbutton.pack() # 设置pack布局
-
- resultlabel = tk.Label(win, text="") # 创建一个标签
- resultlabel.pack() # 设置pack布局
-
- win.mainloop() # 启动主循环 (设置窗体可见)
写入数据到 json 文件
- """
- Json 数据交互 ( Json ==>> JavaScript Object Notation)
- Json 特点:
- 1.简洁 2.可读性好 3.可扩展性强 4.跨平台和语言的互操作性 5.广泛支持
- 这是一个写入数据到 json 文件的程序
- """
-
- import tkinter as tk # 导入tkinter库
- import json # 导入 json 库
-
-
- def save(): # "保存"按钮回调函数
- date = {
- 'name': namentry.get(),
- 'score': scorentry.get()
- }
- with open('Date.json', 'a', encoding='utf-8') as file:
- json.dump(date, file, ensure_ascii=False)
- file.write('\n')
- namentry.delete(0, tk.END) # 清空输入框
- scorentry.delete(0, tk.END)
-
-
- win = tk.Tk() # 创建一个窗体
- win.title("JsonRead") # 设置窗体标题
- win.geometry('340x270') # 设置窗体大小
-
- namelabel = tk.Label(win, text="请输入姓名:") # 创建一个标签
- namelabel.pack() # 设置pack布局
-
- namentry = tk.Entry(win) # 创建一个输入框
- namentry.pack() # 设置pack布局
-
- scorelabel = tk.Label(win, text="语文成绩:") # 创建一个标签
- scorelabel.pack() # 设置pack布局
-
- scorentry = tk.Entry(win) # 创建一个输入框
- scorentry.pack() # 设置pack布局
-
- savebutton = tk.Button(win, text="保存", command=save) # 创建一个按钮并绑定事件
- savebutton.pack() # 设置pack布局
-
- win.mainloop() # 启动主循环 (设置窗体可见)
读取 Json 文件数据
- """
- 读取 Json 文件里的数据
- """
- import json
- import tkinter as tk # 导入tkinter库
-
-
- def search(): # "查询" 按钮被点击的回调函数
- name = namentry.get() # 获取输入框相关内容
- with open('Date.json', 'r', encoding='utf-8') as f:
- lines = f.readlines()
- for line in lines:
- date = json.loads(line)
- if date["name"] == name:
- score = date["score"]
- resultlabel.config(text="成绩:{}".format(score)) # 如果结果匹配就输出
- return
- resultlabel.config(text="未查询到相关成绩!") # 如果没有查询到结果就输出这句话
-
-
- win = tk.Tk() # 创建一个窗体
- win.title("信息查询") # 设置窗体标题
- win.geometry('340x200') # 设置窗体大小
-
- namelabel = tk.Label(win, text="请输入姓名:") # 创建一个标签
- namelabel.pack() # 设置pack布局
-
- namentry = tk.Entry(win) # 创建输入框
- namentry.pack() # 设置pack布局
-
- searchbutton = tk.Button(win, text="查询", command=search) # 创建一个按钮并绑定相关事件
- searchbutton.pack() # 设置pack布局
-
- resultlabel = tk.Label(win, text="") # 创建一个标签
- resultlabel.pack() # 设置pack布局
-
- win.mainloop() # 启动主循环 (设置窗体可见)
MySQL 安装程序
1.到官网下载
2.双击打开安装程序
3.直接点击 下一步
4.勾选 接受协议许可,点击下一步
5.选择 典型类型,点击下一步
6.点击 安装
7.[安装过程]
8.点击 完成
9.点击 下一步
10.选择 安装位置 点击下一步
11.传输协议 和 端口 默认不修改,点击下一步
12.设置 root 密码,点击下一步
13.直接点击下一步
14.不修改,点击下一步
15.直接点击下一步
16.点击 执行
17.执行完成,点击下一步
18.点击 完成,安装结束
打开 cmd (命令提示符&控制台&终端),打开的方式多种多样,我只讲我用的方式
按键盘上的 Win 加 r 键,在弹出的 运行 窗口输入 cmd 回车(enter键)或点击确定都行
以文件夹形式打开 MySQL 安装时的 bin 目录,将路径复制下来
在 cmd 里输入 cd 空格 加刚刚复制的路径(可用 Ctrl 加 c 键粘贴上)回车 (enter键)执行
# 你的 MySQL 安装路径可能和我的不一样
使用
为了方便实时调用 My SQL 相关程序,我这里配置了一下环境变量 path
cmd 里相关操作如下,文字这里就不多讲解了
- Microsoft Windows [版本 10.0.19042.746]
- (c) 2020 Microsoft Corporation. 保留所有权利。
-
- C:\Users\Administrator>mysql -u root -p # 连接数据库登入root账户,输入安装时设置的密码
- Enter password: ********
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 15
- Server version: 8.4.0 MySQL Community Server - GPL
-
- Copyright (c) 2000, 2024, Oracle and/or its affiliates.
-
- Oracle is a registered trademark of Oracle Corporation and/or its
- affiliates. Other names may be trademarks of their respective
- owners.
-
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
-
- mysql> create database test; # 创建一个名为 test 的数据库
- Query OK, 1 row affected (0.00 sec)
-
- mysql> show databases; # 查看 数据库 列表
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- | test |
- +--------------------+
- 5 rows in set (0.00 sec)
-
- mysql> use test; # 选中名为 test 的数据库
- Database changed
- mysql> create table user(id int,name char(30)); # 添加一个列表,并在列表里添加id和name字段
- Query OK, 0 rows affected (0.02 sec)
-
- mysql> desc user; # 查看数据表
- +-------+----------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+----------+------+-----+---------+-------+
- | id | int | YES | | NULL | |
- | name | char(30) | YES | | NULL | |
- +-------+----------+------+-----+---------+-------+
- 2 rows in set (0.00 sec)
-
- mysql> insert into user values(1,'qiyu'); # 在表里插入一条数据
- Query OK, 1 row affected (0.00 sec)
-
- mysql> select * from user; # 查看表里的数据
- +------+------+
- | id | name |
- +------+------+
- | 1 | qiyu |
- +------+------+
- 1 row in set (0.00 sec)
-
- mysql> drop table user; # 删除列表
- Query OK, 0 rows affected (0.01 sec)
-
- mysql> drop database text; ### 输入错误 ###
- ERROR 1008 (HY000): Can't drop database 'text'; database doesn't exist
- mysql> drop database test; # 删除数据库 (test)
- Query OK, 0 rows affected (0.00 sec)
-
- mysql> show databases; # 重新查看数据库列表
- +--------------------+
- | Database |
- +--------------------+
- | information_schema |
- | mysql |
- | performance_schema |
- | sys |
- +--------------------+
- 4 rows in set (0.00 sec)
-
- mysql> exit # 退出 MySQL 数据库程序
- Bye
-
- C:\Users\Administrator>
通过下面的程序将数据保存到 MySQL 数据库
pip install pymysql # 安装 pymysql 库
提前创建 数据库test 创建表,图形化界面程序代码如下:
- """
- 将数据写入 MySQL 数据库
- """
- import tkinter as tk # 导入tkinter库
- import pymysql # 导入pymysql库
-
-
- def save():
- name = namentry.get()
- score = scorentry.get()
- cnx = pymysql.connect( # 连接 MySQL 数据库
- host='localhost', # 本机的地址及端口
- user='root', # 账户 root
- password='12345678', # 密码
- database='test' # 指定数据库
- )
- cursor = cnx.cursor() # 创建游标对象
- sql = "insert into user(name,score) values(%s,%s)" # sql 表示要执行的 sql 语句 %s是占位符
- cursor.execute(sql, (name, score))
- cnx.commit() # 提交事务
- cnx.close() # 并关闭连接
- # 清空输入框内容
- namentry.delete(0, tk.END)
- scorentry.delete(0, tk.END)
-
-
- win = tk.Tk() # 创建一个窗体
- win.title("WriteSQL") # 设置窗体标题
- win.geometry('340x200') # 设置窗体大小
-
- namelabel = tk.Label(win, text="姓名:") # 创建一个标签
- namelabel.pack() # 设置pack布局
-
- namentry = tk.Entry(win) # 创建输入框
- namentry.pack() # 设置pack布局
-
- scorelabel = tk.Label(win, text="成绩:") # 创建一个标签
- scorelabel.pack() # 设置pack布局
-
- scorentry = tk.Entry(win) # 创建输入框
- scorentry.pack() # 设置pack布局
-
- button = tk.Button(win, text="保存", command=save) # 创建一个按钮并绑定相关事件
- button.pack() # 设置pack布局
-
- win.mainloop() # 启动主循环 (设置窗体可见)
代码运行结果图:
数据库 数据 展示:
cmd 里 数据库 数据 展示:
- Microsoft Windows [版本 10.0.19042.746]
- (c) 2020 Microsoft Corporation. 保留所有权利。
-
- C:\Users\Administrator>mysql -u root -p
- Enter password: ********
- Welcome to the MySQL monitor. Commands end with ; or \g.
- Your MySQL connection id is 21
- Server version: 8.4.0 MySQL Community Server - GPL
-
- Copyright (c) 2000, 2024, Oracle and/or its affiliates.
-
- Oracle is a registered trademark of Oracle Corporation and/or its
- affiliates. Other names may be trademarks of their respective
- owners.
-
- Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
-
- mysql> use test;
- Database changed
- mysql> desc user;
- +-------+----------+------+-----+---------+-------+
- | Field | Type | Null | Key | Default | Extra |
- +-------+----------+------+-----+---------+-------+
- | name | char(30) | YES | | NULL | |
- | score | int | YES | | NULL | |
- +-------+----------+------+-----+---------+-------+
- 2 rows in set (0.08 sec)
-
- mysql> select * from user;
- +------+-------+
- | name | score |
- +------+-------+
- | 萌萌 | 99 |
- | 玲玲 | 87 |
- | 琪琪 | 90 |
- +------+-------+
- 3 rows in set (0.01 sec)
-
- mysql>
程序代码如下:
- """
- 读取数据库里的数据
- """
- import tkinter as tk # 导入tkinter库
-
- import pymysql # 导入pymysql库
-
- win = tk.Tk() # 创建一个窗体
- win.title("ReadSQL") # 设置窗体标题
- win.geometry('340x200') # 设置窗体大小
-
- cnx = pymysql.connect( # 连接 MySQL 数据库
- host='localhost', # 本机的地址及端口
- user='root', # 账户 root
- password='12345678', # 密码
- database='test' # 指定数据库
- )
-
-
- def search(): # 查询按钮回调函数
- name = namentry.get() # 获取姓名输入框内容
- cursor = cnx.cursor()
- cursor.execute("select score from user where name=%s", name)
- result = cursor.fetchone()
-
- if result is not None: # 查找匹配的数据
- score = result[0]
- scorelabel.config(text=f"{name} 的成绩为:{score}") # 找到输出
- else:
- scorelabel.config(text=f"找不到{name} 的成绩") # 未找到输出
- cursor.close() # 关闭查找
-
-
- namelabel = tk.Label(win, text="请输入姓名:") # 创建一个标签
- namelabel.pack() # 设置pack布局
-
- namentry = tk.Entry(win) # 创建输入框
- namentry.pack() # 设置pack布局
-
- scorelabel = tk.Label(win) # 创建一个标签
- scorelabel.pack() # 设置pack布局
-
- button = tk.Button(win, text="查询", command=search) # 创建一个按钮并绑定相关事件
- button.pack() # 设置pack布局
-
- win.mainloop() # 启动主循环 (设置窗体可见)
- cnx.close() # MySQL 关闭连接数据库
代码运行后的界面:
程序代码如下:
- """
- 给窗体添加 主菜单
- tearoff=False :通过将 tearoff 设置为 False,从而使菜单不可拆分,
- 以确保始终与主窗体关联,无法单独悬浮显示
- """
- import tkinter as tk # 导入tkinter库
-
- win = tk.Tk() # 创建一个窗体
- win.title("MainMenu") # 设置窗体标题
- win.geometry('640x400') # 设置窗体大小
- win.config(bg='black') # 设置窗体背景为黑色
-
- menuMain = tk.Menu(win) # 创建主菜单
- fileMenu = tk.Menu(menuMain, tearoff=False) # 在主菜单下创建文件菜单
- menuMain.add_cascade(label="文件", menu=fileMenu) # 设置菜单名并绑定到文件菜单
-
- fileMenu.add_command(label="打开") # 创建子选项菜单
- fileMenu.add_command(label="保存")
- fileMenu.add_separator() # 分割线
- fileMenu.add_command(label="退出", command=quit)
-
- editMenu = tk.Menu(menuMain, tearoff=False) # 在主菜单下创建编辑菜单
- menuMain.add_cascade(label="编辑", menu=editMenu) # 设置菜单名并绑定到编辑菜单
-
- editMenu.add_command(label="复制") # 创建子选项菜单
- editMenu.add_command(label="粘贴")
- editMenu.add_command(label="剪切")
-
- win.config(menu=menuMain) # 将主菜单放入窗体里
-
- win.mainloop() # 启动主循环 (设置窗体可见)
代码运行效果图如下:
使用到了 ttkbootstrap 库(不完善)
pip install ttkbootstrap # 安装ttkbootstrap 库
程序代码如下:
- """
- 图形化界面的优化 ttkrootstrap
- styleboot :启动样式
- """
- import tkinter as tk # 导入tkinter库
-
- import ttkbootstrap as ttk # 导入ttkbootstrap库
- from ttkbootstrap.constants import *
-
- win = ttk.Window(title="BeautifScreen", # 创建一个窗体 设置窗体标题
- themename="litera", # 设置主题
- size=(320, 460), # 设置窗体大小
- position=(500, 500), # 设置窗体显示位置
- resizable=None, # 设置窗体大小固定 (不可更改)
- alpha=0.9) # 设置窗体透明度
-
- inputLabel = tk.Label(win, text="姓名:").grid(row=0, column=0, pady=10) # 创建标签并设置布局
- inputentry = tk.Entry(win).grid(row=0, column=1, pady=10) # 创建输入框并设置布局
-
- StarSignLabel = tk.Label(win, text="星座:").grid(row=1, column=0) # 创建标签并设置布局
- StarSigncombobox = ttk.Combobox(win, values=[
- "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座"
- ], width=17).grid(row=1, column=1, pady=5) # 创建下拉列表并添加相关选项,设置宽度及布局
-
- occupationLabel = tk.Label(win, text="从事的职业:").grid(row=2, column=0) # 创建标签并设置布局
- occupation1 = ttk.Checkbutton(win, text="程序员", styleboot="selected").grid(row=2, column=1) # 创建复选框并设置布局
- occupation2 = ttk.Checkbutton(win, text="网络工程师", styleboot="rounded toggle").grid(row=3, column=1)
- occupation3 = ttk.Checkbutton(win, text="大数据工程师", styleboot="squared toggle").grid(row=4, column=1)
- occupation4 = ttk.Checkbutton(win, text="硬件工程师").grid(row=5, column=1)
- occupation5 = ttk.Checkbutton(win, text="前端开发").grid(row=6, column=1)
- occupation6 = ttk.Checkbutton(win, text="后端开发").grid(row=7, column=1)
- occupation7 = ttk.Checkbutton(win, text="软件架构师").grid(row=8, column=1)
- occupation8 = ttk.Checkbutton(win, text="软件工程师").grid(row=9, column=1)
-
- submitButton = ttk.Button(win, text="保存并提交", width=18, styleboot="danger").grid(row=5, column=1, pady=5) # 创建按钮并设置布局
- clearButton = ttk.Button(win, text="取消并重置", width=18).grid(row=6, column=1)
-
- win.mainloop() # 启动主循环 (设置窗体可见)
- pip install pyinstaller # 安装封装库 pyinstaller
- pyinstaller --onefile --icon=fish.ico encapsulation.py # 执行封装
- # 上面的命令里 fish.ico 是一个ico图标,encapsulation.py 是一个 python 文件
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。