Tkinter 框架学习
个人学习 Tkinter 框架写的简单笔记,大部分都是课堂上的截图。将就看看叭。
BiliBili链接:Python GUI编程
GUI Tkinter 框架结构
常用组件汇总列表
面向对象的方式写 GUI 框架的经典实例
具体实现代码
#!/usr/bin/python python3
# coding=utf-8
'''
Author: whalefall
Date: 2021-07-04 16:50:10
LastEditTime: 2021-07-04 17:25:55
Description: 利用面向对象的方式写一个经典的 GUI 程序
'''
from tkinter import *
# Frame: 一个布局容器,里面可以放置组件.
from tkinter import Frame
# messagebox: 一个消息框组件
from tkinter import messagebox
class Application(Frame):
'''
通过 Application 类组织整个 GUI 程序,继承自 Frame.
'''
def __init__(self, master=None):
'''
初始化类,要传入根窗口对象.
'''
# 调用父类 Frame 的初始化方法
super().__init__(master)
# 将 master(传入的根窗口对象) 添加到 APP 类的属性
# 使 self 拥有 root 根窗口对象的所有方法.
self.master = master
self.pack() # 布局管理器,用于添加组件到布局
# 创建各组件
self.createWidget()
def createWidget(self):
'''
创建一个组件,在初始化类中调用
'''
# 用父类的 Master 即 self 对象创建一个按钮组件
self.btn1 = Button(self)
self.btn1["text"] = "点击提交" # 设置按钮文字属性
self.btn1["command"] = self.lover # 点击按钮所执行的函数
self.btn1.pack() # 添加到布局管理器
# 创建一个退出按钮
# command: 命令 (点击按钮要执行的函数)
# root: 全局变量(根窗口)
# destroy 方法: 消灭所有窗体(退出程序)
self.btnQuit = Button(self, text="退出", command=root.destroy)
self.btnQuit.pack() # 添加到布局管理器
def lover(self):
'''
点击 btn1 所执行的函数
'''
messagebox.showinfo("表白信息", "颖怡我喜欢你.")
if __name__ == "__main__":
root = Tk() # 创建主窗体
root.geometry("400x100+200+300") # 设置程序长宽位置
root.title("面向对象经典 GUI 程序")
app = Application(master=root)
root.mainloop() # 调用组件的方法,进入事件循环.
label ( 标签 ) 用法
组件 Option 选项设置
选项大全
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GovysgTw-1640509977086)(https://cdn.jsdelivr.net/gh/AdminWhaleFall/Pic@master/img/20210705220646.png)]
Button Anchor 位置控制
Entry StrinngVar 输入框
输入框接收变量的类型
属性的双向关联
Text 多行文本框及复杂标记
radio/check button 单选复选按钮
'''
构造组件
'''
# 单选框 RadiobButton
# 定义一个变量存放选择的值
# 单选按钮是两个组件对应一个变量
self.v = StringVar()
self.v.set("F") # 设置默认值
# 设置提示文字,选中时的值,绑定的变量
self.r1 = Radiobutton(self, text="男性", value="男",
variable=self.v).pack(side="left")
self.r2 = Radiobutton(self, text="女性", value="女",
variable=self.v).pack(side="left")
Button(text="性别确定", command=self.get_xinbie).pack()
# self.label = Label(text="选择你喜欢的性别").pack()
# 复选框 CheckButton 需要两个变量
# IntVar: 整型,默认值为0
self.girlLove = IntVar()
self.boyLove = IntVar()
# 设置提示文字绑定变量
# onvalue: 选中时的值 offvalue: 不选时的值
self.c1 = Checkbutton(
self, text="男孩子", variable=self.boyLove, onvalue=1, offvalue=0).pack()
self.c2 = Checkbutton(
self, text="女孩子", variable=self.girlLove, onvalue=1, offvalue=0).pack()
Button(text="喜欢确定", command=self.get_love_xinbie).pack()
Canva 画板组件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rWIGYWWq-1640509977093)(https://cdn.jsdelivr.net/gh/AdminWhaleFall/Pic@master/img/20210706120307.png)]
Grid 网格布局管理器
pack 布局管理器
钢琴页面设计
place 布局管理器
通过pack布局管理器实现扑克牌界面
为扑克牌添加事件处理 (扩展)
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RVK1X1nM-1640509977103)(C:\Users\WhaleFall\AppData\Roaming\Typora\typora-user-images\image-20210706164925218.png)]
重点:Tkinter 事件机制和消息循环处理
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-4mn5R8j0-1640509977104)(https://cdn.jsdelivr.net/gh/AdminWhaleFall/Pic@master/img/20210706165244.png)]
各种事件
event 对象的常用属性
lambda
表达式
lambda 事件传参的应用
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-W0IJTll4-1640509977107)(https://cdn.jsdelivr.net/gh/AdminWhaleFall/Pic@master/img/20210706174810.png)]
多种事件绑定方式的汇总
其他组件
1. OptionMenu
选项菜单组件
def createWiget(self):
'''
构造组件
'''
# OptionMenu: 选项菜单,传入父容器,绑定变量
self.menu_v = StringVar()
self.menu_v.set("黄颖怡")
self.om = OptionMenu(self, self.menu_v, "黄颖怡", "ches")
self.om["width"] = 30 # 设置属性
self.om.pack()
# 通过 lambda 匿名函数传参
Button(text="提交", command=lambda: self.get_menu("hyy")).pack()
3. Scale
滑块组件
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-rJ1V1VaY-1640509977111)(https://cdn.jsdelivr.net/gh/AdminWhaleFall/Pic@master/img/20210706182141.png)]
4. 颜色选择框
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-MjAvhTf2-1640509977113)(https://cdn.jsdelivr.net/gh/AdminWhaleFall/Pic@master/img/20210706234432.png)]
5. 文件对话框
6. 简单输入对话框 simpledialog
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-1o4xVLFt-1640509977118)(https://cdn.jsdelivr.net/gh/AdminWhaleFall/Pic@master/img/20210706235630.png)]
7. 通用消息框 messagebox
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tkyc4ImK-1640509977119)(https://cdn.jsdelivr.net/gh/AdminWhaleFall/Pic@master/img/20210706235922.png)]
8. 主菜单_上下文菜单
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7OXONYht-1640509977122)(https://cdn.jsdelivr.net/gh/AdminWhaleFall/Pic@master/img/20210707000738.png)]
77118)]
[外链图片转存中…(img-Tkyc4ImK-1640509977119)]
8. 主菜单_上下文菜单
[外链图片转存中…(img-gOW7t5XH-1640509977120)]
[外链图片转存中…(img-QLvla2vS-1640509977121)]
[外链图片转存中…(img-7OXONYht-1640509977122)]
[外链图片转存中…(img-VgExkzIE-1640509977123)]
[外链图片转存中…(img-dqHyc1dX-1640509977123)]