从入门到放弃,python:tkinter(GUI建立)详解

本文详细介绍Python标准GUI库Tkinter的入门教程,涵盖全局思想、基本元素添加、文件窗口及项目示例,适合初学者快速掌握GUI应用开发。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、前言

Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如的。
对于python初学者来讲,通过基础包Tkinter入门后,再学习其他的GUI库也能起到事半功倍的效果。

二、全局思想

要写属于自己的GUI程序,首先要了解 Tkinter 的全局思想
即创建一个空白的GUI对象>>添加元素>>激活GUI窗口

import tkinter as tk # 使用Tkinter前需要先导入

window = tk.Tk()     # 开局:实例化object,建立窗口window
#...
#...                 # 添加元素
#...
window.mainloop()    # 收尾:激活GUI窗口

每次创建GUI窗口,都是必然以建立对象开头,激活窗口收尾
图一
上诉代码运行结果,因为没有添加元素,随意激活的窗口也是空白的。

三、添加基本元素

接下来需要了解窗口中的元素如何添加:
介绍一些简单元素:例如文本信息,输入框,按钮等

1、基本参数

首先从基本参数开始:设置标题,标题,大小。

import tkinter as tk
# 第1步,实例化object,建立窗口window
window = tk.Tk()
 
# 第2步,给窗口的可视化起名字
window.title('Tkinter:从入门到放弃')
 
# 第3步,设定窗口的大小(长 * 宽)
window.geometry('600x200')  # 这里的乘是字母小x

# 收尾:激活GUI窗口
window.mainloop()

在这里插入图片描述

2、基本元素

流程:先创建一个元素对象,然后将其放置在GUI窗口内
放置标签的方式一共有三种:相对布局pack、绝对布局place、表格布局grid
相对布局:直接将元素按顺序布局在窗口内
绝对布局:按照指定的坐标,将元素放入窗口
表格布局:按照结构化坐标放置元素
布局设置可以参考此文

a、文本标签

利用tk.Label()创建一个文本标签对象,然后使用相对布局pack()将其放置
单行语法:
tk.Label(self, text, font, width, height).pack()

import tkinter as tk
# 第1步,实例化object,建立窗口window
window = tk.Tk()
# 第2步,给窗口的可视化起名字
window.title('Tkinter:从入门到放弃')
# 第3步,设定窗口的大小(长 * 宽)
window.geometry('600x200')  # 这里的乘是小x
# 第4步,在图形界面上设定文本标签(为了阅读性分开构建)
l = tk.Label(window, text='论如何卸载python?', font=('Arial', 12), width=30, height=2, bg='green')
# 说明: bg为背景,text为文本内容,font为字体,width为长,height为高,这里的长和高是字符的长和高。
# 第5步,放置标签
l.pack()
# 收尾:激活GUI窗口
window.mainloop()

在这里插入图片描述

b、列表组件

import tkinter as tk
# 第1步,实例化object,建立窗口window
window = tk.Tk()
 
# 第2步,给窗口的可视化起名字
window.title('Tkinter:从入门到放弃')
 
# 第3步,设定窗口的大小(长 * 宽)
window.geometry('600x500')  # 这里的乘是小x

# 第4步,在图形界面上设定文本标签(为了阅读性分开构建)
l = tk.Label(window, text='论如何卸载python?', font=('Arial', 12), width=30, height=2)
# 说明: bg为背景,text为文本内容,font为字体,width为长,height为高,这里的长和高是字符的长和高。

# 第5步,放置标签
l.pack()

lists1 = '删除python'
lists2  = ['安装英雄联盟','安装王者荣耀']
listb  = Listbox(window)        #  创建两个列表组件
listb2 = Listbox(window)

listb.insert(0,lists1)          # 第一个小部件插入数据

for item in lists2:             # 第二个小部件插入数据
    listb2.insert(0,item)

listb.pack()                    # 将列表组件放置到主窗口中
listb2.pack()
# 收尾:激活GUI窗口
window.mainloop()

在这里插入图片描述

c、点击按钮与弹出窗口

接下来就是比较常用的,点击按钮了
通常来讲,点击按钮都需要绑定一个功能,点击后执行。
我们来看看点击后弹出一个提示窗口该如何操作吧

import tkinter as tk
import tkinter.messagebox as tkMB # 用以构建弹出窗口

window= tk.Tk()

# 为按钮功能建立一个函数,该函数必须创建在之前。
def buttons():
    tkMB.showinfo("弹出窗口的标题", "弹出窗口的内容")
    # 说明:前面为弹出窗口的标题,后面为弹出窗口的内容.

# 创建一个按钮,并(内容自己自由编写),供点击按钮时调用
b = tk.Button(window, text ="点我", command = buttons)
# 说明:text为按钮中的文本内容,command通常为绑定的函数功能,
# 调用命令参数command=函数名,点击按钮后会执行该函数。
# 放置按钮
b.pack()

window.mainloop()

在这里插入图片描述
基于以上,我们来扩展一下看看还能怎样绑定功能吧,运行下方代码试试。

import tkinter as tk  

# 第1步,实例化object,建立窗口window,并设定基本参数
window = tk.Tk()
window.title('来玩玩吧')
window.geometry('500x100')

# 第2步,在图形界面上设定标签
var = tk.StringVar()    # 将label标签的内容设置为字符类型,用var来接收hit_me函数的传出内容用以显示在标签上
l = tk.Label(window, textvariable=var, bg='green', fg='white', font=('Arial', 12), width=30, height=2)
# 说明: bg为背景,fg为字体颜色,font为字体,width为长,height为高,这里的长和高是字符的长和高
l.pack()

# 为按钮功能建立一个函数,该函数必须创建在之前。
click = False
def buttons():
    global click
    if click== False:
        click= True
        var.set('你戴上了绿帽,并表示爱不释手~')
    else:
        click= False
        var.set('')

# 第3步,在窗口界面设置放置Button按键
b = tk.Button(window, text='戴帽子', font=('Arial', 12), width=10, height=1, command=buttons)
b.pack()

# 收尾,激活
window.mainloop()

在这里插入图片描述

d、独立选项与非独立选项

当我们需要加入选择选项时,可分为两种情况:
Radiobutton 相互独立选项,选了A就不能选B
Checkbutton 非独立选项,即可同时多选互相共存的选项.

独立选项
# 第1步
window = tk.Tk()
window.title('性别测试')
window.geometry('500x150')
 
# 第2步,在图形界面上创建一个标签label用以显示并放置
var = tk.StringVar()    # 定义一个var用来将radiobutton的值和Label的值联系在一起.
l = tk.Label(window, bg='yellow', width=20, text='你的性别?')
l.pack()
 
# 第3步,定义选项触发函数功能
def sex_selection():
    l.config(text='你....' + var.get())

# 第4步,创建三个独立选项,其中variable=var, value='A'的意思就是,当我们鼠标选中了其中一个选项,把value的值A放到变量var中,然后赋值给variable
r1 = tk.Radiobutton(window, text='男', variable=var, value='是臭男人啊', command=sex_selection)
r1.pack()
r2 = tk.Radiobutton(window, text='女', variable=var, value='是女孩子吖', command=sex_selection)
r2.pack()
r3 = tk.Radiobutton(window, text='?', variable=var, value='是人妖?', command=sex_selection)
r3.pack()
 
window.mainloop()

在这里插入图片描述

非独立选项
# 第1步
window = tk.Tk()
window.title('我的老婆')
window.geometry('500x100')
 
# 第2步,在图形界面上创建一个标签label用以显示并放置
l = tk.Label(window, bg='yellow', width=20, text='小孩子才做选择')
l.pack()
 
# 第3步,定义触发函数功能
def wife_selection():
    if (var1.get() == 1) & (var2.get() == 0):     # 如果选中第一个选项,未选中第二个选项
        l.config(text='我喜欢周冬雨 ')
    elif (var1.get() == 0) & (var2.get() == 1):   # 如果选中第二个选项,未选中第一个选项
        l.config(text='我喜欢关晓彤')
    elif (var1.get() == 0) & (var2.get() == 0):   # 如果两个选项都未选中
        l.config(text='我两个都不喜欢')
    else:
        l.config(text='我全都要')                 # 如果两个选项都选中

# 第4步,定义两个Checkbutton选项并放置
var1 = tk.IntVar()  # 定义var1和var2整型变量用来存放选择行为返回值
var2 = tk.IntVar()
c1 = tk.Checkbutton(window, text='周冬雨',variable=var1, onvalue=1, offvalue=0, command=wife_selection)    # 传值原理类似于radiobutton部件
c1.pack()
c2 = tk.Checkbutton(window, text='关晓彤',variable=var2, onvalue=1, offvalue=0, command=wife_selection)
c2.pack()
 
# 收尾,激活
window.mainloop()

在这里插入图片描述

四、文件窗口

…有空继续更新

五、项目示例

为朋友写了个数据处理脚本

from pandas import read_excel
from pandas import read_csv
from tkinter import Tk
from tkinter import Label
from tkinter import Entry
from tkinter import StringVar
from tkinter import Radiobutton
from tkinter import Button
from tkinter.messagebox import showinfo
from os import makedirs
from os.path import exists
from os.path import expanduser
from os.path import basename

def md(paths):
    if not exists(paths):
        makedirs(paths)
def GUI():
    window = Tk()
    window.title('转换脚本3.0')
    window.geometry('400x350')
    l = Label(window, text='请输入文件路径及文件名', font=('Arial', 12), width=30, height=2)
    l.pack()
    e = Entry(window, show = None,width=40)
    e.pack()
    var = StringVar()
    l = Label(window, bg='yellow', width=30, text='请选择文件类型')
    l.pack()
    def print_selection():
        l.config(text='选择文件类型为 ' + var.get())
    r1 = Radiobutton(window, text='csv文件   ', variable=var, value='csv逗号分隔符文件', command=print_selection)
    r1.pack()
    r2 = Radiobutton(window, text='excel文件', variable=var, value='excel表格文件', command=print_selection)
    r2.pack()
    def breaks():
        try:
            get_space_txt()
            showinfo( "OK", '转换完成')
        except:
            showinfo( "Error", '请检查文件路径及文件类型是否正确')
    def get_space_txt():
        filepath=e.get()
        types=var.get()
        savepath=expanduser("~")+'\\Desktop\\txt\\'
        md(savepath)
        savefilepath=savepath+basename(e.get())+'\\'
        if types=='csv逗号分隔符文件':
            with open(filepath,encoding='utf_8_sig') as f:
                df=read_csv(filepath,dtype=str)
        elif types=='excel表格文件':
            df=read_excel(filepath,dtype=str)
        for i in df.columns:
            df[i]=' '+df[i]
        md(savefilepath)
        for i in df.columns:
            fh = open(savefilepath+i+'.txt', 'w', encoding='utf-8')
            fh.write(i+'\n')
            for u in df[i].values:
                fh.write(str(u)+'\n')
        fh.close()
    b = Button(window, text='确定', width=20,height=2, command=breaks)
    b.pack()
    def quits():
        window.quit()
    q = Button(window, text='退出', width=20,height=2, command=quits)
    q.pack()
    n = Label(window, text='by: hao-lf', font=('Arial', 10), width=30, height=2)
    n.pack()
    t = Label(window, text='说明: 将表格文件的每个维度分别转换\n为txt字段,并为每行添加首空格,转换\n完成后生成在桌面 txt 文件夹中。', font=('Arial', 9), width=30, height=3)
    t.pack()
    window.mainloop()

if __name__=='__main__':
    GUI()

未完待续…有空再写

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值