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