pyhton GUI编程之Tkinter详细讲解二

本文详细讲解了Python GUI编程库Tkinter的组件用法,包括文本输入输出控件(如Lable、Message、Entry、Text)、按钮组件(Button、Radiobutton、复选框)、列表框与组合框、Menu菜单、移动类组件(Scale、Spinbox、Scrollbar、Canvas)以及子窗体和对话框。通过实例代码展示了各组件的功能和用法。

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

Tkinter详细讲解

pyhton GUI编程之Tkinter详细讲解一

  1. GUI编程概述
  2. tkinter整体描述
  3. 主窗口和布局管理器

pyhton GUI编程之Tkinter详细讲解二

  1. 组件用法

pyhton GUI编程之Tkinter详细讲解三

  1. 事件响应

pyhton GUI编程之Tkinter详细讲解二

4. 组件用法

  • 组件是在在根窗体上呈现的可视化的部分,通常包括尺寸、颜色、字体、相对位置、浮雕样式、图标样式和悬停光标形状等共同属性。但不同的组件由于形状和功能不同,又有其特征属性。
  • 常见的控件共同属性如下表:
属性 说明 取值
anchor 文本起始位置 CENTER(默认),E,S,W,N,NE,SE,SW,NW
bg 背景色
bd 加粗 (默认 2 像素) 无
bitmap 黑白二值图标
cursor 鼠标悬停光标
font
fg 前景色
height (文本控件的单位为行,不是像素)无
width (文本控件的单位为行,不是像素) 无
image 显示图像
justify 多行文本的对其方式 CENTER(默认),LEFT,RIGHT,TOP,BOTTOM
padx 水平扩展像素
pady 垂直扩展像素
relief 3D浮雕样式 FLAT(平的)、RAISED(凸起的)、SUNKEN(凹陷的)、GROOVE(沟槽状边缘)和 RIDGE(脊状边缘)
state 控件实例状态是否可用 NORMAL(默认),DISABLED
  • 对组件各属性赋值方法:组件名( 根窗口对象,属性1="属性1值",属性2="属性2值" )

4.1 文本输入和输出相关控件

4.1.1 Lable标签
  • 作用 :显示文本信息,图像
  • 示例代码及界面展示:
from tkinter import *  # 导入tkinter模块
root = Tk()  # 创建主窗口对象
root.title("GUI学习") # 设计主窗口名字
root.geometry("500x300+100+100") # 主窗口尺寸,WxH±X±Y
lb = Label(root,\
        text = '我是第一个标签',\
        bg = '#d3fbfb',\
        fg = 'red',\
        font = ('华文新魏',32),\
        width = 20,\
        height = 2,\
        relief = SUNKEN)
lb.pack()
root.mainloop() # 调用组件的mainloop方法,进入事件循环

1

  • 展示的文本若是变化值,处理方法有两种:

    • configure()方法
    • textvariable变量属性
  • 使用两种方法实现电子时钟代码如下:
    在这里插入图片描述

import tkinter
import time
def gettime():
      timestr = time.strftime("%H:%M:%S") # 获取当前的时间并转化为字符串
      lb.configure(text=timestr)   # 重新设置标签文本
      root.after(1000,gettime) # 每隔1s调用函数 gettime 自身获取时间

root = tkinter.Tk()
root.title('时钟')
lb = tkinter.Label(root,text='',fg='blue',font=("黑体",80)).pack()
gettime()
root.mainloop()
def gettime():
      var.set(time.strftime("%H:%M:%S"))   # 获取当前时间
      root.after(1000,gettime)   # 每隔1s调用函数 gettime 自身获取时间

root = tkinter.Tk()
root.title('时钟')
var = tkinter.StringVar() 
lb = tkinter.Label(root, textvariable=var ,fg='blue', font=("黑体",80)).pack()
gettime()
root.mainloop()
4.1.2 Message消息
  • Message和Lable的其属性和用法基本一致,都用于呈现文本信息,不同之处为Lable展示的为横排文字,而Messagea为竖排文字
  • 用上述代码调用Meassage,届面展示如下:
    在这里插入图片描述
4.1.3 Entry输入框
  • Entry 用来接收一行字符串的控件,如果用户输入的文字长度长于Entry 控件的宽度时, 文字会自动向后滚动
  • 通过Entry制作一个登录界面:
from tkinter import *
root = Tk()
root.geometry('320x240')
lb1 = Label(root, text="用户名").pack()
v1 = StringVar()
en1 = Entry(root, textvariable=v1).pack()
v1.set("admin")
lb2 = Label(root, text="用户名").pack()
v2 = StringVar()
en2 = Entry(root, textvariable=v2, show="*").pack()
Button(root,text="登陆").pack()
root.mainloop() 

在这里插入图片描述

4.1.4 Text 文本框
  • Text(多行文本框)的主要用于显示多行文本,还可以显示网页链接, 图片, HTML 页面,甚至CSS 样式表,添加组件等。因此,也常被当做简单的文本处理器、文本编辑器或者网页浏览器来使用。
  • 特有属性方法:
方法 功能
delete(起始位置,[,终止位置]) 删除指定区域文本,起始位置 index = 1.0(特别注意)
get(起始位置,[,终止位置]) 获取指定区域文本
insert(位置,[,字符串]…) 将文本插入到指定位置
see(位置) 在指定位置是否可见文本,返回布尔值
index(标记) 返回标记所在的行和列
mark_names() 返回所有标记名称
mark_set(标记,位置) 在指定位置设置标记
mark_unset(标记) 去除标记
  • Text方法记录当前时间并写入文本中:
from tkinter import *
import datetime

def gettime():
       s = str(datetime.datetime.now()) + '\n'
       txt.insert(END, s)
       root.after(1000, gettime)  # 每隔1s调用函数 gettime 自身获取时间
root = Tk()
root.geometry('320x240')
txt = Text(root)
txt.pack()
gettime()
root.mainloop()

在这里插入图片描述

4.2 按钮组件

4.2.1 Button 按钮
  • Button : 响应鼠标单击事件的触发

  • 除控件共有属性外,属性command用于绑定执行函数,此外Button按钮的状态有:'normal','active','disabled'三种

  • 绑定执行函数的方法有两种:

    • 直接调用函数:“command=函数名”,函数名不加(),不能传递参数
    • 匿名函数调用函数和传递参数:“command=lambda”:函数名(参数列表)
  • 实例 :

    • 需求 :从两个输入框去的输入文本后转为整数进行加法运算,要求每次单击按钮将结果以文本的形式追加到文本框中并将原输入框清空
    • 2.按钮方法一用直接调用函数方法实现,按钮方法二匿名函数调用函数和传递参数
from tkinter import *
def run1(): 
     a = int(inp1.get())
     b = int(inp2.get())
     s = '%d + %d = %d\n' % (a, b, a + b)
     txt.insert(END, s)   # 追加显示运算结果
     inp1.delete(0, END)  # 清空输入
     inp2.delete(0, END)  # 清空输入
def run2(x, y):
     s = '%d + %d = %d\n' % (int(x), int(y), int(x) + int(y))
     txt.insert(END, s)   # 追加显示运算结果
     inp1.delete(0, END)  # 清空输入
     inp2.delete(0, END)  # 清空输入
root = Tk()
root.geometry('460x240')
root.title('简单加法器')
lb1 = Label(root, text='请输入两个数,按下面两个按钮之一进行加法计算')
lb1.place(relx=0.1, rely=0.1, relwidth=0.8, relheight=0.1)
inp1 = Entry(root)
inp1.place(relx=0.1, rely=0.2, relwidth=0.3, relheight=0.1)
inp2 = Entry(root)
inp2.place(relx=0.6, rely=0.2, relwidth=0.3, relheight=0.1)
# 方法-直接调用 run1()
btn1 = Button(root, text='方法一', command=run1)
btn1.place(relx=0.1, rely=0.4, relwidth=0.3, relheight=0.1)
# 方法二利用 lambda 传参数调用run2()
btn2 = Button(root, text='方法二', command=lambda: run2(inp1.get(), inp2.get()))
btn2.place(relx=0.6, rely=0.4, relwidth=0.3, relheight=0.1)
# 在窗体垂直自上而下位置60%处起,布局相对窗体高度40%高的文本框
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

园长QwQ

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值