Python-Tkinter学习笔记

这篇博客详细介绍了使用Python的Tkinter库进行GUI编程,包括组件的通用写法、布局管理器grid、pack和place的使用,以及事件机制、对话框和菜单栏等高级功能。通过实例解析了label、button、Entry、Text、单选框、多选框等组件的创建与交互,是学习Tkinter的实用教程。

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

1、一个通用对的GUI模板界面

from tkinter import *
from tkinter import messagebox


# frame 组件是一个容器,可以用来放置其他的组件

class Application(Frame):
    def __init__(self, master):
        super().__init__(master=master)
        self.master = master
        self.pack()
        self.create_widgets()

    def create_widgets(self):
        pass


if __name__ == '__main__':
    root = Tk()
    root.geometry('300x400+100+100')
    app = Application(root)
    app.mainloop()

2、组件继承关系与字符尺寸&字符尺寸

3、 button组件的通用写法

# 导入配置文件;
# in-config: text = 'text'
import config

# 第一种写法
b1 = Button(self)
b1[config.text] = 'HelloWorld'
b1[config.command] = self.say_hai
b1.pack(side='top')

# 第二种写法
q = Button(self, text='Quit', fg='red', command=self.master.destroy)
q.pack(side='bottom')


# 利用anchor属性可以实现对组件内部的样式控制
# 主要由 英语单词 东南西北 首字母进行控制的 'eswn'

# 也就是说,当组件的尺寸过大时,我们可以控制组件内部的样式

self.master.destroy 指向的是自己的父级窗口被销毁的函数。
如果是父级窗口被销毁,那么子窗口也会被销毁 

在tkinter里面,任意一个组件都可以被认为是一个‘窗口’, 也就是意味着其他的窗口组件也可以添加到这个窗口上。

pack布局如果不传入参数,默认的是center居中布局 pack的其他参数 side=‘left’,这个有点像css里面的:display:flex;justfy-content:start;样式。

4、label组件的通用写法

# 换一种写法,自己想怎么写都随意
# 先定义一个样式列表
l2c = {
            config.text: '高旗老师\n哈哈哈\nbui',
            config.width: 10,
            config.height: 3,
            config.bg: 'white',
            config.foreground: config.color_orange,
            config.font: ('黑体', 14),
            config.justify: config.justify_right,
            config.relief: config.relief_groove,
            config.borderwidth: 1,
        }

# 创建一个label组件
l2 = Label(self)
l2.config(**l2c)
l2.pack()

# 将photo定义为全局变量
global photo
photo = PhotoImage(file='path/to/your/photo/img')
l3 = Label(self, image=photo)
l3.pack()

label组件的中可以传入一张 tkinter-img 的tk图片对象,然后将图片对象渲染到label组件。图片对象必须要借助PhotoImage类来实例化,然后将label标签里面的image属性的值设置为该实例对象,要注意的是传入的图片大小和宽度不能修改,但是可以借助PIL图像处理库帮助完成,其方法是先将图片转化大小,然后再进行tk图像实例化。

实例化的图片对象必须是一个全局变量,因为mainloop事件循环里面在不断的进行更新事件

5、Entry单行文本输入框

e1 = Entry(self)
self.v1 = StringVar()
self.v1.set('admin')
# 双向关联绑定
e1[config.textvariable] = self.v1
e1.pack()

首先要设置一个StringVar()对象,这个是tk内置的一个字符类,里面设置了setter以及getter方法,也就是只可以通过这两种方法来设置和访问属性

其次将label组件中的textvariable属性绑定到字符的实例对象上,然后实现数据的双向绑定

6、多行文本输入框Text

# 创建一个多行文本的输入框
self.t1 = Text(self, width=40, height=12, bg=config.color_gray)
self.t1.pack()


# 普通文本通过索引值的插入
# 行的索引值是从1开始的,列的索引值是从0开始的
self.t1.insert(1.0, '0123456789\n9876543210')
# 从第二行,第四列开始的
self.t1.insert(2.3, '楚河日耽误,旱地和下图,谁知盘中惨,丽丽姐幸苦')

# 普通文本通过特殊的方式插入
# INSERT 表示在光标插入的地方输入
self.t1.insert(INSERT, ' Gaoqi')
# END  表示在段落结束的地方插入
self.t1.insert(END, '[sxt]')

# 文本的获取
# 核心,行号是从 1 开始的, 列号是从 0 开始的
text = self.t1.get(1.2, 1.6)
texts = self.t1.get(1.2, END)

# 向输入框中添加一个图片(图片的本质也是文本)
self.photo = PhotoImage(file='./unit.png')
self.t1.image_create(END, image=self.photo)

# 向text文本框中添加一个按钮组件
b1 = Button(self.t1, text='这是动态添加的按钮')
self.t1.window_create(INSERT, window=b1)

# 删除文本
self.t1.delete(1.0, END)

# 段落标记
# 选定段落。创建一个标记
self.t1.tag_add('good', 1.0, 1.9)
# 给标记绑定相关的样式
self.t1.tag_config('good', background=config.color_yellow, foreground=config.color_red)
# 给标记的样式绑定一个事件
self.t1.tag_bind('good', '<Button-1>', callback)

多行文本输入框获取文

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值