IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> Python | GUI | tinker不完全总结 -> 正文阅读

[Python知识库]Python | GUI | tinker不完全总结

本文对如何使用tinker进行不完全总结 12



前言

概念

Tkinter 是什么?
Tkinter 是使用 python 进行窗口视窗设计的模块。
Tkinter 模块(Tk 接口) 是 Python 的标准 Tk GUI工具包的接口。作为 python 特定的GUI界面,是一个图像的窗口, tkinterpython 自带的,可以编辑的GUI界面,用来入门,熟悉窗口视窗的使用,非常有必要。


环境

安装 python3.7
安装编辑器,演示使用的是 Pycharm
使用的系统版本是 macOS Big Sur Version 11.4


Tkinter 创建窗口

  • 1. 创建窗口
import tkinter as tk  
root = tk.Tk()  		      	 		 
# Tk()的作用就是创建一个窗口

如果只是执行以上的两句代码,运行程序是没有反应的,因为只有一个主函数,从上到下执行完就没有了,这个窗口也是很快就消失了,所以现在我们要做的就是让窗口一直显示,那么我们就可以加一个循环

创建的窗口的名字是 root ,那么我们之后使用这个 root 就可以操作这个窗口了。

root.mainloop()  

执行以上的3句代码,我们就可以看见窗口了

在这里插入图片描述


  • 2. 窗口标题
root.title('窗口标题')

在这里插入图片描述

  • 3. 窗口尺寸
root.geometry("300x100+630+80") 
# 长x宽+x*y, 设置窗口长宽以及窗口在屏幕的位置

在这里插入图片描述

  • 4. 创建按钮

调用 Button() 即可创建这个组件,创建的这个组件我们赋值给一个常量,以后我们就可以用这个常量来操作这个按钮:

btn1 = tk.Button(root)
# 将我们创建的按钮放到这个窗口root上面

btn1["text"] = "点击"
# 给按钮取一个名称为 ‘点击’

btn1.pack()
# 我们创建的按钮组件,已经放到窗口里面了,但是放到窗口的哪个位置,我们就可以用
# pack()去定位(后面会介绍其它定位方法)

创建点击按钮事件的弹窗,先导入messagebox,这个必须单独导入

from tkinter import messagebox
def test(e):
    messagebox.showinfo("窗口名称","点击成功")

现在有了按钮,有了方法,我想要做的是一点击按钮,就执行这个方法,那么就需要将按钮和方法进行绑定,按钮组件里面有一个方法 bind() 这个方法就可以实现绑定

btn1.bind("<Button-1>",test) 
# 第一个参数为:按鼠标左键的事件 第二个参数为:要执行的方法的名字

# 或者
# btn1 = tk.Button(root, text='点击', command=test)

完整代码如下所示:

import tkinter as tk
from tkinter import messagebox
root = tk.Tk()
root.title('窗口标题')
root.geometry("300x100+630+80")

btn1 = tk.Button(root)
btn1['text'] = '点击'
btn1.pack()

def test(e):
    messagebox.showinfo('窗口名称', '点击成功')

btn1.bind('<Button-1>', test)
root.mainloop()

在这里插入图片描述
在这里插入图片描述

  • 5. 组件布局

3种布局管理器, pack, gridplace

布局管理器特点
pack要么将组件垂直的排列,要么水平的排列
gridgrid (网格)布局管理器会将控件放置到一个二维的表格里。主控件被分割成一系列的行和列,表格中的每个单元 (cell) 都可以放置一个控件。

grid_info() 可查看组件默认的参数。
例如,{'in': <tkinter.Tk object .>, 'column': 0, 'row': 0, 'columnspan': 1, 'rowspan': 1, 'ipadx': 0, 'ipady': 0, 'padx': 0, 'pady': 0, 'sticky': ''}

grid管理器

选项
column单元格的列号,从0开始的正整数
columnspan跨列,跨越的列数,正整数
row单元格的行号, 从0开始的正整数
rowspan跨行,跨越的行数,正整数
ipadx, ipady设置子组件之间的间隔,x方向或y方向,默认单位为像素,非浮点数,默认0.0
padx, pady与之并列的组件之间的间隔,x方向或y方向,默认单位为像素,非浮点数,默认0.0
sticky组件紧贴所在的单元格的某一脚,对应于东南西北中以及4个角。东 = “e”,南=“s”,西=“w”,北=“n”,“ne”,“se”,“sw”, “nw”
  • column 指定控件所在的列
import tkinter as tk
root = tk.Tk()
root.title('窗口标题')
root.geometry("300x100+630+80")

btn1 = tk.Button(root)
btn1['text'] = '点击'
btn1.grid(column=1)

btn2 = tk.Button(root)
btn2['text'] = '退出'
btn2.grid(column=3)

root.mainloop()

在这里插入图片描述


  • padx 水平方向外边距
import tkinter as tk
root = tk.Tk()
root.title('窗口标题')
root.geometry("300x100+630+80")

btn1 = tk.Button(root)
btn1['text'] = '点击'
btn1.grid(column=3, padx=20)

btn2 = tk.Button(root)
btn2['text'] = '退出'
btn2.grid(column=1, padx=20)

btn3 = tk.Button(root)
btn3['text'] = '取消'
btn3.grid(column=2, padx=20)

root.mainloop()

在这里插入图片描述

  • pady 垂直方向外边距
import tkinter as tk
root = tk.Tk()
root.title('窗口标题')
root.geometry("300x100+630+80")

btn1 = tk.Button(root)
btn1['text'] = '点击'
btn1.grid(column=3, pady=20)

btn2 = tk.Button(root)
btn2['text'] = '退出'
btn2.grid(column=1, pady=20)

btn3 = tk.Button(root)
btn3['text'] = '取消'
btn3.grid(column=2, pady=20)

root.mainloop()

在这里插入图片描述


  • sticky 组件东南西北的方向
import tkinter as tk
root = tk.Tk()
root.title('窗口标题')
root.geometry("300x100+630+80")

btn1 = tk.Button(root)
btn1['text'] = '点击'
btn1.grid(column=3, sticky='w')

btn2 = tk.Button(root)
btn2['text'] = '退出'
btn2.grid(column=1, sticky='e')

btn3 = tk.Button(root)
btn3['text'] = '取消'
btn3.grid(column=2, sticky='s')

root.mainloop()

在这里插入图片描述


  • row 指定控件所在的行
import tkinter as tk
root = tk.Tk()
root.title('窗口标题')
root.geometry("300x100+630+80")

btn1 = tk.Button(root)
btn1['text'] = '点击'
btn1.grid(row=3)

btn2 = tk.Button(root)
btn2['text'] = '退出'
btn2.grid(row=1)

btn3 = tk.Button(root)
btn3['text'] = '取消'
btn3.grid(row=2)

root.mainloop()

在这里插入图片描述

  • ipadx 水平方向内边距
import tkinter as tk
root = tk.Tk()
root.title('窗口标题')
root.geometry("300x100+630+80")

btn1 = tk.Button(root)
btn1['text'] = '点击'
btn1.grid(row=3, ipadx=5)

btn2 = tk.Button(root)
btn2['text'] = '退出'
btn2.grid(row=1, ipadx=20)

btn3 = tk.Button(root)
btn3['text'] = '取消'
btn3.grid(row=2, ipadx=10)

root.mainloop()

在这里插入图片描述


  • ipady 垂直方向内边距
import tkinter as tk
root = tk.Tk()
root.title('窗口标题')
root.geometry("300x100+630+80")

btn1 = tk.Button(root)
btn1['text'] = '点击'
btn1.grid(row=3, ipady=5)

btn2 = tk.Button(root)
btn2['text'] = '退出'
btn2.grid(row=1, ipady=20)

btn3 = tk.Button(root)
btn3['text'] = '取消'
btn3.grid(row=2, ipady=10)

root.mainloop()

在这里插入图片描述

place管理器
place 布局管理器可以通过坐标精确控制组件的位置,适用于一些布局更加灵活的场景。

选项
x, y组件左上角的绝对坐标(相当于窗口)
relx ,rely组件左上角的坐标(相对于父容器)
width , height组件的宽度和高度
relwidth , relheight组件的宽度和高度(相对于父容器)
anchor对齐方式,左对齐 w,右对齐 e,顶对齐 n,底对齐 s
import tkinter as tk
root = tk.Tk()
root.title('窗口标题')
root.geometry("300x100+630+80")

btn1 = tk.Button(root)
btn1['text'] = '点击'
btn1.place(relx=0.2, x=10, y=20, relwidth=0.2, relheight=0.5)

btn2 = tk.Button(root)
btn2['text'] = '退出'
btn2.place(relx=0.2, x=70, y=20, relwidth=0.2, relheight=0.5)

btn3 = tk.Button(root)
btn3['text'] = '取消'
btn3.place(relx=0.2, x=130, y=20, relwidth=0.2, relheight=0.5)

root.mainloop()

在这里插入图片描述


Tkinter 基本控件

封装

基本版

import tkinter as tk
from tkinter import ttk -下拉选择框

class GUI:

    def __init__(self):
        self.root = tk.Tk()
        self.root.title('窗口标题')
		self.root.geometry("300x100+630+80")
        self.interface()

    def interface(self):
        """"界面编写位置"""
        pass

if __name__ == '__main__':
    gui = GUI()
    gui.root.mainloop()

菜单-主菜单、子菜单

?


界面

控件类名称简要说明
Label标签
LabelFrame标签框架带有标签和边框的一个容器,通常用于控件分组
Message消息框类似于标签,但可以自动换行,用于显示多行文本
OptionMenu选项菜单下拉菜单
Spinbox输入控件与Entry类似,但可以指定输入范围值
Menu菜单点菜单按钮后弹出的一个选项列表,用户可以从中选择
Listbox列表框一个选项列表,用户可以从中选择
Scrollbar滚动条对其支持的组件(文本域、画布、列表框、文本框)提供滚动功能
Text多行文本框显示多行文本
Top Level顶级窗口独立存在的窗口

Label

def interface(self):
    """"界面编写位置"""
    self.Label0 = tk.Label(self.root, text="文本显示")
    self.Label0.grid(row=0, column=0)

在这里插入图片描述


LabelFrame

def interface(self):
    """界面编写位置"""
    top = LabelFrame(self.root, text='This is Label.')
    top.pack(padx=8, pady=8)

    # 创建1个Label
    Label(top, text=content, bg='gray').pack()

    bottom = LabelFrame(self.root, text='This is Message.')
    bottom.pack(padx=8, pady=8)

    # 创建1个Message
    Message(bottom, text=content, bg='light blue').pack()

在这里插入图片描述

按钮显示_Button

def interface(self):
    """"界面编写位置"""
    self.Button0 = tk.Button(self.root, text="按钮显示")
    self.Button0.grid(row=0, column=0)

在这里插入图片描述


输入框显示_Entry

def interface(self):
    """"界面编写位置"""
    self.Entry0 = tk.Entry(self.root)
    self.Entry0.grid(row=0, column=0)

在这里插入图片描述


文本输入框显示_Text

  • pack 布局
def interface(self):
    """"界面编写位置"""
    self.w1 = tk.Text(self.root, width=80, height=10)
    self.w1.pack(pady=0, padx=30)

在这里插入图片描述

  • grid 布局
def interface(self):
    """"界面编写位置"""
    self.w1 = tk.Text(self.root, width=80, height=10)
    self.w1.grid(row=1, column=0)

在这里插入图片描述

复选按钮_Checkbutton

def interface(self):
    """"界面编写位置"""
    self.Checkbutton01 = tk.Checkbutton(self.root, text="名称")
    self.Checkbutton01.grid(row=0, column=2)

在这里插入图片描述


单选按钮_Radiobutton

def interface(self):
    """"界面编写位置"""
    self.Radiobutton01 = tk.Radiobutton(self.root, text="名称")
    self.Radiobutton01.grid(row=0, column=2)

在这里插入图片描述


下拉选择框_Combobox

def interface(self):
    """"界面编写位置"""
    values = ['1', '2', '3', '4']
    self.combobox = ttk.Combobox(
        master=self.root,  # 父容器
        height=10,  # 高度,下拉显示的条目数量
        width=20,  # 宽度
        state='',  # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled(禁止输入选择)
        cursor='arrow',  # 鼠标移动时样式 arrow, circle, cross, plus...
        font=('', 15),  # 字体、字号
        textvariable='',  # 通过StringVar设置可改变的值
        values=values,  # 设置下拉框的选项
    )
    self.combobox.grid(padx=150)

在这里插入图片描述

对话框

分类简要说明
messagebox消息对话框
filedialog文件对话框
colorchooser颜色选择对话框

messagebox


filedialog


colorchooser



Tkinter 组件使用方法

界面

按钮 (Button) 绑定事件

def interface(self):
    """"界面编写位置"""
    self.Button0 = tk.Button(self.root, text="运行", command=self.event)
    self.Button0.grid(row=0, column=0)

    self.Button1 = tk.Button(self.root, text="退出", command=self.root.destroy, bg="Gray")  # bg=颜色
    self.Button1.grid(row=0, column=1, sticky="e", ipadx=10)

def event(self):
    """按钮事件"""
    print("运行成功")
    return '按钮事件结束啦!'

输入框 (Entry) 内容获取

def interface(self):
    """"界面编写位置"""
    self.entry00 = tk.StringVar()
    self.entry00.set("默认信息")
    self.entry0 = tk.Entry(self.root, textvariable=self.entry00)
    self.entry0.grid(row=0, column=0)

    self.Button0 = tk.Button(self.root, text="运行", command=self.event)
    self.Button0.grid(row=1, column=0)
    
def event(self):
    """按钮事件,获取文本信息"""
    global entry
    entry = self.entry00.get()

在这里插入图片描述
对于输入框内容的获取、清除的实例,可参考此处 3


文本输入框 (Text),写入文本信息和清除文本信息

def interface(self):
    """"界面编写位置"""
    self.w1 = tk.Text(self.root, width=20, height=3)
    self.w1.grid(row=0, column=0)
    self.w1.insert("insert", "默认信息")

    self.Button0 = tk.Button(self.root, text="清除", command=self.event)
    self.Button0.grid(row=1, column=0)

def event(self):
    """清空输入框"""
    self.w1.delete(0.0, "end")

在这里插入图片描述


获取复选按钮 (Checkbutton) 的状态

def interface(self):
    """"界面编写位置"""
    self.v1 = tk.IntVar()
    self.Checkbutton01 = tk.Checkbutton(self.root, text="复选框", command=self.Check_box, variable=self.v1)
    self.Checkbutton01.grid(row=0, column=0)
    
    self.w1 = tk.Text(self.root, width=20, height=10)
    self.w1.grid(row=1, column=0)
    
    self.Button0 = tk.Button(self.root, text="确定", command=self.event)
    self.Button0.grid(row=2, column=0)
    
def event(self):
    '''按钮事件,获取复选框的状态,1表示勾选,0表示未勾选'''
    a = self.v1.get()
    self.w1.insert(1.0, str(a) + '\n')
    
def Check_box(self):
    '''复选框事件'''
    if self.v1.get() == 1:
        self.w1.insert(1.0, "勾选" + '\n')
    else:
        self.w1.insert(1.0, "未勾选" + '\n')

在这里插入图片描述

清除控件

def interface(self):
    """"界面编写位置"""
    self.Label0 = tk.Label(self.root, text="文本显示")
    self.Label0.grid(row=0, column=0)

    self.Entry0 = tk.Entry(self.root)
    self.Entry0.grid(row=1, column=0)

    self.w1 = tk.Text(self.root, width=20, height=2)
    self.w1.grid(row=2, column=0)

    self.Button0 = tk.Button(self.root, text="确定", command=self.event)
    self.Button0.grid(row=3, column=0)

def event(self):
    '''按钮事件,清除Label、Entry、Text组件'''
    a = [self.Label0, self.Entry0, self.w1]
    for i in a:
        i.grid_forget()

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


清除复选框勾选状态

def interface(self):
    """"界面编写位置"""
    self.v1 = tk.IntVar()
    self.Checkbutton01 = tk.Checkbutton(self.root, text="复选框", command=self.Check_box, variable=self.v1)
    self.Checkbutton01.grid(row=0, column=0)

    self.w1 = tk.Text(self.root, width=20, height=2)
    self.w1.grid(row=1, column=0)

    self.Button0 = tk.Button(self.root, text="清除", command=self.event)
    self.Button0.grid(row=2, column=0)

def event(self):
    '''按钮事件,清除复选框勾选状态'''
    self.Checkbutton01.deselect()

def Check_box(self):
    '''复选框事件'''
    if self.v1.get() == 1:
        self.w1.insert(1.0, "勾选" + '\n')
    else:
        self.w1.insert(1.0, "未勾选" + '\n')

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


文本框 (Text) 内容获取

def interface(self):
    """"界面编写位置"""
    self.w1 = tk.Text(self.root, width=20, height=2)
    self.w1.grid(row=0, column=0)

    self.Button0 = tk.Button(self.root, text="确定", command=self.event)
    self.Button0.grid(row=1, column=0)

def event(self):
    '''按钮事件,获取文本框内容'''
    a = self.w1.get('0.0', 'end')
    print(a)

在这里插入图片描述
对于如何制作1个 Tkinter 输入框并关闭它,可参考此处 4


下拉选择框绑定事件

def interface(self):
    """"界面编写位置"""
    self.value = tk.StringVar()
    self.value.set('2')  # 默认值
    values = ['1', '2', '3', '4']
    self.combobox = ttk.Combobox(
        master=self.root,                                 # 父容器
        height=10,                                        # 高度,下拉显示的条目数量
        width=20,                                         # 宽度
        state='',                                         # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled(禁止输入选择)
        cursor='arrow',                                   # 鼠标移动时样式 arrow, circle, cross, plus...
        font=('', 15),                                    # 字体
        textvariable=self.value,                          # 通过StringVar设置可改变的值
        values=values,                                    # 设置下拉框的选项
    )
    
    self.combobox.bind("<<ComboboxSelected>>", self.pick) # 绑定事件,下拉列表框被选中时,绑定pick()函数
    self.combobox.grid(padx=20)
    
def pick(self, *args):                                    # 处理事件,*args表示可变参数
    print('选中的数据:{} \n value的值:{}'.format(self.combobox.get(), self.value.get()))

在这里插入图片描述
对于下拉框绑定事件的实例,可参考此处 567

多级下拉选择框绑定

对于多级下拉框绑定事件的实例(比如说下订单时选定特定省份后选择相应的城市),可参考此处 8


Tkinter 多线程

多线程暂停和继续

%todo


Tkinter 文件之间调用

%todo


参考链接

%todo:


  1. python之Tkinter使用详解 ??

  2. TkDocs ??

  3. Python之tkinter 文本框Entry的基本应用 ??

  4. 如何制作一个tkinter输入框并关闭它 ??

  5. tkinter模块使用实例–用户输入后窗口关闭 ??

  6. 能否tkinter的combobox获取下拉框值和输入值? ??

  7. tkinter中combobox下拉选择控件(九) ??

  8. Python tkinter - How to make two linked combo boxes using a dictionary ??

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-07-04 22:49:56  更:2022-07-04 22:53:43 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/18 13:25:35-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码