tkinter学习笔记1

tkinter学习笔记1

tkinter是python自带的标准GUI库,通常无需额外安装,如果没有自带可以通过以下命令来安装

pip install tkinter

为pip指定--user可以无需root权限仅为当前用户安装

tkinter是对tcl/tk的一种python封装

Tkinter 8.5 reference: a GUI for Python (gitee.io)

Tcl Developer Site

引入基本模块

import tkinter as tk

创建根窗口

root = tkinter.Tk()
# 进入root窗口事件循环(z)
root.mainloop()

添加组件

Label

Label是一个用于显示文本和图片的控件

属性说明
text显示的文本
image显示的图片(图片和文本只能指定一个)

使用text属性来设置文本

root = tkinter.Tk()
# 创建组件
label = tkinter.Label(root, text="我是一个label")
# 放置组件
label.pack()
root.mainloop()

使用image属性来设置图片,图片不能直接通过文件名指定,需要通过Pillow库打开并转换为ImageTk.PhotoImage对象才能被Label直接使用

from PIL import Image,ImageTk
root = tkinter.Tk()
# 打开图片
img = Image.open("image/cona.jpg")
# 生成tkinter可以使用的图片
img_tk = ImageTk.PhotoImage(img)
tkinter.Label(root, text="显示图片").pack()
tkinter.Label(root, image=img_tk).pack()
root.mainloop()

Button

Button可以被视为一种增强型的Label,即Label支持的文字和图片设置Button均支持,此外,Button还支持通过command属性来设置点击事件

属性说明
text显示的文本
image显示的图片(图片和文本只能指定一个)
command点击时执行的命令
def click_event1():
    print("点击了按钮")

root = tkinter.Tk()
img = Image.open("image/cona.jpg")
img_tk = ImageTk.PhotoImage(img)
label = tkinter.Label(root, text="下面是一个button").pack()
# 创建一个button
button = tkinter.Button(root, image=img_tk, command=click_event1).pack()
root.mainloop()

CheckButton

CheckButton用于实现复选框

属性说明
text显示的文本
variable用于存储该按钮选中状态的变量
command点击(选中/取消选中)该选择框时执行的命令
def click_event2():
    print("Checkbutton state is %s"%(str(v.get())))

root = tk.Tk()
v = tk.IntVar()
b = tk.Checkbutton(root, text="点我啊", variable=v, command=click_event2)
b.pack()

root.mainloop()

CheckButton有如下常用方法

方法描述
deselect()清除单选按钮的状态
invoke()可以调用此方法来获得与用户单击单选按钮以更改其状态时发生的操作相同的操作
select()设置单选按钮为选中。
toggle()反选。当前被选中,则调用之后变为未选中,反之则为选中。

RatioButton

RationButton用于实现单选框。RatioButton通常是多个一组来使用,通过给多个RatioButtonvariable属性指定相同的对象来将这些RatioButton设置为同一组。

属性说明
text显示的文本
variable同一组的单选框设置相同的variable对象,variable对象中存储被选中的Radiobutton对应的value值
value该单选框对应的值,当选中该单选框时,variable绑定的变量将被设置为该值
command点击该选择框时执行的函数(已经选中后再次点击也会触发该函数)
def click_event3():
   selection = "You selected the option " + str(var.get())
   print(selection)

root = tkinter.Tk()

#创建整型变量,用于绑定,相同的整型变量是为同一组
var = tkinter.IntVar()

tkinter.Radiobutton(root, text="男", variable=var, value=11,command=click_event3).pack( anchor = tkinter.W )
tkinter.Radiobutton(root, text="女",variable=var,value=22,command=click_event3).pack( anchor = tkinter.W )
tkinter.Radiobutton(root, text="保密", variable=var, value=33,command=click_event3).pack( anchor = tkinter.W)

root.mainloop()

Entry

Entry是一个单行文本框,用于接收用户输入单行文本、密码等。通过show属性可以指定显示的字符,例如对于密码输入框设置show = *。通过textvariable设置StringVar对象可以设置该Entry中存储的内容, 后续可以通过指定的StringVar对象来获取和改变Entry中的值, 也可以通过Entry.get()方法来获取Entry中保存的值。

属性说明
show指定输入字符后在文本框中显示的字符(主要用于遮挡输入内容)
textvariable指定一个StringVar对象来设置该Entry中存储的内容
def show_input():
    print("用户名:" + var.get())
    print("密码:" + password_entry.get())

root = tkinter.Tk()

frame1 = tkinter.Frame(root)
var = tkinter.StringVar()
var.set("默认值")
tkinter.Label(frame1, text="用户名").pack(side="left")
tkinter.Entry(frame1, textvariable=var).pack(side="right")
frame1.pack()

frame2 = tkinter.Frame(root)
tkinter.Label(frame2, text="密码").pack(side="left")
password_entry = tkinter.Entry(frame2, show="*")
password_entry.pack()
frame2.pack()

tkinter.Button(text="按钮", command=show_input).pack()
root.mainloop()
方法描述
get()返回当前组件的字符串

Scale

Scale是一个用于选择范围值的滑块控件

属性说明
orient滚动条方向,可以是水平(tk.HORIZONTAL)或者垂直(tk.VERTICAL)
variable指定存储该控件对应数值的IntVar对象,后续使用该对象可以获取Scale控件中设置的值
length滑块长度(单位为像素)
from_最小值(from是关键字,所以在from后加了下划线)
to最大值
tickinterval设置刻度值(设置该属性将在滑块旁边显示刻度值)
def get_value():
    print("滑块值: " + str(v.get()))

root = tkinter.Tk()
v = tkinter.IntVar()
tkinter.Scale(root, orient=tkinter.HORIZONTAL, variable=v, from_=0, to=200, tickinterval=50, length=200).pack()
tkinter.Button(root, text="获取滑块值", command=get_value).pack()
root.mainloop()

Text

Text用于输入或者显示多行文本

属性说明
xscrollcommand该属性用于控制水平滚动条,将该属性设置为Scrollbar组件的set方法可以启用Text组件的水平方向滚动功能
yscrollcommand该属性用于控制垂直滚动条,将该属性设置为Scrollbar组件的set方法可以启用Text组件的垂直方向滚动功能
wrap该属性控制过长的行被分割为多行的方式,
设置为tk.CHAR则以字符为单位进行分割(即可能在任何字符断开成两行)
设置为tk.WORD则以单词为单位进行分割
设置为tk.NONE则不进行分割,通过提供水平滚动条查看超过窗口长度的行。

常用方法

方法说明
insert(index, chars)将chars插入到index之前
delete(index1, index2)删除index1和index2之间的字符(包括index1和index2的位置)

index的表示方式

  1. <line>.<column>

    通过指定行列来表示index,例如1.2表示第一行第二列的字符。注意行索引从1开始,列索引从0开始

  2. <line>.end

    可以使用end代替表示列的数字来表示最后一列之后的位置

  3. tk.INSERT

    光标位置

  4. tk.CURRENT

    最接近鼠标指针的位置

data = '''床前明月光,疑是地上霜。
举头望明月,低头思故乡。
'''

# 清空Text
def clear():
    text_area.delete("1.0", tkinter.END)

root = tkinter.Tk()

# 创建滚动条
y_bar = tkinter.Scrollbar(root, orient=tkinter.VERTICAL)
y_bar.pack(side=tkinter.RIGHT, fill=tkinter.Y)
x_bar = tkinter.Scrollbar(root, orient=tkinter.HORIZONTAL)
x_bar.pack(side=tkinter.BOTTOM, fill=tkinter.X)

# 创建Text组件
text_area = tkinter.Text(root,  wrap=tkinter.NONE)
# 设置滚动条的command属性为Text的xview和yview方法才能通过拖动滚动条来控制Text显示区域(滚动条控制Text),
# 仅设置上述xscrollcommand和yscrollcommand只能让,Text的滚动位置和滚动条单向绑定(即Text能控制滚动条,滚动
# 条无法控制Text)
y_bar["command"] = text_area.yview
x_bar["command"] = text_area.xview

text_area.pack()

# 插入文本内容
text_area.insert(tkinter.INSERT, data)
text_area.insert('4.0', "文本")

tkinter.Button(root, text="清空", command=clear).pack()

root.mainloop()

设置和获取控件的值

上边的一些控件中已经使用了一些*Var对象,例如StringVar, IntVar这些对象可以用于读取和设置控件的值。

注意,这些变量必须在创建根窗口之后才能进行创建,即这些变量需要在如下语句后才能创建和使用

root = tk.Tk()

tkinter提供了四种类型的变量对象,分别为

  1. 字符串型

    s = tk.StringVar()
    
  2. 布尔型

    b = tk.BooleanVar()
    
  3. 整型

    i = tk.IntVar()
    
  4. 浮点型

    d = tk.DoubleVar()
    

通过设置各个控件的属性可以将变量对象和控件绑定,从而实现读取(用户改变控件的值)和控制(程序改变控件的值)控件的值。变量对象通过以下get()set()方法进行读写。

方法说明
get()读取变量对象中的值
set()更新变量对象中的值(同时更新其绑定的控件显示的内容)
控件绑定属性
Entrytextvariable
Checkbuttonvariable
Radiobuttonvariable
Scalevariable
def check():
    print("string: %s\n"
    "bool: %s\n"
    "int: %d\n"
    "double: %.2f"%(s.get(), str(b.get()), i.get(), d.get()))
# 首先创建根窗口
root = tk.Tk()

# 之后才能创建变量对象
s = tk.StringVar()
b = tk.BooleanVar()
i = tk.IntVar()
d = tk.DoubleVar()

# 与控件绑定
tk.Entry(root, textvariable=s).pack()
tk.Checkbutton(root, text="选我", variable=b).pack()
# 使用Radiobutton必须通过value属性设置其代表的值
tk.Radiobutton(root, text="点我", value = 1, variable=i).pack()
tk.Scale(root, label="音量", variable=d).pack()

tk.Button(root, text="查看控件值", command=check).pack()
root.mainloop()
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值