目录
1、简单实例
2、Label控件
3、Button控件
4、Entry控件
5、点击按钮输出输入框中的内容
6、Text控件
7、带滚动条的Text
8、Checkbutton多选框控件
9、Radiobutton单选框
10、Listbox控件一
11、Listbox控件二
12、Listbox控件三
13、Listbox四
14、Scale控件
15、Spinbox控件
16、Menu顶层菜单
17、Menu鼠标右键菜单
18、Combobox下拉控件
19、Frame控件
20、表格数据
21、树状数据
22、绝对布局
23、相对布局
24、表格布局
25、鼠标点击事件
26、鼠标移动事件
27、鼠标释放事件
28、进入和离开事件
29、响应所有按键的事件
30、响应特殊按键事件
31、指定按键事件
32、组合按键事件
1、简单实例
下面的代码是创建出一个窗口,其他的操作就在这个平台上进行。执行之后会在桌面弹出一个窗口,窗口的标题就是代码中设置的 你好.title。这里说一下,我使用的版本是python3.7。后面的内容尽量按顺序看,后面的控件也许用到前面写到的东西。
1 import tkinter
#创建主窗口
3 win = tkinter.Tk()
# 设置标题
4 win.title("你好")
# 设置大小和位置
5 win.geometry("400x400+200+50")
# 一般接受的参数为"400x400+20+20"(数值分别代表:长度x宽度+屏幕x方向数值+屏幕y方向数值,x和y都是以屏幕左上角为原点)类的参数,注意这里x为小写字母x,不是乘号,使用大写X或者*都会报错:bad geometry specifier "400*400+200+200"。另外,当我们想要结合屏幕尺寸确定上述参数具体数值是,需要注意参数中的数值(400、400、20、20)应为整数,否则也会发生错误:TclError: bad geometry specifier "400x400+20.0+200"。
# 进入消息循环,可以写控件
6 win.mainloop()
2、Label控件
import tkinter
win = tkinter.Tk()
win.title("你好")
win.geometry("400x400+200+50")
## Label:标签控件,可以显示文本
# win:父窗体
# text:显示的文本内容
# bg:背景色
# fg:字体颜色
# font:字体
# wraplength:指定text文本中多宽之后换行
# justify:设置换行后的对齐方式
# anchor:位置 n北,e东,w西,s南,center居中;还可以写在一起:ne东北方向
label = tkinter.Label(win,
text="你好",
bg="pink", fg="red", #用英语表示,汉语会报错》
font=("黑体", 20), #使用系统字体库里的字体,如果系统库没有,则默认宋体
width=20,height=10, # bg(背景色)宽度和高度
wraplength=100, justify="left", #标题text的长度和换行之后左对齐/右对齐
anchor="ne") #必须是 (n, ne, e, se, s, sw, w, nw, or center) en这种写法会报错
# 显示出来
label.pack()
win.mainloop()
3、Button控件
import tkinter
def func():
print("aaaaaaaaaaaaaaaaaaaaaaa")
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
# 创建按钮,默认是居中排列(在整个标签的中间,然后中间从上往下一次排列)
button1 = tkinter.Button(win, text="按钮", command=func, width=10, height=10)
button1.pack() #func后边不能有括号“()”
# 标签中的参数(bg,fg,font等参数)也都可以在按钮中使用
button2 = tkinter.Button(win, text="按钮",font=("宋体",20),bg="red", command=lambda: print("bbbbbbbbbbbb"))
button2.pack()
button3 = tkinter.Button(win, text="退出", command=win.quit)
button3.pack()
win.mainloop()
4、Entry控件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
Entry:输入控件,用于显示简单的文本内容
# 密文显示
entry1 = tkinter.Entry(win, show="*") # show="*" 表示的字符数字等以星号*来表示,通常用于输入密码隐藏
entry1.pack()
# 绑定变量
e = tkinter.Variable()
entry2 = tkinter.Entry(win, textvariable=e) #textvariable可以换成text
entry2.pack()
# e就代表输入框这个对象
# 设置默认值,可以为空或者写一些用于提示用户此处应该输入什么信息的提示语:输入姓名、密码
e.set("提示语eee")
# 取值
print(e.get()) #此处是为了查看e的设置结果,实际操作中不用写
print(entry2.get()) #此处是为了查看entry2的设置结果,实际操作中不用写
win.mainloop()
5、点击按钮输出输入框中的内容
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
def showinfo():
# 获取输入的内容
print(entry.get())
entry = tkinter.Entry(win)
entry.pack()
button = tkinter.Button(win, text="按钮", command=showinfo)
button.pack()
win.mainloop()
6、Text文本控件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
文本控件:用于显示多行文本
# height 高度,表示的是显示的行数
text = tkinter.Text(win, width=30, height=10)
text.pack()
str = '''盖闻天地之数,有十二万九千六百岁为一元。将一元分为十二会,乃子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥之十二支也。每会该一万八百岁。且就一日而论:子时得阳气,而丑则鸡鸣;寅不通光,而卯则日出;辰时食后,而巳则挨排;日午天中,而未则西蹉;申时晡而日落酉;戌黄昏而人定亥。譬于大数,若到戌会之终,则天地昏蒙而万物否矣。再去五千四百岁,交亥会之初,则当黑暗,而两间人物俱无矣,故曰混沌。又五千四百岁,亥会将终,贞下起元,近子之会,而复逐渐开明。邵康节曰:“冬至子之半,天心无改移。一阳初动处,万物未生时。”到此,天始有根。再五千四百岁,正当子会,轻清上腾,有日,有月,有星,有辰。日、月、星、辰,谓之四象。故曰,天开于子。又经五千四百岁,子会将终,近丑之会,而逐渐坚实。易曰:“大哉乾元!至哉坤元!万物资生,乃顺承天。”至此,地始凝结。再五千四百岁,正当丑会,重浊下凝,有水,有火,有山,有石,有土。水、火、山、石、土谓之五形。故曰,地辟于丑。又经五千四百岁,丑会终而寅会之初,发生万物。'''
# str在这里只是一个变量,可以用其他任意变量名替换,这里用str的目的只是为了说明输入的是一段文本
text.insert(tkinter.INSERT, str) # INSERT不能用小写insert,否则报错。str可用其他变量名替换
win.mainloop()
7、带滚动条的Text
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
文本控件:用于显示多行文本
# 创建滚动条
scroll = tkinter.Scrollbar()
text = tkinter.Text(win, width=30, height=10)
# side放到窗体的哪一侧, fill填充
scroll.pack(side=tkinter.RIGHT, fill=tkinter.Y)
text.pack(side=tkinter.LEFT, fill=tkinter.Y)
# 关联
scroll.config(command=text.yview)
text.config(yscrollcommand=scroll.set)
text.pack()
str = '''盖闻天地之数,有十二万九千六百岁为一元。将一元分为十二会,乃子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥之十二支也。每会该一万八百岁。且就一日而论:子时得阳气,而丑则鸡鸣;寅不通光,而卯则日出;辰时食后,而巳则挨排;日午天中,而未则西蹉;申时晡而日落酉;戌黄昏而人定亥。譬于大数,若到戌会之终,则天地昏蒙而万物否矣。再去五千四百岁,交亥会之初,则当黑暗,而两间人物俱无矣,故曰混沌。又五千四百岁,亥会将终,贞下起元,近子之会,而复逐渐开明。邵康节曰:“冬至子之半,天心无改移。一阳初动处,万物未生时。”到此,天始有根。再五千四百岁,正当子会,轻清上腾,有日,有月,有星,有辰。日、月、星、辰,谓之四象。故曰,天开于子。又经五千四百岁,子会将终,近丑之会,而逐渐坚实。易曰:“大哉乾元!至哉坤元!万物资生,乃顺承天。”至此,地始凝结。再五千四百岁,正当丑会,重浊下凝,有水,有火,有山,有石,有土。水、火、山、石、土谓之五形。故曰,地辟于丑。又经五千四百岁,丑会终而寅会之初,发生万物。'''
text.insert(tkinter.INSERT, str)
win.mainloop()
8、Checkbutton多选框控件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
def updata():
message = ""
if hobby1.get() ==True:
message += "money\n"
if hobby2.get() == True:
message += "power\n"
if hobby3.get() == True:
message += "people\n"
# 清空text中所有内容
text.delete(0.0, tkinter.END)
text.insert(tkinter.INSERT, message)
# 要绑定的变量
hobby1 = tkinter.BooleanVar()
# 多选框
check1 = tkinter.Checkbutton(win, text="money", variable=hobby1, command=updata)
check1.pack()
hobby2 = tkinter.BooleanVar()
check2 = tkinter.Checkbutton(win, text="power", variable=hobby2, command=updata)
check2.pack()
hobby3 = tkinter.BooleanVar()
check3 = tkinter.Checkbutton(win, text="people", variable=hobby3, command=updata)
check3.pack()
text = tkinter.Text(win, width=50, height=5)
text.pack()
win.mainloop()
9、Radiobutton单选框
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
def updata():
print(r.get())
# 绑定变量,一组单选框要绑定同一个变量,就能区分出单选框了
r = tkinter.IntVar()
radio1 = tkinter.Radiobutton(win, text="one", value=1, variable=r, command=updata)
radio1.pack()
radio2 = tkinter.Radiobutton(win, text="two", value=2, variable=r, command=updata)
radio2.pack()
win.mainloop()
10、Listbox控件一
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
'''
列表框控件:可以包含一个或多个文本框
作用:在listbox控件的小窗口显示一个字符串
'''
# 创建一个listbox,添加几个元素
lb = tkinter.Listbox(win, selectmode=tkinter.BROWSE)
lb.pack()
for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
# 按顺序添加
lb.insert(tkinter.END, item)
# 在开始添加
lb.insert(tkinter.ACTIVE, "cool")
# 将列表当做一个元素添加
# lb.insert(tkinter.END, ["very good", "very nice"])
# 删除:参数1为开始的索引,参数2为结束的索引,如果不指定参数2,只删除第一个索引处的内容
lb.delete(1,3)
# 选中:参数1为开始的索引,参数2为结束的索引,如果不指定参数2,只选中第一个索引处的内容
lb.select_set(2,3)
# 取消选中:参数1为开始的索引,参数2为结束的索引,如果不指定参数2,只取消第一个索引处的内容
lb.select_clear(2)
# 获取到列表中的元素个数
print(lb.size())
# 获取值
print(lb.get(2,3))
# 返回当前的索引项,不是item元素
print(lb.curselection())
# 判断:一个选项是否被选中
print(lb.selection_includes(3))
win.mainloop()
11、Listbox控件二
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
# 绑定变量
lbv = tkinter.StringVar()
# 与BORWSE相似,但是不支持鼠标按下后移动选中位置
lb = tkinter.Listbox(win, selectmode=tkinter.SINGLE, listvariable=lbv)
lb.pack()
for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
# 按顺序添加
lb.insert(tkinter.END, item)
# 打印当前列表中的选型
print(lbv.get())
# 设置选项
# lbv.set(("1","2","3"))
# 绑定事件
def myprint(event):
# print(lb.curselection()) # 返回下标
print(lb.get(lb.curselection())) # 返回值
lb.bind("", myprint)
win.mainloop()
12、Listbox控件三
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
# win.geometry("400x400+200+50")
# EXTENDED:可以使listbox支持shift和Ctrl
lb = tkinter.Listbox(win, selectmode=tkinter.EXTENDED)
lb.pack()
for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd", "good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
# 按顺序添加
lb.insert(tkinter.END, item)
# 滚动条
sc = tkinter.Scrollbar(win)
sc.pack(side=tkinter.RIGHT, fill=tkinter.Y)
# 配置
lb.configure(yscrollcommand=sc.set)
lb.pack(side=tkinter.LEFT, fill=tkinter.BOTH)
# 额外给属性赋值
sc["command"] = lb.yview
win.mainloop()
13、Listbox四
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
# MULTIPLE支持多选
lb = tkinter.Listbox(win, selectmode=tkinter.MULTIPLE)
lb.pack()
for item in ["good", "nice", "handsome", "aaa", "bbb", "ccc", "ddd"]:
# 按顺序添加
lb.insert(tkinter.END, item)
win.mainloop()
14、Scale控件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
'''
供用户通过拖拽指示器来改变变量的值,可以水平,也可以竖直
'''
# tkinter.HORIZONTAL水平
# tkinter.VERTICAL 竖直(默认)
# length:水平时表示宽度,竖直时表示高度
# tickintervar :选择值将会为该值得倍数
scale1 = tkinter.Scale(win, from_=0, to=100, orient=tkinter.HORIZONTAL, tickinterval=10, length=200)
scale1.pack()
# 设置值
scale1.set(20)
# 取值
# print(scale1.get())
def showNum():
print(scale1.get())
tkinter.Button(win, text="按钮", command=showNum).pack()
win.mainloop()
15、Spinbox控件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
'''
数值范围控件
'''
# 绑定变量
v = tkinter.StringVar()
def updata():
print(v.get())
# increment:步长,默认为1
# values要输入一个元组 最好不要和from和to同时使用,而且步长也没用
# command 只要值改变就会执行updata方法
sp = tkinter.Spinbox(win, from_=0, to=100, increment=5,
textvariable=v, command=updata)
# sp = tkinter.Spinbox(win, values=(0,2,4,6,8))
sp.pack()
# 赋值
v.set(20)
# 取值
print(v.get())
win.mainloop()
16、Menu顶层菜单
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
# 菜单条
menubar = tkinter.Menu(win)
win.config(menu=menubar)
def func():
print("**********")
# 创建一个菜单选项
menu1 = tkinter.Menu(menubar, tearoff=False)
# 给菜单选项添加内容
for item in ['python','c','java','c++', 'c#','php','B','退出']:
if item == '退出':
# 添加分割线
menu1.add_separator()
menu1.add_command(label=item, command=win.quit)
else:
menu1.add_command(label=item, command=func)
# 向菜单条上添加菜单选项
menubar.add_cascade(label='语言', menu=menu1)
win.mainloop()
17、Menu鼠标右键菜单
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
# 菜单条
menubar = tkinter.Menu(win)
def func():
print("**********")
# 菜单
menu = tkinter.Menu(menubar, tearoff=False)
# 给菜单选项添加内容
for item in ['python','c','java','c++', 'c#','php','B','退出']:
if item == '退出':
# 添加分割线
menu.add_separator()
menu.add_command(label=item, command=win.quit)
else:
menu.add_command(label=item, command=func)
menubar.add_cascade(label="语言", menu=menu)
def showMenu(event):
menubar.post(event.x_root, event.y_root)
win.bind("", showMenu)
win.mainloop()
18、Combobox下拉控件
import tkinter
from tkinter import ttk
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
# 绑定变量
cv = tkinter.StringVar()
com = ttk.Combobox(win, textvariable=cv)
com.pack()
# 设置下拉数据
com["value"] = ("黑龙江", "吉林", "辽宁")
# 设置默认值
com.current(0)
# 绑定事件
def func(event):
print(com.get())
print(cv.get())
com.bind("<>", func)
win.mainloop()
19、Frame控件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
'''
框架控件:在桌面上显示一个矩形区域,多作为一个容器控件
'''
frm = tkinter.Frame(win)
frm.pack()
# left
frm_l = tkinter.Frame(frm)
tkinter.Label(frm_l, text="左上", bg="pink").pack(side=tkinter.TOP)
tkinter.Label(frm_l, text="左下", bg="blue").pack(side=tkinter.TOP)
frm_l.pack(side=tkinter.LEFT)
# right
frm_r = tkinter.Frame(frm)
tkinter.Label(frm_r, text="右上", bg="green").pack(side=tkinter.TOP)
tkinter.Label(frm_r, text="右下", bg="red").pack(side=tkinter.TOP)
frm_r.pack(side=tkinter.RIGHT)
win.mainloop()
20、表格数据
import tkinter
from tkinter import ttk
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("600x400+200+50")
# 表格
tree = ttk.Treeview(win)
tree.pack()
# 定义列
tree["columns"] = ("姓名","年龄","身高","体重")
# 设置列,列还不显示
tree.column("姓名", width=100)
tree.column("年龄", width=100)
tree.column("身高", width=100)
tree.column("体重", width=100)
# 设置表头
tree.heading("姓名", text="姓名-name")
tree.heading("年龄", text="年龄-age")
tree.heading("身高", text="身高-height")
tree.heading("体重", text="体重-weight")
# 添加数据
tree.insert("", 0, text="line1", values=("小郑","34","177cm","70kg"))
tree.insert("", 1, text="line2", values=("小张","43","188cm","90kg"))
win.mainloop()
21、树状数据
import tkinter
from tkinter import ttk
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
tree = ttk.Treeview(win)
tree.pack()
# 添加一级树枝
treeF1 = tree.insert("",0,"中国",text= "中国Chi", values=("F1"))
treeF2 = tree.insert("",1,"美国",text= "美国USA", values=("F1"))
treeF3 = tree.insert("",2,"英国",text= "英国UK", values=("F1"))
# 二级树枝
treeF1_1 = tree.insert(treeF1,0,"黑龙江",text="中国黑龙江",values=("F1_1"))
treeF1_2 = tree.insert(treeF1,1,"吉林",text="中国吉林",values=("F1_2"))
treeF1_3 = tree.insert(treeF1,2,"辽宁",text="中国辽宁",values=("F1_3"))
treeF2_1 = tree.insert(treeF2,0,"aaa",text="aaaa",values=("F2_1"))
treeF2_2 = tree.insert(treeF2,1,"bbb",text="bbbb",values=("F2_2"))
treeF2_3 = tree.insert(treeF2,2,"ccc",text="cccc",values=("F2_3"))
# 三级树枝
treeF1_1_1 = tree.insert(treeF1_1,0,"哈尔滨",text="黑龙江哈尔滨")
treeF1_1_2 = tree.insert(treeF1_1,1,"五常",text="黑龙江五常")
win.mainloop()
22、绝对布局
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
label1 = tkinter.Label(win, text="good", bg="blue")
label2 = tkinter.Label(win, text="nice", bg="red")
label3 = tkinter.Label(win, text="cool", bg="green")
# 绝对布局,窗口的变化对位置没有影响
label1.place(x=10,y=10)
label2.place(x=50,y=50)
label3.place(x=100,y=100)
win.mainloop()
23、相对布局
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
label1 = tkinter.Label(win, text="good", bg="blue")
label2 = tkinter.Label(win, text="nice", bg="red")
label3 = tkinter.Label(win, text="cool", bg="green")
# 相对布局,窗体改变对控件有影响
label1.pack(fill=tkinter.Y, side=tkinter.LEFT)
label2.pack(fill=tkinter.X, side=tkinter.TOP)
label3.pack()
win.mainloop()
24、表格布局
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
label1 = tkinter.Label(win, text="good", bg="blue")
label2 = tkinter.Label(win, text="nice", bg="red")
label3 = tkinter.Label(win, text="cool", bg="green")
label4 = tkinter.Label(win, text="handsome", bg="yellow")
# 表格布局
label1.grid(row=0,column=0)
label2.grid(row=0,column=1)
label3.grid(row=1,column=0)
label4.grid(row=1,column=1)
win.mainloop()
25、鼠标点击事件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
def func(event):
print(event.x, event.y)
# 鼠标左键
# 鼠标滚轮
# 鼠标右键
# 鼠标双击左键
# 鼠标三击左键
button1 = tkinter.Button(win, text="leftmouse button")
# bind 给控件绑定数据(参数一是绑定的事件,参数二是触发事件的函数)
button1.bind("", func)
button1.pack()
win.mainloop()
26、鼠标移动事件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
# 左键移动
# 中键移动
# 右键移动
label = tkinter.Label(win, text="*********")
label.pack()
def func(event):
print(event.x, event.y)
label.bind("", func)
win.mainloop()
27、鼠标释放事件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
# 释放鼠标左键
# 释放鼠标中键
# 释放鼠标右键
label = tkinter.Label(win, text="*********", bg="red")
label.pack()
def func(event):
print(event.x, event.y)
label.bind("", func)
win.mainloop()
28、进入和离开事件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
# 当鼠标进入控件时触发事件
# 当鼠标离开控件时触发事件
label = tkinter.Label(win, text="*********", bg="red")
label.pack()
def func(event):
print(event.x, event.y)
label.bind("", func)
label.bind("", func)
win.mainloop()
29、响应所有按键的事件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
# 响应所有的按键(要有焦点)
label = tkinter.Label(win, text="*********", bg="red")
# 设置焦点
label.focus_set()
label.pack()
def func(event):
print("event.char=", event.char)
print("event.keycode=", event.keycode)
label.bind("", func)
win.mainloop()
30、响应特殊按键事件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
# 只响应左侧的shift键
#
#
# 也就是回车键
# 返回,也就是退格键
label = tkinter.Label(win, text="*********", bg="red")
# 设置焦点
label.focus_set()
label.pack()
def func(event):
print("event.char=", event.char)
print("event.keycode=", event.keycode)
label.bind("", func)
win.mainloop()
31、指定按键事件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
label = tkinter.Label(win, text="*********", bg="red")
# 设置焦点
label.focus_set()
label.pack()
def func(event):
print("event.char=", event.char)
print("event.keycode=", event.keycode)
win.bind("a", func) # 注意前面改成了win,只需要写出按键名即可
win.mainloop()
32、组合按键事件
import tkinter
win = tkinter.Tk()
win.title("yudanqu")
win.geometry("400x400+200+50")
#
#
# 只是control+alt不行
label = tkinter.Label(win, text="*********", bg="red")
# 设置焦点
label.focus_set()
label.pack()
def func(event):
print("event.char=", event.char)
print("event.keycode=", event.keycode)
win.bind("", func) # 注意前面改成了win,只需要写出按键名即可
win.mainloop()
出处
—滚动文本框的详细代码在79-83行
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import tkinter as tk
from tkinter import ttk
from tkinter import scrolledtext # 导入滚动文本框的模块
win = tk.Tk()
win.title("Python GUI") # 添加标题
ttk.Label(win, text="Chooes a number").grid(column=1, row=0) # 添加一个标签,并将其列设置为1,行设置为0
ttk.Label(win, text="Enter a name:").grid(column=0, row=0) # 设置其在界面中出现的位置 column代表列 row 代表行
# button被点击之后会被执行
def clickMe(): # 当acction被点击时,该函数则生效
action.configure(text='Hello ' + name.get() + ' ' + numberChosen.get()) # 设置button显示的内容
print('check3 is %s %s' % (type(chvarEn.get()), chvarEn.get()))
# 按钮
action = ttk.Button(win, text="Click Me!", command=clickMe) # 创建一个按钮, text:显示按钮上面显示的文字, command:当这个按钮被点击之后会调用command函数
action.grid(column=2, row=1) # 设置其在界面中出现的位置 column代表列 row 代表行
# 文本框
name = tk.StringVar() # StringVar是Tk库内部定义的字符串变量类型,在这里用于管理部件上面的字符;不过一般用在按钮button上。改变StringVar,按钮上的文字也随之改变。
nameEntered = ttk.Entry(win, width=12, textvariable=name) # 创建一个文本框,定义长度为12个字符长度,并且将文本框中的内容绑定到上一句定义的name变量上,方便clickMe调用
nameEntered.grid(column=0, row=1) # 设置其在界面中出现的位置 column代表列 row 代表行
nameEntered.focus() # 当程序运行时,光标默认会出现在该文本框中
# 创建一个下拉列表
number = tk.StringVar()
numberChosen = ttk.Combobox(win, width=12, textvariable=number, state='readonly')
numberChosen['values'] = (1, 2, 4, 42, 100) # 设置下拉列表的值
numberChosen.grid(column=1, row=1) # 设置其在界面中出现的位置 column代表列 row 代表行
numberChosen.current(0) # 设置下拉列表默认显示的值,0为 numberChosen['values'] 的下标值
# 复选框
chVarDis = tk.IntVar() # 用来获取复选框是否被勾选,通过chVarDis.get()来获取其的状态,其状态值为int类型 勾选为1 未勾选为0
check1 = tk.Checkbutton(win, text="Disabled", variable=chVarDis, state='disabled') # text为该复选框后面显示的名称, variable将该复选框的状态赋值给一个变量,当state='disabled'时,该复选框为灰色,不能点的状态
check1.select() # 该复选框是否勾选,select为勾选, deselect为不勾选
check1.grid(column=0, row=4, sticky=tk.W) # sticky=tk.W 当该列中其他行或该行中的其他列的某一个功能拉长这列的宽度或高度时,设定该值可以保证本行保持左对齐,N:北/上对齐 S:南/下对齐 W:西/左对齐 E:东/右对齐
chvarUn = tk.IntVar()
check2 = tk.Checkbutton(win, text="UnChecked", variable=chvarUn)
check2.deselect()
check2.grid(column=1, row=4, sticky=tk.W)
chvarEn = tk.IntVar()
check3 = tk.Checkbutton(win, text="Enabled", variable=chvarEn)
check3.select()
check3.grid(column=2, row=4, sticky=tk.W)
# 单选按钮
# 定义几个颜色的全局变量
COLOR1 = "Blue"
COLOR2 = "Gold"
COLOR3 = "chocolate1"
# 单选按钮回调函数,就是当单选按钮被点击会执行该函数
def radCall():
radSel = radVar.get()
if radSel == 1:
win.configure(background=COLOR1) # 设置整个界面的背景颜色
elif radSel == 2:
win.configure(background=COLOR2)
elif radSel == 3:
win.configure(background=COLOR3)
radVar = tk.IntVar() # 通过tk.IntVar() 获取单选按钮value参数对应的值
rad1 = tk.Radiobutton(win, text=COLOR1, variable=radVar, value=1, command=radCall) # 当该单选按钮被点击时,会触发参数command对应的函数
rad1.grid(column=0, row=5, sticky=tk.W) # 参数sticky对应的值参考复选框的解释
rad2 = tk.Radiobutton(win, text=COLOR2, variable=radVar, value=2, command=radCall)
rad2.grid(column=1, row=5, sticky=tk.W)
rad3 = tk.Radiobutton(win, text=COLOR3, variable=radVar, value=3, command=radCall)
rad3.grid(column=2, row=5, sticky=tk.W)
# 滚动文本框
scrolW = 30 # 设置文本框的长度
scrolH = 3 # 设置文本框的高度
scr = scrolledtext.ScrolledText(win, width=scrolW, height=scrolH, wrap=tk.WORD) # wrap=tk.WORD 这个值表示在行的末尾如果有一个单词跨行,会将该单词放到下一行显示,比如输入hello,he在第一行的行尾,llo在第二行的行首, 这时如果wrap=tk.WORD,则表示会将 hello 这个单词挪到下一行行首显示, wrap默认的值为tk.CHAR
scr.grid(column=0, columnspan=3) # columnspan 个人理解是将3列合并成一列 也可以通过 sticky=tk.W 来控制该文本框的对齐方式
win.mainloop() # 当调用mainloop()时,窗口才会显示出来
![代码执行结果如图](https://img-blog.csdnimg.cn/20190121160009431.jpg)
作者:_阿聪
链接:https://www.jianshu.com/p/abea88607525
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。