tkinter模块

2023-11-02

thinker模块

第一个thinker程序

#导入thinker模块
import tkinter
#创建Tk类的实例,本质是显示窗口
window=tkinter.Tk()
#设置窗口背景为蓝色
window["background"]="blue"
#设置屏幕高度和宽度
h=300
w=500
#获取屏幕信息
wi=window.winfo_screen()
print(wi)
#获取屏幕高度
wh=window.winfo_screenheight()
#获取屏幕宽度
ws=window.winfo_screenwidth()
#根据屏幕宽度和窗口宽度计算让窗口水平居中的x,y值(tkinter模块中没有让窗口居中的API所以需要你的聪明才智的)
x=(ws-w)/2
y=(wh-h)/2
#设置窗口标题
window.title("the first tkinter app")
#设置窗口的尺寸和位置(需要一个字符串描述格式为:width X height+x+y)
window.geometry("%dx%d+%d+%d" %(w,h,x,y))
#创建一个label对象,并将label放在窗口上,文本显示“hello world” (将label控件传入window类窗口)
label=tkinter.Label(window,text="hello world")
#使用pack布局使其居中
label.pack()
#进行事件循环  ********最重要**********
tkinter.mainloop()

显示结果如图:

布局

pack布局

1.控件水平居中

#创建一个label对象,并将label放在窗口上,文本显示“hello world”
label=tkinter.Label(window,text="hello world")
#创建一个label对象,并将label放在窗口上,文本显示“mzy”背景颜色为红色字体颜色为白色
tkinter.Label(window,text="mzy",bg="red",fg="white").pack()
#使用pack布局使其居中
label.pack()

在这里插入图片描述

##这个pack布局是有顺序的虽然有着“hello world”的label在“mzy”前面但是由于其pack在“mzy”后面所以在“hello world”label的后面##

##如果删去pack这一个布局则label标签不显示##

#创建一个label对象,并将label放在窗口上,文本显示“hello world”
label=tkinter.Label(window,text="hello world")
#创建一个label对象,并将label放在窗口上,文本显示“mzy”背景颜色为红色字体颜色为白色
tkinter.Label(window,text="mzy",bg="red",fg="white").pack()

如图:

水平填充:

fill参数

tkinter.Label(window,text="mzy",bg="red",fg="white").pack(fill="x")

设置外边距:

设置水平外边距

padx参数:

tkinter.Label(window,text="mzy",bg="red",fg="white").pack(fill="x",padx=10)

设置垂直外边距

tkinter.Label(window,text="mzy",bg="red",fg="white").pack(fill="x",padx=10,pady=10)

设置内边距:

ipadx和ipady参数

tkinter.Label(window,text="mzy",bg="red",fg="white").pack(fill="x",padx=10,pady=10,ipady=20,ipadx=10)

水平排列:

side参数(top, bottom, left, or right)

tkinter.Label(window,text="mzy",bg="red",fg="white").pack(fill="x",side="left",padx=10)
tkinter.Label(window,text="mzy1",bg="red",fg="white").pack(fill="x",side="left",padx=10)
tkinter.Label(window,text="mzy2",bg="red",fg="white").pack(fill="x",side="left",padx=10)

#left,right,top,bottom参数可以混用

tkinter.Label(window,text="mzy",bg="red",fg="white").pack(fill="x",side="left",padx=10)
tkinter.Label(window,text="mzy1",bg="red",fg="white").pack(fill="x",side="right",padx=10)
tkinter.Label(window,text="mzy2",bg="red",fg="white").pack(fill="x",side="bottom",padx=10)
tkinter.Label(window,text="mzy2",bg="red",fg="white").pack(fill="x",side="top",padx=10)

place布局

可以指定控件的位置,尺寸

list=["mzy","lwj","lfl","lhb","lpl"]
for i in range(5):
    tkinter.Label(window, text=list[i], bg="red", fg="white").place(x=(h-120)/2,y=30+i*30,width=120,height=25)

###一个神奇的取色操作###

    #随机产生背景色的三原色
    ct=[random.randrange(256) for x in range(3)]
    #取亮度
    brightness=int(round(0.299*ct[0]+0.587*ct[1]+0.114*ct[2]))
    #得到背景色的十六进制形式
    ct_hex="%02x%02x%02x" %tuple(ct)
    bg_colour="#"+"".join()

##这里可以加一个判断亮度小于120的可以用白色,大于120的用黑色##(效果很好)

 tkinter.Label(window, text=list[i], bg=bg_colour, fg="white" if brightness<120 else "black").place(x=(h-120)/2,y=30+i*30,width=120,height=25)

grid布局

将控件作为单元格放到一个表格里面,在表格里面进行操作

for i in range(6):
    #随机产生背景色的三原色
    ct=[random.randrange(256) for x in range(3)]
    #取亮度
    brightness=int(round(0.299*ct[0]+0.587*ct[1]+0.114*ct[2]))
    #得到背景色的十六进制形式
    ct_hex="%02x%02x%02x" %tuple(ct)
    bg_colour="#"+ct_hex
    tkinter.Label(window, text=list[i], bg=bg_colour, fg="white" if brightness<120 else "black").grid(row=int(i/2),column=columns)
    if columns/3==0:
        columns+=1
    else:
        columns=0

控件

标签控件和按钮控件

labelAPI

#文本是“hello world” 字体颜色为blue 背景颜色为绿色 宽为20 高为2 字体为"Arial"字号为12
Label(window,text="hello world",fg="blue",bg="green",width=20,height=2,font=("Arial",12))

##获取label文本内容##

#获取label文本的值(将label控件与一个变量绑定)
var=tkinter.StringVar()
var.set("hello world")
tkinter.Label(window,textvariable=var,bg="red",fg="white").pack(fill="x",side="left",padx=10)
print(var.get())

ButtonAPI

BUTTON和LABEL的使用几乎一样 只是button控件需要一个处理点击事件的回调函数 需要一个commad关键参数指定

#获取label文本的值(将label控件与一个变量绑定)
var=tkinter.StringVar()
#初始化变量
var.set("hello world")
#创建label控件,并且与var绑定
tkinter.Label(window,textvariable=var,bg="red",fg="white").pack(fill="x",padx=10)
print(var.get())
#按钮的回调函数
hiton=var.get()
def hitme():
    #把onHit设置成全局变量
    global hiton
    hiton = var.get()
    if hiton=="hello world":
        var.set("good bye")
    else:
        var.set("hello world")
button=tkinter.Button(window,text="good bye",command=hitme).pack(fill="x",padx=10)

#点击后:

Entry控件和text控件

entry是单行输入文本的控件

text是多行输入文本的控件

所谓的文本框Entry,通常是指单行的文本框,在GUI程序设计中,这是用于输入的最基本控件,我们可以使用它输入单行字符串,如果所输入的字符串长度大于文本框的宽度,所输入的文字会自动隐藏,造成部分内容无法显示,碰到这种状况时可以使用箭头键移动鼠标光标到看不到的区域。
文本框限定的是单行文字,如果想要处理多行文字,需要使用控件中的text

它的语法格式:

Entry(父对象, options, ...)
1
  • 第一个参数:父对象,表示这个文本框将建立在哪一个窗口内
  • 第二个参数:options,参数如下
参数 含义
borderwidth 边界宽度 默认是两个像素
bd 边界宽度 默认是两个像素
background 背景色彩
bg 背景色彩
command 当用户更改内容时,会自动执行此函数
cursor 当鼠标光标移至按钮上时的形状
exportselection 如果执行选取时,所选取的字符串会自动输出至剪贴板 如果想要避免,可以设置exportselection=0
foreground 前景色彩
fg 前景色彩
font 字形
height 高,单位是字符高
highlightbackground 当功能按钮获取焦点时的背景颜色
highlightcolor 当工人按钮取得焦点时的颜色
justify 当有多行文字时,最后一行文字的对齐方式
relief 可由此控制文字外框 默认是relief=FLAT
selectbackground 被选取字符串的背景色彩
selectborderwidth 选取字符串时的边界宽度 预设是1
selectfroeground 被选取字符串的前景色彩
show 显示输入字符 例如,show=’*'表示显示星号,常用于输入密码字段
state 输入状态 默认是NORMAL表示可以输入,DISABLE则表示无法输入
textvariable 文字变量
width 宽,单位是字符宽
xscrollcommand 在X轴使用滚动条

Entry的基本应用

例子:建立标签和文本框,输入姓名和地址

import tkinter

root = tkinter.Tk()
label1 = tkinter.Label(root, text="姓名 :")
label2 = tkinter.Label(root, text="住址 :")
label1.grid(row=0)
label2.grid(row=1)

entry1 = tkinter.Entry(root)
entry2 = tkinter.Entry(root)
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)

root.mainloop()
1234567891011121314

运行结果:
在这里插入图片描述

设置grid(row=0),在没有设置column=x的情况下,系统自动设置column=0

使用show 参数隐藏输入的字符

其实Entry控件具有可以使用show参数设置隐藏输入字符的特性,所以也常被应用在用于输入密码的时候

例子:密码的输入,用*隐藏

import tkinter

root = tkinter.Tk()
label1 = tkinter.Label(root, text="账号 :")
label2 = tkinter.Label(root, text="密码 :")
label1.grid(row=0)
label2.grid(row=1)

entry1 = tkinter.Entry(root)
entry2 = tkinter.Entry(root, show="*")
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)

root.mainloop()
1234567891011121314

运行结果:
在这里插入图片描述

Entry 的 get 方法

Entry 有一个get()方法,可以利用这个方法来获取目前Entry 的字符串内容

import tkinter

def getValue():
    print("账号为{}, 密码为{}".format(entry1.get(), entry2.get()))

root = tkinter.Tk()
label1 = tkinter.Label(root, text="账号 :")
label2 = tkinter.Label(root, text="密码 :")
label1.grid(row=0)
label2.grid(row=1)

entry1 = tkinter.Entry(root)
entry2 = tkinter.Entry(root, show="*")
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)

buttonLogin = tkinter.Button(root, text="登录", command=getValue)
buttonExit = tkinter.Button(root, text="退出", command=root.quit)
buttonLogin.grid(row=2, column=0, sticky=tkinter.W, padx=20)
buttonExit.grid(row=2, column=1)

root.mainloop()
12345678910111213141516171819202122

运行结果:
在这里插入图片描述
我们输入账号密码,点击登录

账号为123456, 密码为132456
1

控制台就出现了我们所需要的的信息

Entry 的 insert() 方法

在设计GUI程序时,常常需要在建立Entry的文本框内默认建立输入文字,在Widget控件中可以使用insert(index, s)方法插入字符串
其中s是所插入的字符串,字符串会插在index位置

例子:建立默认文字内容

import tkinter

def getValue():
    print("账号为{}, 密码为{}".format(entry1.get(), entry2.get()))

root = tkinter.Tk()
label1 = tkinter.Label(root, text="账号 :")
label2 = tkinter.Label(root, text="密码 :")
label1.grid(row=0)
label2.grid(row=1)

entry1 = tkinter.Entry(root)
entry2 = tkinter.Entry(root, show="*")
# 默认账号内容
entry1.insert(0, "123456")
# 默认密码内容
entry2.insert(0, "123456")
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)

buttonLogin = tkinter.Button(root, text="登录", command=getValue)
buttonExit = tkinter.Button(root, text="退出", command=root.quit)
buttonLogin.grid(row=2, column=0, sticky=tkinter.W, padx=20)
buttonExit.grid(row=2, column=1)

root.mainloop()
1234567891011121314151617181920212223242526

运行结果:
在这里插入图片描述

Entry 的 delete() 方法

tkinter模块的应用中可以使用delete(first, last=None)方法删除Entry内的从第first字符到last-1字符间的字符串,如果要删除整个字符串可以使用delete(0, END)

如果删除倒数第一个,我们可以用len()方法判断长度,然后长度减一就行

例子:单击删除按钮清空文本框内容

import tkinter

def getValue():
    print("账号为{}, 密码为{}".format(entry1.get(), entry2.get()))

# 删除的方法
def deleteValue():
    entry1.delete(0, tkinter.END)
    entry2.delete(0, tkinter.END)

root = tkinter.Tk()
label1 = tkinter.Label(root, text="账号 :")
label2 = tkinter.Label(root, text="密码 :")
label1.grid(row=0)
label2.grid(row=1)

entry1 = tkinter.Entry(root)
entry2 = tkinter.Entry(root, show="*")
# 默认账号内容
entry1.insert(0, "123456")
# 默认密码内容
entry2.insert(0, "123456")
entry1.grid(row=0, column=1)
entry2.grid(row=1, column=1)

buttonLogin = tkinter.Button(root, text="登录", command=getValue)
# 调用删除的方法
buttonExit = tkinter.Button(root, text="删除", command=deleteValue)
buttonLogin.grid(row=2, column=0, sticky=tkinter.W, padx=20)
buttonExit.grid(row=2, column=1)

root.mainloop()
1234567891011121314151617181920212223242526272829303132

运行结果:
在这里插入图片描述
例子:删除最后一个

def deleteValue():
    len_entry = len(entry1.get())
    entry1.delete(len_entry - 1)
    entry2.delete(0, tkinter.END)
1234

运行结果:
在这里插入图片描述
如果只有一个参数的话,那这个参数将是first,如不是lastlen_entry - 1相当于是从到底第一个开始删除,一直到末尾

计算数学表达式使用 eval()

Python`有一个非常好用的计算数学表达式的函数`eval

该函数可以直接传回此数学表达式的计算结果,它的语法格式:

"""expression为字符串"""
result = eval(expression)
12

例子

import tkinter


def getValue():
    try:
        value = eval(entry.get())
        label2.configure(text="计算结果为:" + str(value))
    except:
        pass


root = tkinter.Tk()

label = tkinter.Label(root, text="请输入数学表达式:")
label.pack(anchor=tkinter.W)

entry = tkinter.Entry(root)
entry.pack(pady=5)

label2 = tkinter.Label(root)
label2.pack()
button = tkinter.Button(root, text="计算", command=getValue)
button.pack(pady=5)

root.mainloop()
12345678910111213141516171819202122232425

运行结果:
在这里插入图片描述

这里引用了一个博客

Tkinter在界面中实现控件自动跟随,可以通过获取控件的两个属性:

  • 一个是控件的开始位置:place_info()
  • 另一个是控件占用的位置:winfo_reqwidth()

同水平位置的控件可以通过这两个值计算出自动贴近布局的x位置。

做了一个小的登录界面

connect=pymysql.connect(
    host='127.0.0.1',
    port=3306,
    user='root',
    #这里添加数据库名
    database="guest_inf",
    password="********",
    charset="utf8"            #注意这里是utf8不是utf-8
)
entryVar1=tkinter.StringVar()
def callback():
    entryVar1.set("hello world")
    pass
#要求传入的3个参数 在本例用不到这三个参数,但必须要指定,否则会抛出异常
entryVar1.trace("w",lambda a,b,c:callback())
uid=tkinter.Entry(window,textvariable="username")
uid.pack(padx=10,pady=10)
print(uid.winfo_reqwidth(),uid.winfo_reqheight())
tkinter.Label(window,text="uid:").place(x=144-(w-2*40)/2,y=15,height=10,width=20)
tkinter.Label(window,text="psw:").place(x=144-(w-2*35)/2,y=50,height=20,width=30)
psw=tkinter.Entry(window,textvariable="password",show="*")
psw.pack(padx=10,pady=10)
def POST():
    uids=uid.get()
    psws=psw.get()
    print(uids,psws)
    cursor=connect.cursor() #产生游标对象
    sql="insert into guest_list(username,password) values(%s,%s);"
    cursor.execute(sql,(uids,psws))
    connect.commit()
    uid.delete(0,tkinter.END)
    psw.delete(0,tkinter.END)
tkinter.Button(window,text="return health",command=POST).pack(padx=100)
text控件

##由于text只支持少数几种图像格式(gif,bmp等),不支持jpg,png格式##

from PIL import Image,ImageTk
#装载pic.png
pic=Image.open("pic.png")
photos=ImageTk.PhotoImage(pic)
#在text控件的结尾插入图像
text.image_create(tkinter.END,image=photos)
#进行字体,字号等设置 ,需要big引用
text.tag_configure("big",font("Arial",25,"bold"))
#在text控件结尾插入文本,并使用big指定的字体属性
text.insert(tkinter.END,"mzy","big")
Radiobutton控件(单选按钮控件)
#该变量同时与3个radiobutton控件绑定
var=tkinter.StringVar()
def printselection():
    print("1")
    pass
r1=tkinter.Radiobutton(window,text="A",variable=var,value="A",command=printselection).pack()
r2=tkinter.Radiobutton(window,text="B",variable=var,value="B",command=printselection).pack()
r3=tkinter.Radiobutton(window,text="C",variable=var,value="C",command=printselection).pack()
r4=tkinter.Radiobutton(window,text="D",variable=var,value="D",command=printselection).pack()

参数

*Checkbutton(master=None, *options) (class)

master – 父组件

**options – 组件选项,下方表格详细列举了各个选项的具体含义和用法:

选项 含义
activebackground 1. 设置当 Checkbutton 处于活动状态(通过 state 选项设置状态)的背景色 2. 默认值由系统指定
activeforeground 1. 设置当 Checkbutton 处于活动状态(通过 state 选项设置状态)的前景色 2. 默认值由系统指定
anchor 1. 控制文本(或图像)在 Checkbutton 中显示的位置 2. “n”, “ne”, “e”, “se”, “s”, “sw”, “w”, “nw”, 或者 “center” 来定位(ewsn 代表东西南北,上北下南左西右东) 3. 默认值是 “center”
background 1. 设置背景颜色 2. 默认值由系统指定
bg 跟 background 一样
bitmap 1. 指定显示到 Checkbutton 上的位图 2. 如果指定了 image 选项,则该选项被忽略
borderwidth 1. 指定 Checkbutton 的边框宽度 2. 默认值由系统指定,通常是 1 或 2 像素
bd 跟 borderwidth 一样
command 1. 指定于该按钮相关联的函数或方法 2. 当按钮被按下时由 Tkinter 自动调用对应的函数或方法 3. 如果不设置此选项,那么该按钮被按下后啥事儿也不会发生
compound 1. 控制 Checkbutton 中文本和图像的混合模式 2. 默认情况下,如果有指定位图或图片,则不显示文本 3. 如果该选项设置为 “center”,文本显示在图像上(文本重叠图像) 4. 如果该选项设置为 “bottom”,“left”,“right” 或 “top”,那么图像显示在文本的旁边(如 “bottom”,则图像在文本的下方) 5. 默认值是 NONE
cursor 1. 指定当鼠标在 Checkbutton 上飘过的时候的鼠标样式 2. 默认值由系统指定
disabledforeground 1. 指定当 Checkbutton 不可用的时候前景色的颜色 2. 默认值由系统指定
font 1. 指定 Checkbutton 中文本的字体 2. 一个 Checkbutton 只能设置一种字体 3. 默认值由系统指定
foreground 1. 设置 Checkbutton 的文本和位图的颜色 2. 默认值由系统指定
fg 跟 foreground 一样
height 1. 设置 Checkbutton 的高度 2. 如果 Checkbutton 显示的是文本,那么单位是文本单元 3. 如果 Checkbutton 显示的是图像,那么单位是像素(或屏幕单元) 4. 如果设置为 0 或者干脆不设置,那么会自动根据 Checkbutton 的内容计算出高度
highlightbackground 1. 指定当 Checkbutton 没有获得焦点的时候高亮边框的颜色 2. 默认值由系统指定,通常是标准背景颜色
highlightcolor 1. 指定当 Checkbutton 获得焦点的时候高亮边框的颜色 2. 默认值由系统指定
highlightthickness 1. 指定高亮边框的宽度 2. 默认值是 1
image 1. 指定 Checkbutton 显示的图片 2. 该值应该是 PhotoImage,BitmapImage,或者能兼容的对象 3. 该选项优先于 text 和 bitmap 选项
indicatoron 1. 指定前边作为选择的小方块是否绘制 2. 默认是绘制的 3. 该选项会影响到按钮的样式,如果设置为 False,则点击后该按钮变成 “sunken”(凹陷),再次点击变为 “raised”(凸起)
justify 1. 定义如何对齐多行文本 2. 使用 “left”,“right” 或 “center” 3. 注意,文本的位置取决于 anchor 选项 4. 默认值是 “center”
offvalue 1. 默认情况下,variable 选项设置为 1 表示选中状态,反之设置为 0 2. 设置 offvalue 的值可以自定义未选中状态的值(详见上方用法举例)
onvalue 1. 默认情况下,variable 选项设置为 1 表示选中状态,反之设置为 0 2. 设置 onvalue 的值可以自定义选中状态的值(详见上方用法举例)
padx 1. 指定 Checkbutton 水平方向上的额外间距(内容和边框间) 2. 默认值是 1
pady 1. 指定 Checkbutton 垂直方向上的额外间距(内容和边框间) 2. 默认值是 1
relief 1. 指定边框样式 2. 该值通常是 “flat”,除非你设置 indicatoron 选项为 False 3. 如果 indicatoron 为 False,你还可以设置 “sunken”,“raised”,“groove” 或 “ridge”
selectcolor 1. 选择框的颜色(就是打勾勾的那个正方形小框框) 2. 默认值由系统指定
selectimage 1. 设置当 Checkbutton 为选中状态的时候显示的图片 2. 如果没有指定 image 选项,该选项被忽略
state 1. 指定 Checkbutton 的状态 2. 默认值是 “normal” 3. 另外你还可以设置 “active” 或 “disabled”
takefocus 1. 如果是 True,该组件接受输入焦点(用户可以通过 tab 键将焦点转移上来) 2. 默认值是 False
text 1. 指定 Checkbutton 显示的文本 2. 文本可以包含换行符 3. 如果设置了 bitmap 或 image 选项,该选项则被忽略
textvariable 1. Checkbutton 显示 Tkinter 变量(通常是一个 StringVar 变量)的内容 2. 如果变量被修改,Checkbutton 的文本会自动更新
underline 1. 跟 text 选项一起使用,用于指定哪一个字符画下划线(例如用于表示键盘快捷键) 2. 默认值是 -1 3. 例如设置为 1,则说明在 Checkbutton 的第 2 个字符处画下划线
variable 1. 将 Checkbutton 跟一个 Tkinter 变量关联 2. 当按钮按下时,该变量在 onvalue 和 offvalue 之间切换 3. 这个切换的过程是完全自动的
width 1. 设置 Checkbutton 的宽度 2. 如果 Checkbutton 显示的是文本,那么单位是文本单元 3. 如果 Checkbutton 显示的是图像,那么单位是像素(或屏幕单元) 4. 如果设置为 0 或者干脆不设置,那么会自动根据 Checkbutton 的内容计算出宽度
wraplength 1. 决定 Checkbutton 的文本应该被分成多少行 2. 该选项指定每行的长度,单位是屏幕单元 3. 默认值是 0

方法

deselect()

– 取消 Checkbutton 组件的选中状态,也就是设置 variable 为 offvalue。

flash()

– 刷新 Checkbutton 组件,该方法将重绘 Checkbutton 组件若干次(在"active" 和 “normal” 状态间切换)。

invoke()

– 调用 Checkbutton 中 command 选项指定的函数或方法,并返回函数的返回值。
– 如果 Checkbutton 的state(状态)"disabled"是 (不可用)或没有指定 command 选项,则该方法无效。

select()

– 将 Checkbutton 组件设置为选中状态,也就是设置 variable 为 onvalue。

toggle()

– 切换 Checkbutton 组件的状态(选中 -> 未选中 / 未选中 -> 选中)。

#里面的文本为”text“绑定var,onvalue(选中的值为1)offvalue(未选择的值为0),选择调用f函数
tkinter.CheckButton(window,text="mzy",variable=var,onvalue=1,offvalue=0,command=f)
scale控件

18.4.5_Scale控件
ocale是一个滑块组件,支持水平滑动和垂直滑动。通过滑块的滑动可以在有限的范围内进行数值的设置。Scale控件需要设置的属性比较多(通过Scale类的构造方法设置),下面是Scale控件需要设置的主要属性。
. label:在Scale控件旁边显示的标签文本,水平滑杆控件在上方显示,垂直滑杆控件在右侧显示。
o length: Scale控件的长度。
. from_:滑块能设置的最小值,也是Scale控件的起始值。to︰滑块能设置的最大值,也是Scale控件的结束值。. tickinterval: scale控件刻度的步长。
. resolution:滑块能滑动的步长。
command:指定滑动事件对应的回调函数。
. orient:设置Scale控件类型,HORIZONTAL表示水平Scale控件,VERTICAL表示垂直Scale控件。

用法
当你创建一个 Listbox 组件的时候,它是空的,所以第一件要做的事就是添加一行或多行文本进去。我们使用 insert() 方法添加文本,该方法有两个参数:第一个参数是插入的索引号,第二个参数是插入的字符串。索引号通常是项目的序号(0 是列表中第一项的序号)。

不过你也可以使用一些特殊的索引号:比如 ACTIVE 表示选中的项目(如果 Listbox 允许多选,那么它表示最后一个被选中的项目);又如 END 表示 Listbox 的最后一行,所以当要插入一个项目到列表时可以使用 END:

import tkinter as tk

master = tk.Tk()

listbox控件

创建一个空列表

theLB = tk.Listbox(master)
theLB.pack()

往列表里添加数据

for item in [“鸡蛋”, “鸭蛋”, “鹅蛋”, “李狗蛋”]:
theLB.insert(“end”, item)

master.mainloop()

使用 delete() 方法删除列表中的项目,最常用的操作是删除列表中的所有项目(更新列表时你需要做的事儿):

listbox.delete(0, “end”)
listbox.insert(“end”, newitem) #插入新的项目
当然你也可以删除指定的项目,下边例子使用一个独立按钮来删除 ACTIVE 状态的项目:

import tkinter as tk

master = tk.Tk()

创建一个空列表

theLB = tk.Listbox(master)
theLB.pack()

往列表里添加数据

for item in [“鸡蛋”, “鸭蛋”, “鹅蛋”, “李狗蛋”]:
theLB.insert(“end”, item)

theButton = tk.Button(master, text=“删除”, command=lambda x=theLB: x.delete(“active”))
theButton.pack()

master.mainloop()

Listbox 组件根据 selectmode 选项提供了四种不同的选择模式:“single”(单选)、“browse”(也是单选,但拖动鼠标或通过方向键可以直接改变选项)、“multiple”(多选)和 “extended”(也是多选,但需要同时按住 Shift 键或 Ctrl 键或拖拽鼠标实现)。默认是 “browse”。

参数
Listbox(master=None, **options) (class)

master – 父组件

**options – 组件选项,下方表格详细列举了各个选项的具体含义和用法:

选项 含义
background 1. 设置背景颜色

  1. 默认值由系统指定
    bg 跟 background 一样
    borderwidth 1. 指定 Listbox 的边框宽度
  2. 默认值由系统指定,通常是 2 像素
    bd 跟 borderwidth 一样
    cursor 1. 指定当鼠标在 Listbox 上飘过的时候的鼠标样式
  3. 默认值由系统指定
    exportselection 1. 指定选中的项目文本是否可以被复制到剪贴板
  4. 默认值是 True
  5. 可以修改为 False 表示不允许复制项目文本
    font 1. 指定 Listbox 中文本的字体
  6. 默认值由系统指定
    foreground 1. 设置 Listbox 的文本颜色
  7. 默认值由系统指定
    fg 跟 foreground 一样
    height 1. 设置 Listbox 显示的行数(不是像素)
  8. 默认值是 10
    highlightbackground 1. 指定当 Listbox 没有获得焦点的时候高亮边框的颜色
  9. 默认值由系统指定,通常是标准背景颜色
    highlightcolor 1. 指定当 Listbox 获得焦点的时候高亮边框的颜色
  10. 默认值由系统指定
    highlightthickness 1. 指定高亮边框的宽度
  11. 默认值是 1
    listvariable 1. 指向一个 StringVar 类型的变量,该变量存放 Listbox 中所有的项目
  12. 在 StringVar 类型的变量中,用空格分隔每个项目,例如 var.set(“鸡蛋 鸭蛋 鹅蛋 李狗蛋”)
    relief 1. 指定边框样式
  13. 默认值是 “sunken”
    selectbackground 1. 指定当某个项目被选中的时候背景颜色
  14. 默认值由系统指定
    selectborderwidth 1. 指定当某个项目被选中的时候边框的宽度
  15. 默认是由 selectbackground 指定的颜色填充,没有边框
  16. 如果设置了此选项,Listbox 的每一项会相应变大,被选中项为 “raised” 样式
    selectforeground 1. 指定当某个项目被选中的时候文本颜色
  17. 默认值由系统指定
    selectmode 1. 决定选择的模式
  18. 四种不同的选择模式:“single”(单选)、“browse”(也是单选,但拖动鼠标或通过方向键可以直接改变选项)、“multiple”(多选)和 “extended”(也是多选,但需要同时按住 Shift 键或 Ctrl 键或拖拽鼠标实现)
  19. 默认是 “browse”
    setgrid 1. 指定一个布尔类型的值,决定是否启用网格控制
  20. 默认值是 False
    takefocus 1. 指定该组件是否接受输入焦点(用户可以通过 tab 键将焦点转移上来)
  21. 默认值是 True
    width 1. 设置 Listbox 的宽度(单位是文本单元)
  22. 文本单元是英文字母的平均宽度(所以如果该选项设置为 2,那么是无法容纳"ww"这两个宽度大于平均宽度的字母的)
  23. 默认值是 20
    xscrollcommand 1. 为 Listbox 组件添加一条水平滚动条
  24. 将此选项与 Scrollbar 组件相关联即可
    yscrollcommand 1. 为 Listbox 组件添加一条垂直滚动条
  25. 将此选项与 Scrollbar 组件相关联即可
    方法

activate(index)
– 将给定索引号对应的选项激活(在其文本下方画一条下划线)

bbox(index)
– 返回给定索引号对应的选项的边框
– 返回值是一个以像素为单位的 4 元祖表示边框:(xoffset, yoffset, width, height)
– xoffset 和 yoffset 表示距离左上角的偏移位置
– 返回的 width 是文本的实际宽度(像素为单位)
– 如果指向的选项是不可见的,那么返回值是 None

curselection()
– 返回一个元组,包含被选中的选项的序号(从 0 开始)
– 如果没有选中任何选项,返回一个空元组

delete(first, last=None)
– 删除参数 first 到 last 范围内(包含 first 和 last)的所有选项
– 如果忽略 last 参数,表示删除 first 参数指定的选项

get(first, last=None)
– 返回一个元组,包含参数 first 到 last 范围内(包含 first 和 last)的所有选项的文本
– 如果忽略 last 参数,表示返回 first 参数指定的选项的文本

index(index)
– 返回与 index 参数相应的选项的序号(例如 lb.index(“end”))

insert(index, *elements)
– 添加一个或多个项目到 Listbox 中
– 使用 lb.insert(“end”) 添加新选项到末尾

itemcget(index, option)
– 获得 index 参数指定的项目对应的选项(由 option 参数指定)

itemconfig(index, **options)
– 设置 index 参数指定的项目对应的选项(由可变参数 **option 指定)

nearest(y)
– 返回与给定参数 y 在垂直坐标上最接近的项目的序号

scan_dragto(x, y)
– 见下方 scan_mark(x, y)

scan_mark(x, y)
– 使用这种方式来实现 Listbox 内容的滚动
– 需要将鼠标按钮事件及当前鼠标位置绑定到 scan_mark(x, y) 方法,然后再将 事件及当前鼠标位置绑定到 scan_dragto(x, y) 方法,就可以实现 Listbox 在当前位置和 sacn_mack(x, y) 指定的位置 (x, y) 之间滚动

see(index)
– 调整列表框的位置,使得 index 参数指定的选项是可见的

select_anchor(index)
– 与 selection_anchor(index) 相同,见下方解释

select_clear(first, last=None)
– 与 selection_clear(first, last=None) 相同,见下方解释

select_includes(index)
– 与 selection_includes(index) 相同,见下方解释

select_set(first, last=None)
– 与 selection_set(first, last=None) 相同,见下方解释

selection_anchor(index)
– 在 index 参数的位置下一个锚点,此后你就可以通过特殊索引 “anchor” 访问

selection_clear(first, last=None)
– 取消参数 first 到 last 范围内(包含 first 和 last)选项的选中状态
– 如果忽略 last 参数,则只取消 first 参数指定选项的选中状态

selection_includes(index)
– 返回 index 参数指定的选项的选中状态
– 返回 1 表示选中,返回 0 表示未选中

selection_set(first, last=None)
– 设置参数 first 到 last 范围内(包含 first 和 last)选项为选中状态
– 如果忽略 last 参数,则只设置 first 参数指定选项为选中状态

size()
– 返回 Listbox 组件中选项的数量

xview(*args)
– 该方法用于在水平方向上滚动 Listbox 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现(具体操作参考:Scrollbar)
– 如果第一个参数是 “moveto”,则第二个参数表示滚动到指定的位置:0.0 表示最左端,1.0 表示最右端
–如果第一个参数是 “scroll”,则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 “units” 或 “pages”),例如:xview(“scroll”, 3, “pages”)表示向右滚动三行

xview_moveto(fraction)
– 跟 xview(“moveto”, fraction) 一样

xview_scroll(number, what)
– 跟 xview(“scroll”, number, what) 一样

yview(*args)
– 该方法用于在垂直方向上滚动 Listbox 组件的内容,一般通过绑定 Scollbar 组件的 command 选项来实现(具体操作参考:Scrollbar)
– 如果第一个参数是 “moveto”,则第二个参数表示滚动到指定的位置:0.0 表示最顶端,1.0 表示最底端
– 如果第一个参数是 “scroll”,则第二个参数表示滚动的数量,第三个参数表示滚动的单位(可以是 “units” 或 “pages”),例如:yview(“scroll”, 3, “pages”) 表示向下滚动三页

yview_moveto(fraction)
– 跟 yview(“moveto”, fraction) 一样

yview_scroll(number, what)
– 跟 yview(“scroll”, number, what) 一样
————————————————
版权声明:本文为CSDN博主「来自江南的你」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_41556318/article/details/85108351

向窗口添加菜单

label=tkinter.Label(window,width=20,bg="yellow")
label.pack()
#计数器变量
counter=0
def menuClick():
    global counter
    label.config(text="第"+str(counter)+"次点击")
    counter+=1
#创建跟目录
menubar=tkinter.Menu(window)
#创建“文件”菜单
filename=tkinter.Menu(menubar)
#将“文件”菜单项添加到根菜单上
menubar.add_cascade(label="文件",menu=filename)
#将“文件”菜单添加新的子菜单项,通过command关键字参数绑定菜单项点击回调函数
filename.add_command(label="新建",command=menuClick)
filename.add_command(label="打开",command=menuClick)
filename.add_command(label="保存",command=menuClick)
#添加一个分割条
filename.add_separator()
#添加“退出”菜单栏,并指定点击该菜单项调用系统回调函数
filename.add_command(label="退出",command=window.quit)
submenu=tkinter.Menu(filename)
#在“文件”菜单项下添加带子菜单项的“导入” 菜单项
filename.add_cascade(label="导入",menu=submenu)
submenu.add_command(label="导入文本文件",command=menuClick)
submenu.add_command(label="导入pdf文件",command=menuClick)
window.config(menu=menubar)
#进行事件循环  ********最重要**********
tkinter.mainloop()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2OysldtR-1614264639436)(C:\Users\mzy\AppData\Roaming\Typora\typora-user-images\image-20210225213121316.png)]

对话框

import tkinter.messagebox
def hit_me():
    #返回”ok”
    tkinter.messagebox.showinfo(title="信息对话框",message="这是我要的信息")
    tkinter.messagebox.showinfo(title="警告对话框", message="这是我要的信息")
    tkinter.messagebox.showinfo(title="错误对话框", message="这是我要的信息")
    tkinter.messagebox.showinfo(title="询问对话框", message="这是我要的信息")
    #返回“yes”或“no”
    print(tkinter.messagebox.askquestion(title="询问对话框",message="你要干什么?"))
    #返回“true”或“false”
    print(tkinter.messagebox.askyesno(title="yes/no",message="请给出你的选择"))
    print(tkinter.messagebox.askokcancel(title="ok/cancal",message="确定/取消"))
    #返回“true”或者“false”或者“none”
    print(tkinter.messagebox.askyesnocancel(title="yes/no/cancel",message="put your choice"))
tkinter.Button(window,text="hit me",command=hit_me).pack()
#进行事件循环  ********最重要**********
tkinter.mainloop()

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-GrJgzEz0-1614264639441)(C:\Users\mzy\AppData\Roaming\Typora\typora-user-images\image-20210225215307358.png)]

一个计算机器GUI

###########计算器的GUI##############
list=["7","8","9","+","4","5","6","-","1","2","3","*","0",".","%","="]
row=0
for i in list:
    tkinter.Button(window,text=i,bg="white",fg="black").grid(sticky ="NESW",ipadx=28,ipady=22,row=int(row/4),column=int(row%4))
    print(row/3,row%3)
    row+=1
##################################

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tkinter模块 的相关文章

随机推荐

  • 【项目经验】elementui--table表格自定义表头及bug

    一 思路 首先我们肯定得循环表头 我们原生js封装的表格的实现原理就是这样 其次我们要把自己循环的label显示出来 对应的prop也要和表格数据相对应 用div标签循环都会出现错误 div里面套column 大家不要踩坑 第一项会跑到最后
  • 23个可以免费学习编程的网站

    英文 https medium com javascript in plain english 22 ways to learn coding for free in 2021 87a9c171132c 翻译 web前端开发公众号 ID w
  • Vue2.0选中当前鼠标移入移除加样式

    本人写的小程序 功能还在完善中 欢迎扫一扫提出宝贵意见 效果如gif动态图所示 1 通过v for遍历数组 HTML代码 1
  • 基于亚博K210开发板——串口中断以及开启双核任务

    文章目录 开发板 实验目的 实验准备 硬件原理图 软件对应SDK 对应的头文件 uart h uart h接口函数 高速通用异步收发传输器 UARTHS 对应的头文件 uarths h uarths h接口函数 板级对应的头文件 bsp h
  • C++之xlsx文件操作之写操作

    采用xlsxwriter开源库的实现 声明如下 include xlsxwriter include xmlwriter h include xlsxwriter include workbook h include xlsxwriter
  • 微信小程序 返回上一页面时实现上一页面刷新

    假如从页面B返回页面A时实现页面A刷新 页面B var pages getCurrentPages 当前页面栈 if pages length gt 1 var beforePage pages pages length 2 获取上一个页面
  • vite+electron构建桌面版应用教程超简单

    目录 概述 快速开始 目录结构 Electron Vite Vue 整合模板 结构简单 容易上手 概述 开箱即用 支持 C C 模块 支持在渲染进程中使用 Electron Node js API 结构清晰 可塑性强 很容易实现多窗口 快速
  • Java assert断言

    格式 assert 返回boolean的语句 方法 如果boolean为true 程序继续执行 否则抛出AssertionError 继承于Error而非Exception 表达系统级运行错误 终止程序 因此assert可以定位bug as
  • MySql学习笔记——负载均衡(二十三)

    load balance 当存在多台服务器提供一个任务时 需要从其中选择一台用来完成当前任务 选择的算法就是负载均衡 在mysql中往往会采用一写多读架构 因为一般读操作往往多余写操作 还有就是写操作的同步是个问题 一写多读中 读服务器需要
  • CP343-1 扩展ProfibusCPU 314C-2DP

    1 MPI编程电缆连接PLC 设置接口为PC Adapter MPI 1 如下图所示 2 硬件组态插入组态 建立ethernet 网络 编译后下载 3 CP343 1安装上后 CPU run不起来 组态更新后即可 转载于 https www
  • [OVD]Open-Vocabulary Object Detection Using Captions(CVPR. 2021 oral)

    1 Motivation Despite the remarkable accuracy of deep neural networks in object detection they are costly to train and sc
  • Llama2-Chinese项目:1-项目介绍和模型推理

    Atom 7B与Llama2间的关系 Atom 7B是基于Llama2进行中文预训练的开源大模型 为什么叫原子呢 因为原子生万物 Llama中文社区希望原子大模型未来可以成为构建AI世界的基础单位 目前社区发布了6个模型 如下所示 Flag
  • JS声明对象key为变量

    JS声明对象key为变量 给对象的键加方括号即可 如下 const roomName room roomName const roomDetail roomName roomDescription
  • 伪类和伪元素的区别是什么?

    一 两者的定义 1 伪类 pseudo class 是一个以冒号作为前缀 被添加到一个选择器末尾的关键字 当你希望样式在特定状态才被呈现到指定的元素时 你可以往元素的选择器后面加上对应的伪类 2 伪元素用于创建一些不在文档树中的元素 并为其
  • 【洛谷 P1093】[NOIP2007 普及组] 奖学金 题解(结构体排序)

    NOIP2007 普及组 奖学金 题目描述 某小学最近得到了一笔赞助 打算拿出其中一部分为学习成绩优秀的前 5 5 5 名学生发奖学金 期末 每个学生都有 3 3 3 门课的成绩 语文 数学 英语 先按总分从高到低排序 如果两个同学总分相同
  • 数组转换字符串

    一 数组转字符串 3种方法 toString toLocaleString join join JS 允许数组与字符串之间相互转换 其中 Array 方法对象定义了 3 个方法 如下 数组方法 说明 toString 将数组转换成一个字符串
  • Android 检测 手机硬件状态 的Utils

    package com cy tools import android annotation SuppressLint import android app Activity import android bluetooth Bluetoo
  • Github中如何给项目创建GitHub Pages官方网页

    实现效果图 我的项目是 https github com shunyue1320 uab ui 我需要给项目创建一个官方文档的网页如 https shunyue1320 github io uab ui 看着Github大项目都有一个高大上
  • 【网络代理】代理IP检测的知识

    做网络的基本都知道代理 这个是肯定的 不管是用花刺还是猎手的网页代理 还是直接VPN的通道代理 代理有着不用说大家也知道的重要性 不管是做CPA还是做点击亦或者投票 代理都能帮我们一下 虽然帮的忙不大 但是却很重要 下面风就网页代理而言 探
  • tkinter模块

    thinker模块 第一个thinker程序 导入thinker模块 import tkinter 创建Tk类的实例 本质是显示窗口 window tkinter Tk 设置窗口背景为蓝色 window background blue 设置