【Python】Tkinter教程

2023-05-16

什么是Tkinter?

Tkinter 是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。

由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。

使用

导入


import tkinter  

注意:Python3.x 版本使用的库名为 tkinter,即首写字母 T 为小写。

创建一个GUI程序

  • 1、导入 Tkinter 模块
  • 2、创建控件
  • 3、指定这个控件的 master, 即这个控件属于哪一个
  • 4、告诉 GM(geometry manager) 有一个控件产生了。

#!/usr/bin/python3
 
import tkinter
top = tkinter.Tk()
# 进入消息循环
top.mainloop()  

窗口主体框架 

每一个 tkinter 应用的主体框架都可以包含下面这部分. 定义 window 窗口 和 window的一些属性, 然后书写窗口内容, 最后执行window.mainloop让窗口活起来.


import tkinter as tk

window = tk.Tk()
window.title('my window')
window.geometry('500x500')
#注意:这里的乘是×不是* # 这里是窗口的内容 window.mainloop()

 窗口内容

 Label & Button 标签和按钮

这次我们会建立一个用来描述的标签 tk.Label, 比如:


import tkinter as tk
#创建窗口
window=tk.Tk()
window.title('Mywindow')#窗口的标题
window.geometry('200x100')#窗口的大小
#定义一个lable
l = tk.Label(window, 
    text='Hi! this is TK!',    # 标签的文字
    bg='green',     # 标签背景颜色
    font=('Arial', 12),     # 字体和字体大小
    width=15, height=2  # 标签长宽(以字符长度计算)
    )
l.pack()    # 固定窗口位置

window.mainloop()  

关于Label的更多内容可以看这里https://www.runoob.com/python/python-tk-label.html

 我们也可以通过变量的形式控制标签的显示, 这时我们引入按钮 tk.Button 的概念, 没点一次按钮, 标签变化一次. 用一下内容替换上面的标签. 并把需要变化的文字存成变量 var:

 


var = tk.StringVar()    # 这时文字变量储存器
l = tk.Label(window, 
    textvariable=var,   # 使用 textvariable 替换 text, 因为这个可以变化
    bg='green', font=('Arial', 12), width=15, height=2)
l.pack()   

接着我们来做 按钮 tk.Button:


b = tk.Button(window, 
    text='hit me',      # 显示在按钮上的文字
    width=15, height=2, 
    command=hit_me)     # 点击按钮式执行的命令
b.pack()    # 按钮位置  

那么点击是的命令我们用 if else 语句来判断. 用 on_hit 来判断当前状态.


on_hit = False  # 默认初始状态为 False
def hit_me():
    global on_hit
    if on_hit == False:     # 从 False 状态变成 True 状态
        on_hit = True
        var.set('you hit me')   # 设置标签的文字为 'you hit me'
    else:       # 从 True 状态变成 False 状态
        on_hit = False
        var.set('') # 设置 文字为空  

完整代码:


import tkinter as tk
#创建窗口
window=tk.Tk()
window.title('Mywindow')#窗口的标题
window.geometry('200x100')#窗口的大小
#定义一个lable
var=tk.StringVar()#定义一个字符串变量
l = tk.Label(window, 
    textvariable=var,    # 标签的文字
    bg='green',     # 标签背景颜色
    font=('Arial', 12),     # 字体和字体大小
    width=15, height=2  # 标签长宽
    )
l.pack()    # 固定窗口位置
#定义一个全局变量,来表明字符显示与不显示
on_hit=False

#按钮的函数
def hit_me():
    global on_hit#声明全局变量
    if on_hit==False:
        on_hit=True
        var.set('You hit me!')
    else:
        on_hit=False
        var.set('')
#按钮
b=tk.Button(window,text='点我',width=15,height=2,command=hit_me)#点击按钮执行一个名为“hit_me”的函数
b.pack()

window.mainloop()  

没有点击时:

Label & Button 标签和按钮

点击第一次:

Label & Button 标签和按钮

点击第二次:

Label & Button 标签和按钮

 

Entry & Text 输入, 文本框

窗口主体框架 

每一个tkinter应用的主体框架都包含以下几部分:

  • 主窗口: window,及主窗口的一些基本属性(标题、大小)
  • 让窗口活起来:window.mainloop()

import tkinter as tk

window = tk.Tk()
window.title('my window')

##窗口尺寸
window.geometry('200x200')

##显示出来
window.mainloop()  

窗口内容(窗口上的控件)

创建按钮分别触发两种情况


b1 = tk.Button(window,text="insert point",width=15,height=2,command=insert_point)
b1.pack()

b2 = tk.Button(window,text="insert end",command=insert_end)
b2.pack()  

创建输入框entry,用户输入任何内容都显示为*


e = tk.Entry(window,show='*')
e.pack()  

创建一个文本框用于显示


t = tk.Text(window,height=2)
t.pack()  

定义触发事件时的函数(注意:因为Python的执行顺序是从上往下,所以函数一定要放在按钮的上面)


def insert_point():
    var = e.get()
    t.insert('insert',var)

def insert_end():
    var = e.get()
    t.insert('end',var)  

完整代码:


import tkinter as tk

window = tk.Tk()
window.title('my window')
##窗口尺寸
window.geometry('200x200')
#定义一个输入框entry
e=tk.Entry(window,show=None)#如果是输入密码,可以写show='*'
e.pack()
#定义按钮功能
def insert_point():
    var=e.get()
    t.insert('insert',var)
def insert_end():
    var=e.get()
    t.insert('end',var)#这里还可以定义字符串插入的具体位置,比如t.insert('1.1',var),表示插入到第一行第一列  

#定义2个按钮 Button b1 = tk.Button(window,text="insert point",width=15,height=2,command=insert_point) b1.pack() b2 = tk.Button(window,text="insert end",command=insert_end) b2.pack() #定义一个文本框 Text t=tk.Text(window,height=2) t.pack() ##显示出来 window.mainloop()  

窗口界面

测试一下 

第一次:在entry中输入tkinter,在text中输入0000并将光标定位在中间位置,点击insert point

Entry & Text 输入, 文本框

第二次:点击insert end

Entry & Text 输入, 文本框

 Listbox 列表部件

创建主窗口


import tkinter as tk

window = tk.Tk()
window.title('my window')
##窗口尺寸
window.geometry('200x200')


##显示出来
window.mainloop()  

创建一个label用于显示 


var1 = tk.StringVar()    #创建变量
l =tk.Label(window,bg='yellow',width=4,textvariable=var1)
l.pack()  

 

 

 

创建一个方法用于按钮的点击事件


def print_selection():
    value = lb.get(lb.curselection())   #获取当前选中的文本
    var1.set(value)     #为label设置值  

创建一个按钮


b1 = tk.Button(window, text='print selection', width=15,
              height=2, command=print_selection)
b1.pack()  

 

 

 

创建一个Listbox和变量var2,并将var2的值赋给Listbox


var2 = tk.StringVar()
var2.set((11,22,33,44)) #为变量设置值

#创建Listbox

lb = tk.Listbox(window, listvariable=var2)  #将var2的值赋给Listbox

#创建一个list并将值循环添加到Listbox控件中
list_items = [1,2,3,4]
for item in list_items:
    lb.insert('end', item)  #从最后一个位置开始加入值
lb.insert(1, 'first')       #在第一个位置加入'first'字符
lb.insert(2, 'second')      #在第二个位置加入'second'字符
lb.delete(2)                #删除第二个位置的字符
lb.pack()  

完整代码:

 


import tkinter as tk

window = tk.Tk()
window.title('my window')
##窗口尺寸
window.geometry('200x200')
#创建一个lable
var1 = tk.StringVar()    #创建变量
l =tk.Label(window,bg='yellow',width=4,textvariable=var1)
l.pack()
#按钮事件
def print_selection():
    value = lb.get(lb.curselection())   #获取当前选中的文本
    var1.set(value)     #为label设置值
#创建一个按钮
b1 = tk.Button(window, text='print selection', width=15,
              height=2, command=print_selection)
b1.pack()
#创建一个Listbox和变量var2,并将var2的值赋给Listbox
var2 = tk.StringVar()
var2.set((11,22,33,44)) #为变量设置值

#创建Listbox

lb = tk.Listbox(window, listvariable=var2)  #将var2的值赋给Listbox

#创建一个list并将值循环添加到Listbox控件中
list_items = [1,2,3,4]#定义列表
for item in list_items:
    lb.insert('end', item)  #从最后一个位置开始加入值
lb.insert(1, 'first')       #在第一个位置加入'first'字符
lb.insert(2, 'second')      #在第二个位置加入'second'字符
lb.delete(2)                #删除第二个位置的字符
lb.pack()


##显示出来
window.mainloop()  

演示

Radiobutton 选择按钮

这一次的效果将会像下面的图片一样.

Radiobutton 选择按钮

如果选择了某个选项, 效果就会如下.

Radiobutton 选择按钮

radiobutton 部件

首先我们需要定义一个 var 用来将 radiobutton 的值和 Label 的值联系在一起. 然后创建一个radiobutton部分:


var = tk.StringVar()
l = tk.Label(window, bg='yellow', width=20, text='empty')
l.pack()

r1 = tk.Radiobutton(window, text='Option A',
                    variable=var, value='A',
                    command=print_selection)
r1.pack()  

其中variable=varvalue='A'的意思就是,当我们鼠标选中了其中一个选项,把value的值A放到变量var中,然后赋值给variable

触发功能

我们将定义一个功能, 用来对选择的 radiobutton 进行操作. print_selection 功能就是选择了某个 radiobutton 后我们会在屏幕上打印的选项.


def print_selection():
    l.config(text='you have selected ' + var.get())  

当触发这个函数功能时,我们的 label 中就会显示 text 所赋值的字符串即 ‘you have selected’, 后面则是我们所选中的选项 var.get()就是获取到变量 var 的值, 举个例子就是我们一开始所做的将选项 “option A” 选中时的值以 “A” 放入 var 中, 所以获取的也就是A 即如果我们这时候选中 “option A” 选项,label显示的值则是 “you have selected A”.

完整代码:


import tkinter as tk

window = tk.Tk()
window.title('my window')
##窗口尺寸
window.geometry('200x200')
#创建一个lable
var= tk.StringVar()    #创建变量
l =tk.Label(window,bg='yellow',width=20,height=2,text='empty')
l.pack()
#实现将选择的选项显示在lable
def print_selection():
    l.config(text='you have selected'+var.get())

#创建几个Radiobutton
r1 = tk.Radiobutton(window, text='Option A',
                    variable=var, value='A',
                    command=print_selection)
r1.pack()

r2 = tk.Radiobutton(window, text='Option B',
                    variable=var, value='B',
                    command=print_selection)
r2.pack()

r3 = tk.Radiobutton(window, text='Option C',
                    variable=var, value='C',
                    command=print_selection)
r3.pack()

##显示出来
window.mainloop()  

演示:

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【Python】Tkinter教程 的相关文章

随机推荐

  • JAVA 点击按钮展开一个新的Jpanel

    问题不太容易用语言来描述 xff0c 先直接上图吧 xff1a 点击按钮之前 xff1a 点击按钮之后 xff1a 那么如何实现这种功能呢 xff1f 首先在图一中的主JFrame中添加一个JScrollPane xff0c 在点击按钮后n
  • java 实现日历选择器

    首先引用com qt datapicker DatePicker 包实现如下 xff1a package Date import java awt event ActionEvent import java awt event Action
  • 获取JPasswordField组件中的密码

    在JTextField中有一个方法getText xff0c 可以返回组件中输入的字符串 xff0c 但是对于JPasswordField类 xff0c getText 方法已经不适用了 xff0c 执意使用的话 xff0c 获取的也是一串
  • 指针的大小

    说这个之前先了解几个概念 xff1a 字长 xff1a 字长是CPU的主要技术指标之一 xff0c 指的是CPU一次能并行处理的二进制的位数 xff0c 字长是8的整倍数 xff0c 通常的PC机的字长为16位 xff0c 32位 xff0
  • 程序设计思维与实践 Week6 作业A氪金带东树的直径的应用

    题意 xff1a 依次输入图中的点以及边权等信息 xff0c 最后输出每个点在图中所能到达的最远的路线的长度 例如所给的样例 xff1a input 输入文件包含多组测试数据 对于每组测试数据 xff0c 第一行一个整数N N lt 61
  • 《UNIX环境高级编程》(第二版)找不到apue.h问题

    UNIX环境高级编程 xff08 第二版 xff09 这本书 xff0c 实例程序中都包含头文件apue h xff0c 寻找linux usr include中 xff0c 缺找不到此头文件 xff0c 因此编译时会出错 实际上apue
  • java程序中,如何安全的结束一个正在运行的线程?

    如何停止java的线程一直是一个开发多线程程序常遇到的一个问题 在Java的多线程编程中 xff0c java lang Thread类型包含了一些列的方法start stop stop Throwable and suspend dest
  • RoboMaster视觉教程(1)摄像头

    观文有感 之 RoboMaster视觉教程 xff08 1 xff09 摄像头 闲来垂钓碧溪上 今天钓到一篇RM视觉摄像头的好文 xff0c 记录一下笔记 xff1a 文章目录 观文有感 之 RoboMaster视觉教程 xff08 1 x
  • 如何成为一名很酷的机器人工程师

    观文有感 之 如何成为一名很酷的机器人工程师 闲来垂钓碧溪上 今天来钓一波职业规划 xff0c 记录一下笔记 xff08 特别注意 xff1a 本文中大部分内容是复制粘贴的 xff0c 只有少数位置的删改和整理 xff0c 目的是分享一下大
  • 不同层面禁用PUT、DELETE、HEAD、TRACE、OPTIONS请求方式

    背景 对于一些对安全级别要求高的应用 xff0c 可能只允许有GET和POST请求 xff0c 其他请求方式需要禁用 xff0c 那么可以从多个层面来进行禁用 下面从大范围禁用到小范围禁用罗列如下 xff08 假定服务容器是tomcat x
  • keil中出现Undefined symbol FLASH_PrefetchBufferCmd (referred from main.o)等问题解决办法

    在keil中仿照别人的程序写了RCC初始化的程序 xff0c 编译后出现以下问题 obj pro1 axf Error L6218E Undefined symbol FLASH PrefetchBufferCmd referred fro
  • 接口测试——requests接口请求(十)

    1 requests库介绍与安装 requests库介绍 requests是一款非常火爆且常用的Python三方库能够实现HTTP协议的各种请求方法使用简单易上手 requests库的安装方法 pip install requests安装成
  • 微信聊天记录提取及分析(wordcloud+pyecharts)

    0 前言 之所以想要提取微信的聊天记录并分析是因为也开始再学习python xff0c 但是单纯看看语法什么的又很无趣 xff0c 无意间看到python可以进行微信聊天记录的分析 xff0c 就自己尝试做了一下 xff0c 感觉还是挺有意
  • 【C语言】输入一个正整数,判断其是否为素数

    span style font family none strong span style font size 18px 素数的定义 xff1a span strong span 素数 xff08 prime number xff09 又称
  • C 语言实例 -求分数数列1/2+2/3+3/5+5/8+...的前n项和

    程序分析 xff1a 抓住分子与分母的变化规律 xff1a 分子a xff1a 1 2 3 5 8 13 21 34 55 89 144 分母b xff1a 2 3 5 8 13 21 34 55 89 144 233 分母b把数赋给了分子
  • csp模拟二C咕咕东的奇妙序列

    题意 xff1a 咕咕东 正在上可怕的复变函数 xff0c 但对于稳拿A Plus的 咕咕东 来说 xff0c 她早已不再听课 xff0c 此时她在睡梦中 突然想到了一个奇怪的无限序列 xff1a 112123123412345 这个序列由
  • 【C语言】输入圆的半径,求解圆的周长和面积

    公式 xff1a C 61 2 r S 61 r 代码 xff1a include lt stdio h gt int main float r PI PI 61 3 14159 printf 34 请输入圆的半径 xff1a n 34 s
  • 【C语言】输入一个年份和月份,输出该月的天数

    分析 xff1a 三种类型 xff0c A 2月比较特殊 xff0c 平年的2月只有28天 xff0c 而闰年的2月有 29 天 xff1b B 4 6 9 11月 xff1b C 其他1 3 5 7 8 10 12月 代码 xff1a 输
  • 一个C语言程序是由( )组成?

    A 一个主程序和若干子程序组成 B 一个或多个函数组成 C 若干过程组成 D 若干子程序组成 正确答案 B 解析 解析 一个C源程序是由一个main函数和若干个其他函数组成的 函数是C程序的基本单位 xff0c 被调用的函数可以是系统提供的
  • 【Python】Tkinter教程

    什么是Tkinter xff1f Tkinter 是 Python 的标准 GUI 库 Python 使用 Tkinter 可以快速的创建 GUI 应用程序 由于 Tkinter 是内置到 python 的安装包中 只要安装好 Python