当前位置:   article > 正文

Python GUI 图形化用户界面设计(基于tkinter库)_tkinter库设计界面

tkinter库设计界面
 写在前面

琦鱼 花了不少米在莫平台买了不少课,以下是针对 python GUI 的相关学习笔记。

没有学历太难受了,光有技术可不行啊!业余道行才不看学历呢!

秉持着活到老学到老的信念,慢慢成为优秀的软件设计师

文字太单调,直接看代码演示,代码每一行都有写注释。

开发环境  Python3.8  

PyCharm 2020.1.3 (Professional Edition)

库安装命令:

pip install tkinter
窗体添加图片

使用tkinter库实现一个简单的窗体,并在窗体里添加一张图片,代码如下: 

  1. """
  2. 使用 tkinter 库来实现 Python 窗体 GUI
  3. """
  4. import tkinter as tk # 导入tkinter库
  5. root = tk.Tk() # 创建一个名为root的窗体
  6. root.title("Py窗体") # 设置窗体标题
  7. # root.geometry("800x560") # 设置窗体大小
  8. root.geometry("800x460+120+60") # 设置窗体大小及显示位置
  9. root.resizable(False, False) # 设置窗体大小是否可变 False 为不可变 True 为可变(默认可变)
  10. root.iconbitmap("wwn.ico") # 设置窗体图标
  11. # root.configure(bg="blue") # 设置窗体背景颜色
  12. root.config(bg="#202124") # 设置窗体背景颜色
  13. text = tk.Label(root, text="滚一滚", bg="#202124", fg="#FFF", font=('楷体', 14, 'bold'))
  14. # 设置一个文本标签及其背景颜色和前景颜色、字体及字体大小 样式(bold)
  15. text.pack() # 将文本标签添加到窗体
  16. photo = tk.PhotoImage(file='jww.png') # 创建 PhotoImage 对象并指定图片文件
  17. lab = tk.Label(root, image=photo) # 创建一个标签(lab) 并将photo作为标签内容传入
  18. lab.pack() # 将图片标签添加到窗体
  19. root.mainloop() # 设置窗体可见(循环)

使用pillow库实现在窗体里添加图片,代码如下:

  1. """
  2. 为了更好的添加图片到窗体 ,这里用到了 pillow 库
  3. """
  4. from tkinter import * # 导入 tkinter 库及加载其所有方法
  5. from PIL import ImageTk, Image # 导入 PIL 库及加载 ImageTk和Image 方法
  6. root = Tk() # 创建一个名为root的窗体
  7. root.title("图片窗体") # 设置窗体标题
  8. image = ImageTk.PhotoImage(Image.open("jww.png")) # 使用ImageTk.PhotoImage方法获取图片
  9. label = Label(image=image) # 创建一个标签(lab) 并将image作为标签内容传入
  10. label.pack() # 将图片标签添加到窗体
  11. root.mainloop() # 设置窗体可见(循环)
Grid 布局

Grid 布局相关代码如下:

  1. """ grid布局 网格布局 """
  2. import tkinter as tk # 导入tkinter库并重命名为 tk
  3. root = tk.Tk() # 创建一个名为root的窗体
  4. root.title("Py窗体") # 设置窗体标题
  5. # root.geometry("800x560") # 设置窗体大小
  6. root.geometry("800x460+120+60") # 设置窗体大小及显示位置
  7. tk.Button(root, text="按钮1").grid(row=0, column=0) # 创建一个按钮并使用grid布局
  8. tk.Button(root, text="按钮2").grid(row=1, column=1)
  9. tk.Button(root, text="按钮3").grid(row=2, column=2)
  10. tk.Button(root, text="按钮4").grid(row=3, column=3)
  11. tk.Button(root, text="按钮5").grid(row=4, column=4)
  12. tk.Button(root, text="按钮6").grid(row=5, column=5)
  13. root.mainloop() # 设置窗体可见
Pack 布局

Pack 布局相关代码如下:

  1. """ pack 布局 """
  2. import tkinter as tk # 导入tkinter库并重命名为 tk
  3. root = tk.Tk() # 创建一个名为root的窗体
  4. root.title("Py窗体") # 设置窗体标题
  5. # root.geometry("800x560") # 设置窗体大小
  6. root.geometry("800x460+120+60") # 设置窗体大小及显示位置
  7. tk.Button(root, text="按钮").pack() # 创建一个按钮并使用pack布局
  8. Bt0 = tk.Button(root, text="按钮0").pack(side="right") # 创建一个按钮并将按钮添加到窗体
  9. # side 设置组件布局位置 right(右边)left(左边) bottom (底部) top (顶部)
  10. Bt1 = tk.Button(root, text="按钮1").pack(expand="yes",fill="x") # 创建一个按钮并将按钮添加到窗体
  11. # expand="yes" (扩展) fill="x" (水平方向填充组键) fill="y" (垂直方向填充组键)
  12. Bt2 = tk.Button(root, text="按钮2").pack(side="top",pady="10")
  13. Bt3 = tk.Button(root, text="按钮3").pack(side="top")
  14. # pady="10" 按钮之间垂直方向间隔 10 像素
  15. Bt4 = tk.Button(root, text="按钮4").pack(side="left",padx="10")
  16. Bt5 = tk.Button(root, text="按钮5").pack(side="left")
  17. # pady="10" 按钮之间水平方向间隔 10 像素
  18. Bt6 = tk.Button(root, text="按钮6").pack(side="left",ipadx="10")
  19. Bt7 = tk.Button(root, text="按钮7").pack(side="left")
  20. # ipadx="10" (组建填充10像素,组建扩大 水平方向)
  21. # ipady="10" (组建填充10像素,组建扩大 垂直方向)
  22. root.mainloop() # 设置窗体可见
Place 布局

place 布局相关代码如下:

  1. """ place 布局 绝对布局 灵活 """
  2. import tkinter as tk # 导入tkinter库并重命名为 tk
  3. root = tk.Tk() # 创建一个名为root的窗体
  4. root.title("Py窗体") # 设置窗体标题
  5. # root.geometry("800x560") # 设置窗体大小
  6. root.geometry("800x460+120+60") # 设置窗体大小及显示位置
  7. tk.Label(root, text="请输入姓名:").place(x=30, y=10) # 创建标签并使用place布局
  8. tk.Entry(root).place(x=30, y=50) # 创建输入框并使用place布局
  9. tk.Button(root, text="提交").place(x=30, y=90) # 创建一个按钮并使用place布局
  10. # (x=0, y=0) 设置按钮的坐标
  11. root.mainloop() # 设置窗体可见
  12. '''
  13. 使用 place 布局需要注意的问题:
  14. >>> 对于大型和复杂界面,手动设置每个小部件的位置可能会变得困难而且容易出错
  15. >>> 如果窗体发生大小变化,需要手动调整小部件的大小和尺寸,因为 place 布局不会自动适应大小变化
  16. >>> 如果小部件之间有重叠,可能会导致无法正常显示和交互
  17. 虽然 place 布局具有灵活性,但通常建议在简单布局中使用 pack 或 grid 布局管理器,而将 place 保留给需要更精确控制的特定情况
  18. '''
鼠标事件处理

相关代码如下:

  1. """
  2. 事件绑定和处理
  3. quit 退出
  4. command 控制,指挥
  5. click 点击
  6. Motion 运动
  7. """
  8. import tkinter as tk # 导入tkinter库并重命名为 tk
  9. # 事件回调函数会自动接收一个参数(通常命名event),该参数包含有关事件的信息,如鼠标位置,按下的键值等。
  10. def click(event):
  11. print("鼠标单击:", event.x, event.y) # 获取鼠标实时在按钮上的坐标
  12. # print("按钮点击触发!")
  13. root = tk.Tk() # 创建一个名为root的窗体
  14. root.title("Py事件窗体") # 设置窗体标题
  15. root.geometry("500x460") # 设置窗体大小
  16. button = tk.Button(root, text="关闭") # 创建一个关闭按钮
  17. button.bind("<Motion>", click)
  18. # <Button-1> 表示鼠标左键 <Button-2> 表示鼠标中键 <Button-3> 表示鼠标右键 <Motion> 表示鼠标运动
  19. button.pack() # 设置按钮布局
  20. # tk.Button(root, text="关闭", command=quit).pack() # 创建一个关闭按钮并使用 pack 布局
  21. # command=quit (command :控制 指挥 quit 退出)command 事件
  22. root.mainloop() # 设置窗体可见
键盘事件处理

相关代码如下:

  1. """
  2. 事件绑定和处理
  3. quit 退出
  4. command 控制,指挥
  5. click 点击
  6. Motion 运动
  7. keypress 按键
  8. """
  9. import tkinter as tk # 导入tkinter库并重命名为 tk
  10. def key(event):
  11. print("键盘事件触发:", event.keysym)
  12. # 键盘事件触发时,def key函数被调用,事件返回键盘键值
  13. root = tk.Tk() # 创建一个名为root的窗体
  14. frame = tk.Frame(root, width=300, height=500) # 在窗体里设置一个容器,宽300,高500
  15. frame.bind("<KeyPress>", key)
  16. frame.pack() # 设置容器布局
  17. frame.focus_set() # 设置焦点,已接收键盘事件
  18. root.mainloop() # 设置窗体可见
警告弹窗

相关代码如下:

  1. """
  2. 弹窗,警告窗口
  3. """
  4. import tkinter as tk # 导入tkinter库并重命名为 tk
  5. win = tk.Tk() # 创建一个名为win的窗体
  6. win.title("登录")
  7. win.geometry("500x460") # 设置窗体大小
  8. tk.Label(win, text="账号:").grid(row=0)
  9. tk.Label(win, text="密码:").grid(row=2)
  10. # 使用 grid 布局,将两个标签分别布置在第一行和第二行
  11. e1 = tk.Entry(win) # 创建一个输入框控件
  12. e2 = tk.Entry(win, show='*') # 创建一个输入框控件 以 * 号形式显示密码
  13. e1.grid(row=0, column=1, padx=10, pady=5) # 控件设置为 grid 布局,并设置相关属性
  14. e2.grid(row=2, column=1, padx=10, pady=5) # 控件设置为 grid 布局,并设置相关属性
  15. tk.Button(win, text="登录", width=10).grid(row=3, column=0, padx=15, pady=5)
  16. tk.Button(win, text="退出", width=10, command=win.quit).grid(row=3, column=1, padx=15, pady=5)
  17. # 使用 grid() 的函数布局,并控制按钮的显示位置
  18. win.mainloop() # 设置窗体可见

 登录时的相关弹窗:

  1. """
  2. 弹窗,警告窗口
  3. """
  4. import tkinter as tk # 导入tkinter库并重命名为 tk
  5. from tkinter import messagebox # 导入messagebox模块
  6. win = tk.Tk() # 创建一个名为win的窗体
  7. win.title("登录")
  8. win.geometry("500x460") # 设置窗体大小
  9. tk.Label(win, text="账号:").grid(row=0)
  10. tk.Label(win, text="密码:").grid(row=2)
  11. # 使用 grid 布局,将两个标签分别布置在第一行和第二行
  12. e1 = tk.Entry(win) # 创建一个输入框控件
  13. e2 = tk.Entry(win, show='*') # 创建一个输入框控件 以 * 号形式显示密码
  14. e1.grid(row=0, column=1, padx=10, pady=5) # 控件设置为 grid 布局,并设置相关属性
  15. e2.grid(row=2, column=1, padx=10, pady=5) # 控件设置为 grid 布局,并设置相关属性
  16. def login():
  17. messagebox.showinfo("提示", "欢迎使用该软件!")
  18. # 登录按钮被点击触发 login 函数,调用messagebox库的showinfo方法,该方法弹出一个提示窗口,内容:欢迎使用该软件!
  19. tk.Button(win, text="登录", width=10, command=login).grid(row=3, column=0, padx=15, pady=5)
  20. tk.Button(win, text="退出", width=10, command=win.quit).grid(row=3, column=1, padx=15, pady=5)
  21. # 使用 grid() 的函数布局,并控制按钮的显示位置
  22. win.mainloop() # 设置窗体可见
  23. '''
  24. 在 tkinter 中,可以使用 messagebox 模块创建不同的提示窗口。
  25. messagebox.showinfo(title, message) : 显示信息窗口,显示一般信息和成功消息
  26. messagebox.showwarning(title, message) : 显示警告窗口,显示警告信息和提示消息
  27. messagebox.showerror(title, message) : 显示错误窗口,显示错误信息和异常消息
  28. messagebox.askquestion(title, message) : 显示询问窗口,显示用户是与否的问题
  29. messagebox.askyesno(title, message) : 显示是与否选择窗口,让用户选择
  30. messagebox.askokcancel(title, message) : 显示确定与取消选择窗口,让用户选择
  31. messagebox.askyesnocancel(title, message) : 显示是与否和取消选择窗口,让用户选择
  32. '''
多行文本框

相关代码如下:

  1. """
  2. 多行文本框
  3. """
  4. import tkinter as tk # 导入tkinter库并重命名为 tk
  5. wino = tk.Tk() # 创建一个名为wino的窗体
  6. wino.title("多行文本框") # 设置窗体标题
  7. wino.geometry("800x460+120+60") # 设置窗体大小及显示位置
  8. textarea = tk.Text(wino, height=12, width=20, bg="#242528", fg="white", font=("楷体", 16))
  9. # 设置一个多行文本框,指定高12,宽20,背景为黑色(#242528) 前景色为白色,设置字体为 楷体 字号 16
  10. textarea.pack() # 选择布局方式
  11. wino.mainloop() # 设置窗体可见
下拉选择菜单

相关代码如下:

  1. """
  2. 下拉选择菜单
  3. """
  4. import tkinter as tk # 导入tkinter库并重命名为 tk
  5. from tkinter import ttk # 导入ttk 模块
  6. wino = tk.Tk() # 创建一个名为wino的窗体
  7. wino.title("下拉菜单") # 设置窗体标题
  8. wino.geometry("800x460+120+60") # 设置窗体大小及显示位置
  9. cbox = ttk.Combobox(wino, width=16, font=("楷体", 16)) # 设置一个下拉菜单 宽16 字体为楷体 字体大小16
  10. cbox['value'] = ('醉翁', '莲花', '瑶池') # 设置下拉菜单 的菜单项
  11. cbox.pack() # 选择布局方式
  12. wino.mainloop() # 设置窗体可见
登录验证

相关代码如下:

  1. """
  2. 用户登录时的密码验证
  3. 变动函数:login
  4. """
  5. import tkinter as tk # 导入tkinter库并重命名为 tk
  6. from tkinter import messagebox # 导入messagebox模块
  7. win = tk.Tk() # 创建一个名为win的窗体
  8. win.title("登录")
  9. win.geometry("500x460") # 设置窗体大小
  10. tk.Label(win, text="账号:").grid(row=0)
  11. tk.Label(win, text="密码:").grid(row=2)
  12. # 使用 grid 布局,将两个标签分别布置在第一行和第二行
  13. e1 = tk.Entry(win) # 创建一个输入框控件
  14. e2 = tk.Entry(win, show='*') # 创建一个输入框控件 以 * 号形式显示密码
  15. e1.grid(row=0, column=1, padx=10, pady=5) # 控件设置为 grid 布局,并设置相关属性
  16. e2.grid(row=2, column=1, padx=10, pady=5) # 控件设置为 grid 布局,并设置相关属性
  17. def login():
  18. username = e1.get() # 将e1用户输入的内容赋值给变量username
  19. password = e2.get() # 将e2用户输入的内容赋值给变量password
  20. if username == "qiyu" and password == "12345678":
  21. messagebox.showinfo("提示", "登录成功!")
  22. else:
  23. messagebox.showerror("登录失败", "用户名或密码错误!")
  24. # 使用 if... else (条件判断) 判断用户的账户密码是否正确
  25. # 登录按钮被点击触发 login 函数,调用messagebox库的showinfo方法,该方法弹出一个提示窗口
  26. tk.Button(win, text="登录", width=10, command=login).grid(row=3, column=0, padx=15, pady=5)
  27. tk.Button(win, text="退出", width=10, command=win.quit).grid(row=3, column=1, padx=15, pady=5)
  28. # 使用 grid() 的函数布局,并控制按钮的显示位置
  29. win.mainloop() # 设置窗体可见
单选框和复选框

相关代码如下:

  1. """
  2. 单选框和复选框
  3. """
  4. import tkinter as tk # 导入tkinter库并重命名为 tk
  5. root = tk.Tk() # 创建一个名为root的窗体
  6. root.title("Py窗体") # 设置窗体标题
  7. root.geometry("800x460+120+60") # 设置窗体大小及显示位置
  8. r1 = tk.Radiobutton(root, text="错", font=("楷体", 16), value=1) # 设置一个单选框 文本为 对 使用pack布局 设置字体字号
  9. r1.pack()
  10. r2 = tk.Radiobutton(root, text="错", font=("楷体", 16), value=1) # 设置一个单选框 文本为 错 使用pack布局 设置字体字号
  11. r2.pack()
  12. c1 = tk.Checkbutton(root, text="红", font=("楷体", 16))
  13. c1.pack()
  14. c2 = tk.Checkbutton(root, text="红", font=("楷体", 16))
  15. c2.pack()
  16. c3 = tk.Checkbutton(root, text="红", font=("楷体", 16))
  17. c3.pack()
  18. # 设置三个单选框 文本为 红 绿 蓝 使用pack布局 设置字体字号
  19. root.mainloop() # 设置窗体可见
读取写入Excel 数据

相关写入代码如下:

  1. import tkinter # 导入 tkinter 库
  2. import tkinter as tk
  3. from tkinter import ttk
  4. from openpyxl import Workbook # 导入库,openpyxl用于处理Excel文件
  5. win = tk.Tk()
  6. win.title('ExcelDate') # 设置窗体标题
  7. win.geometry("400x350") # 设置窗体大小
  8. tk.Label(win, text="姓名:").grid(row=0) # 创建一个标签,使用grid布局,行=0
  9. name = tk.Entry(win) # 创建 对应输入框 组件
  10. name.grid(row=0, column=1, pady=5) # 使用grid布局,行=0 列=1 组建间距Y=5
  11. tk.Label(win, text="课程:").grid(row=1) # 创建一个标签,使用grid布局,行=0
  12. course = ttk.Combobox(win, width=18) # 创建下拉列表组件,设置宽18
  13. course['value'] = ('语文', '数学', '英语') # 添加下拉列表选项
  14. course.grid(row=1, column=1) # 使用grid布局,行=1 列=1
  15. tk.Label(win, text="成绩:").grid(row=2) # 创建一个标签,使用grid布局,行=2
  16. score = tk.Entry(win) # 创建 对应输入框 组件
  17. score.grid(row=2, column=1, pady=5) # 使用grid布局,行=2 列=1 组建间距Y=5
  18. def save(): # 点击"写入"按钮被触发的函数
  19. wb = Workbook() # 创建一个新的工作簿
  20. ws = wb.active # 选择默认的工作表
  21. ws['A1'] = "姓名" # 写入内容到对应单元格 A1
  22. ws['B1'] = "课程" # 写入内容到对应单元格 B1
  23. ws['C1'] = "成绩" # 写入内容到对应单元格 C1
  24. ws['A2'] = name.get() # 获取name输入框内容写入对应单元格 A2
  25. ws['B2'] = course.get() # 获取name输入框内容写入对应单元格 B2
  26. ws['C2'] = score.get() # 获取name输入框内容写入对应单元格 C2
  27. wb.save("Date.xlsx") # 保存文件 "Date.xlsx"
  28. tkinter.Button(win, text="写入", width=10, command=save).grid(row=3, column=1)
  29. # 创建一个按钮,设置宽为10,绑定save事件,使用grid布局,行=3 列=1
  30. win.mainloop() # 设置窗体可见
  31. # 缺点:每运行一次,之前的数据会被覆盖;而且每次写入的数据有局限性,点击"写入"按钮后输入的数据没有清空

相关读取代码如下:

  1. import tkinter as tk # 导入tkinter库
  2. from openpyxl.reader.excel import load_workbook # 导入openpyxl库
  3. win = tk.Tk() # 创建一个窗体
  4. win.title("信息查询") # 设置窗体标题
  5. win.geometry('340x200') # 设置窗体大小
  6. def search(): # "查询" 按钮被点击的回调函数
  7. name = namentry.get() # 获取输入框相关内容
  8. workbook = load_workbook(filename='Date.xlsx') # 加载要查询的Excel文件
  9. sheet = workbook.active
  10. for row in sheet.iter_rows(values_only=True): # 遍历查找数据
  11. if name in row:
  12. score = row[2]
  13. resultlabel.config(text="成绩:{}".format(score)) # 如果结果匹配就输出
  14. return
  15. resultlabel.config(text="未查询到相关成绩!") # 如果没有查询到结果就输出这句话
  16. namelabel = tk.Label(win, text="请输入姓名:") # 创建一个标签
  17. namelabel.pack() # 设置pack布局
  18. namentry = tk.Entry(win) # 创建输入框
  19. namentry.pack() # 设置pack布局
  20. searchbutton = tk.Button(win, text="查询", command=search) # 创建一个按钮并绑定相关事件
  21. searchbutton.pack() # 设置pack布局
  22. resultlabel = tk.Label(win, text="") # 创建一个标签
  23. resultlabel.pack() # 设置pack布局
  24. win.mainloop() # 启动主循环 (设置窗体可见)

Json 数据交互

写入数据到 json 文件

  1. """
  2. Json 数据交互 ( Json ==>> JavaScript Object Notation)
  3. Json 特点:
  4. 1.简洁 2.可读性好 3.可扩展性强 4.跨平台和语言的互操作性 5.广泛支持
  5. 这是一个写入数据到 json 文件的程序
  6. """
  7. import tkinter as tk # 导入tkinter库
  8. import json # 导入 json 库
  9. def save(): # "保存"按钮回调函数
  10. date = {
  11. 'name': namentry.get(),
  12. 'score': scorentry.get()
  13. }
  14. with open('Date.json', 'a', encoding='utf-8') as file:
  15. json.dump(date, file, ensure_ascii=False)
  16. file.write('\n')
  17. namentry.delete(0, tk.END) # 清空输入框
  18. scorentry.delete(0, tk.END)
  19. win = tk.Tk() # 创建一个窗体
  20. win.title("JsonRead") # 设置窗体标题
  21. win.geometry('340x270') # 设置窗体大小
  22. namelabel = tk.Label(win, text="请输入姓名:") # 创建一个标签
  23. namelabel.pack() # 设置pack布局
  24. namentry = tk.Entry(win) # 创建一个输入框
  25. namentry.pack() # 设置pack布局
  26. scorelabel = tk.Label(win, text="语文成绩:") # 创建一个标签
  27. scorelabel.pack() # 设置pack布局
  28. scorentry = tk.Entry(win) # 创建一个输入框
  29. scorentry.pack() # 设置pack布局
  30. savebutton = tk.Button(win, text="保存", command=save) # 创建一个按钮并绑定事件
  31. savebutton.pack() # 设置pack布局
  32. win.mainloop() # 启动主循环 (设置窗体可见)

读取 Json 文件数据

  1. """
  2. 读取 Json 文件里的数据
  3. """
  4. import json
  5. import tkinter as tk # 导入tkinter库
  6. def search(): # "查询" 按钮被点击的回调函数
  7. name = namentry.get() # 获取输入框相关内容
  8. with open('Date.json', 'r', encoding='utf-8') as f:
  9. lines = f.readlines()
  10. for line in lines:
  11. date = json.loads(line)
  12. if date["name"] == name:
  13. score = date["score"]
  14. resultlabel.config(text="成绩:{}".format(score)) # 如果结果匹配就输出
  15. return
  16. resultlabel.config(text="未查询到相关成绩!") # 如果没有查询到结果就输出这句话
  17. win = tk.Tk() # 创建一个窗体
  18. win.title("信息查询") # 设置窗体标题
  19. win.geometry('340x200') # 设置窗体大小
  20. namelabel = tk.Label(win, text="请输入姓名:") # 创建一个标签
  21. namelabel.pack() # 设置pack布局
  22. namentry = tk.Entry(win) # 创建输入框
  23. namentry.pack() # 设置pack布局
  24. searchbutton = tk.Button(win, text="查询", command=search) # 创建一个按钮并绑定相关事件
  25. searchbutton.pack() # 设置pack布局
  26. resultlabel = tk.Label(win, text="") # 创建一个标签
  27. resultlabel.pack() # 设置pack布局
  28. win.mainloop() # 启动主循环 (设置窗体可见)

安装 MySQL数据库

MySQL 官网

MySQL  安装程序

1.到官网下载

2.双击打开安装程序

3.直接点击 下一步

4.勾选 接受协议许可,点击下一步

5.选择 典型类型,点击下一步

6.点击 安装

7.[安装过程]

8.点击 完成

9.点击 下一步

10.选择 安装位置 点击下一步

11.传输协议 和 端口 默认不修改,点击下一步

12.设置 root 密码,点击下一步

13.直接点击下一步

14.不修改,点击下一步

15.直接点击下一步

16.点击 执行

17.执行完成,点击下一步

18.点击 完成,安装结束

通过 cmd 操作 MySQL

打开 cmd (命令提示符&控制台&终端),打开的方式多种多样,我只讲我用的方式

按键盘上的 Win 加 r 键,在弹出的 运行 窗口输入 cmd 回车(enter键)或点击确定都行

以文件夹形式打开 MySQL 安装时的 bin 目录,将路径复制下来

在 cmd 里输入 cd 空格 加刚刚复制的路径(可用 Ctrl 加 c 键粘贴上)回车 (enter键)执行

# 你的 MySQL 安装路径可能和我的不一样

使用

为了方便实时调用 My SQL 相关程序,我这里配置了一下环境变量 path

cmd 里相关操作如下,文字这里就不多讲解了

  1. Microsoft Windows [版本 10.0.19042.746]
  2. (c) 2020 Microsoft Corporation. 保留所有权利。
  3. C:\Users\Administrator>mysql -u root -p # 连接数据库登入root账户,输入安装时设置的密码
  4. Enter password: ********
  5. Welcome to the MySQL monitor. Commands end with ; or \g.
  6. Your MySQL connection id is 15
  7. Server version: 8.4.0 MySQL Community Server - GPL
  8. Copyright (c) 2000, 2024, Oracle and/or its affiliates.
  9. Oracle is a registered trademark of Oracle Corporation and/or its
  10. affiliates. Other names may be trademarks of their respective
  11. owners.
  12. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  13. mysql> create database test; # 创建一个名为 test 的数据库
  14. Query OK, 1 row affected (0.00 sec)
  15. mysql> show databases; # 查看 数据库 列表
  16. +--------------------+
  17. | Database |
  18. +--------------------+
  19. | information_schema |
  20. | mysql |
  21. | performance_schema |
  22. | sys |
  23. | test |
  24. +--------------------+
  25. 5 rows in set (0.00 sec)
  26. mysql> use test; # 选中名为 test 的数据库
  27. Database changed
  28. mysql> create table user(id int,name char(30)); # 添加一个列表,并在列表里添加id和name字段
  29. Query OK, 0 rows affected (0.02 sec)
  30. mysql> desc user; # 查看数据表
  31. +-------+----------+------+-----+---------+-------+
  32. | Field | Type | Null | Key | Default | Extra |
  33. +-------+----------+------+-----+---------+-------+
  34. | id | int | YES | | NULL | |
  35. | name | char(30) | YES | | NULL | |
  36. +-------+----------+------+-----+---------+-------+
  37. 2 rows in set (0.00 sec)
  38. mysql> insert into user values(1,'qiyu'); # 在表里插入一条数据
  39. Query OK, 1 row affected (0.00 sec)
  40. mysql> select * from user; # 查看表里的数据
  41. +------+------+
  42. | id | name |
  43. +------+------+
  44. | 1 | qiyu |
  45. +------+------+
  46. 1 row in set (0.00 sec)
  47. mysql> drop table user; # 删除列表
  48. Query OK, 0 rows affected (0.01 sec)
  49. mysql> drop database text; ### 输入错误 ###
  50. ERROR 1008 (HY000): Can't drop database 'text'; database doesn't exist
  51. mysql> drop database test; # 删除数据库 (test)
  52. Query OK, 0 rows affected (0.00 sec)
  53. mysql> show databases; # 重新查看数据库列表
  54. +--------------------+
  55. | Database |
  56. +--------------------+
  57. | information_schema |
  58. | mysql |
  59. | performance_schema |
  60. | sys |
  61. +--------------------+
  62. 4 rows in set (0.00 sec)
  63. mysql> exit # 退出 MySQL 数据库程序
  64. Bye
  65. C:\Users\Administrator>
写入数据到 MySQL

通过下面的程序将数据保存到 MySQL 数据库

pip install pymysql      # 安装 pymysql 库

提前创建 数据库test 创建表,图形化界面程序代码如下:

  1. """
  2. 将数据写入 MySQL 数据库
  3. """
  4. import tkinter as tk # 导入tkinter库
  5. import pymysql # 导入pymysql库
  6. def save():
  7. name = namentry.get()
  8. score = scorentry.get()
  9. cnx = pymysql.connect( # 连接 MySQL 数据库
  10. host='localhost', # 本机的地址及端口
  11. user='root', # 账户 root
  12. password='12345678', # 密码
  13. database='test' # 指定数据库
  14. )
  15. cursor = cnx.cursor() # 创建游标对象
  16. sql = "insert into user(name,score) values(%s,%s)" # sql 表示要执行的 sql 语句 %s是占位符
  17. cursor.execute(sql, (name, score))
  18. cnx.commit() # 提交事务
  19. cnx.close() # 并关闭连接
  20. # 清空输入框内容
  21. namentry.delete(0, tk.END)
  22. scorentry.delete(0, tk.END)
  23. win = tk.Tk() # 创建一个窗体
  24. win.title("WriteSQL") # 设置窗体标题
  25. win.geometry('340x200') # 设置窗体大小
  26. namelabel = tk.Label(win, text="姓名:") # 创建一个标签
  27. namelabel.pack() # 设置pack布局
  28. namentry = tk.Entry(win) # 创建输入框
  29. namentry.pack() # 设置pack布局
  30. scorelabel = tk.Label(win, text="成绩:") # 创建一个标签
  31. scorelabel.pack() # 设置pack布局
  32. scorentry = tk.Entry(win) # 创建输入框
  33. scorentry.pack() # 设置pack布局
  34. button = tk.Button(win, text="保存", command=save) # 创建一个按钮并绑定相关事件
  35. button.pack() # 设置pack布局
  36. win.mainloop() # 启动主循环 (设置窗体可见)

代码运行结果图:

数据库 数据 展示:

cmd 里 数据库 数据 展示:

  1. Microsoft Windows [版本 10.0.19042.746]
  2. (c) 2020 Microsoft Corporation. 保留所有权利。
  3. C:\Users\Administrator>mysql -u root -p
  4. Enter password: ********
  5. Welcome to the MySQL monitor. Commands end with ; or \g.
  6. Your MySQL connection id is 21
  7. Server version: 8.4.0 MySQL Community Server - GPL
  8. Copyright (c) 2000, 2024, Oracle and/or its affiliates.
  9. Oracle is a registered trademark of Oracle Corporation and/or its
  10. affiliates. Other names may be trademarks of their respective
  11. owners.
  12. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
  13. mysql> use test;
  14. Database changed
  15. mysql> desc user;
  16. +-------+----------+------+-----+---------+-------+
  17. | Field | Type | Null | Key | Default | Extra |
  18. +-------+----------+------+-----+---------+-------+
  19. | name | char(30) | YES | | NULL | |
  20. | score | int | YES | | NULL | |
  21. +-------+----------+------+-----+---------+-------+
  22. 2 rows in set (0.08 sec)
  23. mysql> select * from user;
  24. +------+-------+
  25. | name | score |
  26. +------+-------+
  27. | 萌萌 | 99 |
  28. | 玲玲 | 87 |
  29. | 琪琪 | 90 |
  30. +------+-------+
  31. 3 rows in set (0.01 sec)
  32. mysql>
从 MySQL 读取数据

程序代码如下:

  1. """
  2. 读取数据库里的数据
  3. """
  4. import tkinter as tk # 导入tkinter库
  5. import pymysql # 导入pymysql库
  6. win = tk.Tk() # 创建一个窗体
  7. win.title("ReadSQL") # 设置窗体标题
  8. win.geometry('340x200') # 设置窗体大小
  9. cnx = pymysql.connect( # 连接 MySQL 数据库
  10. host='localhost', # 本机的地址及端口
  11. user='root', # 账户 root
  12. password='12345678', # 密码
  13. database='test' # 指定数据库
  14. )
  15. def search(): # 查询按钮回调函数
  16. name = namentry.get() # 获取姓名输入框内容
  17. cursor = cnx.cursor()
  18. cursor.execute("select score from user where name=%s", name)
  19. result = cursor.fetchone()
  20. if result is not None: # 查找匹配的数据
  21. score = result[0]
  22. scorelabel.config(text=f"{name} 的成绩为:{score}") # 找到输出
  23. else:
  24. scorelabel.config(text=f"找不到{name} 的成绩") # 未找到输出
  25. cursor.close() # 关闭查找
  26. namelabel = tk.Label(win, text="请输入姓名:") # 创建一个标签
  27. namelabel.pack() # 设置pack布局
  28. namentry = tk.Entry(win) # 创建输入框
  29. namentry.pack() # 设置pack布局
  30. scorelabel = tk.Label(win) # 创建一个标签
  31. scorelabel.pack() # 设置pack布局
  32. button = tk.Button(win, text="查询", command=search) # 创建一个按钮并绑定相关事件
  33. button.pack() # 设置pack布局
  34. win.mainloop() # 启动主循环 (设置窗体可见)
  35. cnx.close() # MySQL 关闭连接数据库

代码运行后的界面:

窗体主菜单

程序代码如下:

  1. """
  2. 给窗体添加 主菜单
  3. tearoff=False :通过将 tearoff 设置为 False,从而使菜单不可拆分,
  4. 以确保始终与主窗体关联,无法单独悬浮显示
  5. """
  6. import tkinter as tk # 导入tkinter库
  7. win = tk.Tk() # 创建一个窗体
  8. win.title("MainMenu") # 设置窗体标题
  9. win.geometry('640x400') # 设置窗体大小
  10. win.config(bg='black') # 设置窗体背景为黑色
  11. menuMain = tk.Menu(win) # 创建主菜单
  12. fileMenu = tk.Menu(menuMain, tearoff=False) # 在主菜单下创建文件菜单
  13. menuMain.add_cascade(label="文件", menu=fileMenu) # 设置菜单名并绑定到文件菜单
  14. fileMenu.add_command(label="打开") # 创建子选项菜单
  15. fileMenu.add_command(label="保存")
  16. fileMenu.add_separator() # 分割线
  17. fileMenu.add_command(label="退出", command=quit)
  18. editMenu = tk.Menu(menuMain, tearoff=False) # 在主菜单下创建编辑菜单
  19. menuMain.add_cascade(label="编辑", menu=editMenu) # 设置菜单名并绑定到编辑菜单
  20. editMenu.add_command(label="复制") # 创建子选项菜单
  21. editMenu.add_command(label="粘贴")
  22. editMenu.add_command(label="剪切")
  23. win.config(menu=menuMain) # 将主菜单放入窗体里
  24. win.mainloop() # 启动主循环 (设置窗体可见)

代码运行效果图如下:

程序的美化

使用到了 ttkbootstrap 库(不完善)

pip install ttkbootstrap      # 安装ttkbootstrap 库

程序代码如下:

  1. """
  2. 图形化界面的优化 ttkrootstrap
  3. styleboot :启动样式
  4. """
  5. import tkinter as tk # 导入tkinter库
  6. import ttkbootstrap as ttk # 导入ttkbootstrap库
  7. from ttkbootstrap.constants import *
  8. win = ttk.Window(title="BeautifScreen", # 创建一个窗体 设置窗体标题
  9. themename="litera", # 设置主题
  10. size=(320, 460), # 设置窗体大小
  11. position=(500, 500), # 设置窗体显示位置
  12. resizable=None, # 设置窗体大小固定 (不可更改)
  13. alpha=0.9) # 设置窗体透明度
  14. inputLabel = tk.Label(win, text="姓名:").grid(row=0, column=0, pady=10) # 创建标签并设置布局
  15. inputentry = tk.Entry(win).grid(row=0, column=1, pady=10) # 创建输入框并设置布局
  16. StarSignLabel = tk.Label(win, text="星座:").grid(row=1, column=0) # 创建标签并设置布局
  17. StarSigncombobox = ttk.Combobox(win, values=[
  18. "水瓶座", "双鱼座", "白羊座", "金牛座", "双子座", "巨蟹座", "狮子座", "处女座", "天秤座", "天蝎座", "射手座", "摩羯座"
  19. ], width=17).grid(row=1, column=1, pady=5) # 创建下拉列表并添加相关选项,设置宽度及布局
  20. occupationLabel = tk.Label(win, text="从事的职业:").grid(row=2, column=0) # 创建标签并设置布局
  21. occupation1 = ttk.Checkbutton(win, text="程序员", styleboot="selected").grid(row=2, column=1) # 创建复选框并设置布局
  22. occupation2 = ttk.Checkbutton(win, text="网络工程师", styleboot="rounded toggle").grid(row=3, column=1)
  23. occupation3 = ttk.Checkbutton(win, text="大数据工程师", styleboot="squared toggle").grid(row=4, column=1)
  24. occupation4 = ttk.Checkbutton(win, text="硬件工程师").grid(row=5, column=1)
  25. occupation5 = ttk.Checkbutton(win, text="前端开发").grid(row=6, column=1)
  26. occupation6 = ttk.Checkbutton(win, text="后端开发").grid(row=7, column=1)
  27. occupation7 = ttk.Checkbutton(win, text="软件架构师").grid(row=8, column=1)
  28. occupation8 = ttk.Checkbutton(win, text="软件工程师").grid(row=9, column=1)
  29. submitButton = ttk.Button(win, text="保存并提交", width=18, styleboot="danger").grid(row=5, column=1, pady=5) # 创建按钮并设置布局
  30. clearButton = ttk.Button(win, text="取消并重置", width=18).grid(row=6, column=1)
  31. win.mainloop() # 启动主循环 (设置窗体可见)
封装程序
  1. pip install pyinstaller # 安装封装库 pyinstaller
  2. pyinstaller --onefile --icon=fish.ico encapsulation.py # 执行封装
  3. # 上面的命令里 fish.ico 是一个ico图标,encapsulation.py 是一个 python 文件

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/你好赵伟/article/detail/787380
推荐阅读
相关标签
  

闽ICP备14008679号