0
点赞
收藏
分享

微信扫一扫

Python-Tkinter学习笔记(一)

云卷云舒xj 2022-02-06 阅读 113

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)

多行文本输入框获取文本用get方法;插入文本用insert方法;添加图片用image_create方法;添加组件用window_create方法;删除文本用delete方法;

段落标记指的是对想要的段落进行标记,其中别标记的段落会有一个标记别名,可以通过别名来实现是对标记段落的样式的更改,同时也可以通过标记名称为相关的段落绑定相应事件。

多行文本输入框中,行是从1开始的,列是从0开始的。也就说,如果我现在给你一个索引值1.5:那么表示的是从第一行的第六个元素开始

 7、ratio-button单选框

self.v = StringVar()
self.v.set('v')

self.r1 = Radiobutton(self, text='男性', value='M', variable=self.v)
self.r2 = Radiobutton(self, text='女性', value='F', variable=self.v)

self.r1.pack(side=left)
self.r2.pack(side=left)

这里唯一需要注意的是,单选框设置的属性名为 variable,并且指向的值必须是同一个内存地址(也就是必须是同一个变量), Entry单行文本输入框中设置的是textvaiable,两者设置的属性名称是不同的,同时这里也需要指定value属性,表示选中后的值。

8、check-button多选文本输入框

# 创建两个字符变量, 创建后默认值为0
self.code_hobby = IntVar()
self.video_hobby = IntVar()

# 创建两个多选输入框
self.c1 = Checkbutton(self, text='敲代码', variable=self.code_hobby, onvalue=1, offvalue=0)
self.c2 = Checkbutton(self, text='看视屏', variable=self.video_hobby, onvalue=1,offvalue=0)

# 布局
self.c1.pack(side=left)
self.c2.pack(side=left)

多选输入框要分别为每一个输入框创建一个单独的变量,将变量分别绑定绑定到variable属性身上,同时设置onvalue and offvalue 来表示选中以及未选中时的值,读取数据时也只能通过变量的get方法一个一个进行读取。

举报

相关推荐

0 条评论