python tkinter text加滑块 tkinter窗口设置滚动条

admin2024-06-01  11

tkinter学习笔记1

tkinterpython自带的标准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()
  1. 布尔型
b = tk.BooleanVar()
  1. 整型
i = tk.IntVar()
  1. 浮点型
d = tk.DoubleVar()

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

方法

说明

get()

读取变量对象中的值

set()

更新变量对象中的值(同时更新其绑定的控件显示的内容)

控件

绑定属性

Entry

textvariable

Checkbutton

variable

Radiobutton

variable

Scale

variable

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()


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明原文出处。如若内容造成侵权/违法违规/事实不符,请联系SD编程学习网:675289112@qq.com进行投诉反馈,一经查实,立即删除!