tkinter模块

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 – 组件选项,下方表格详细列举了各个选项的具体含义和用法:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值