1.1
import tkinter as tk
app=tk.Tk() #生成了顶层窗口的实例 root窗口,T大写k小写
app.title("Fishc Demo")#设置标题栏
#Label是一个组件,组件实例化后成为一个对象。
#该组件放在app这个窗口上
#该组件是最常见的组件之一,主要用于显示文本和图标
theLabel=tk.Label(app,text="我的第二个窗口程序!")
#pack()用于自动调节组件自身的尺寸和位置
theLabel.pack()
#mainloop()窗口的主事件循环
app.mainloop()
1.2
import tkinter as tk
class App:
def __init__(self,master):
frame=tk.Frame(master) #Frame框架 在复杂的布局里面将这些组件进行分组
frame.pack(side=tk.LEFT,padx=10,pady=10)#自动调整位置
self.hi_there =tk.Button(frame,text="打招呼",bg="black",fg="white",command=self.say_hi)#按钮组件
self.hi_there.pack()
def say_hi(self):
print("Hi!")
root=tk.Tk()#创建一个顶层窗口
app =App(root)
root.mainloop()#进入主事件循环
2.1
from tkinter import * #把tkinter模块中的所有内容都导入
root = Tk() #生成一个root窗口
#justify设置左对齐
textLabel =Label(root,text="你好!该页面无法访问",justify=LEFT,padx=10)
textLabel.pack(side=LEFT)#将标签放到图片的左边
photo=PhotoImage(file="daka.png")#将PhotoImage实例化
imgLabel=Label(root,image=photo)
imgLabel.pack(side=RIGHT)#RIGHT要全部大写 不然报错
mainloop()
2.2
将文字显示在图片上
from tkinter import * #把tkinter模块中的所有内容都导入
root = Tk() #生成一个root窗口
photo=PhotoImage(file="daka.png")
theLabel=Label(root,
text="学python\n到...!",
justify=LEFT,
image=photo,
compound=CENTER,#文字在图片的正上方显示
font=("宋体",20),#用元组 字体+字号
fg="orange"#文字的颜色
)
theLabel.pack()
mainloop()
2.3
button接受用户的信息
from tkinter import * #把tkinter模块中的所有内容都导入
def callback():
var.set("访问再次失败!")
root = Tk() #生成一个root窗口
frame1=Frame(root)
frame2=Frame(root)
var=StringVar()#必须在Tk()初始化后定义使用
var.set("你好!请问您要继续访问该网页吗?")
#justify设置左对齐
textLabel =Label(frame1,textvariable=var,justify=LEFT)
textLabel.pack(side=LEFT)#将标签放到图片的左边
photo=PhotoImage(file="daka.png")#将PhotoImage实例化
imgLabel=Label(frame1,image=photo)
imgLabel.pack(side=RIGHT)#RIGHT要全部大写 不然报错
theButton=Button(frame2,text="继续访问",command=callback)#一点要有command,button才会有用
theButton.pack()
frame1.pack(padx=10,pady=10)
frame2.pack(padx=10,pady=10)
mainloop()
from tkinter import *
root=Tk()
v=IntVar() #整型变量v表示按钮是否被按下
c=Checkbutton(root,text="测试一下",variable=v)
c.pack()
mainloop()
from tkinter import *
root=Tk()
v=IntVar() #整型变量v表示按钮是否被按下
c=Checkbutton(root,text="测试一下",variable=v)
c.pack()
l=Label(root,textvariable=v)
l.pack()
mainloop()
from tkinter import *
root=Tk()
GIRLS=["amy","cindy","helen","susan"]
v=[]
for girl in GIRLS:
#添加状态到状态列表v[]中去
v.append(IntVar())
#每操作一次就有状态存入v[],-1就是读取最新的状态并返回
b=Checkbutton(root,text=girl,variable=v[-1])
b.pack(anchor='w')#w是west 左对齐 大写W 小写'w'
mainloop()
from tkinter import *
root=Tk()
v=IntVar()
#variable设置同样的变量 value的值一定要不同
Radiobutton(root,text="One",variable=v,value=1).pack(anchor=W)
Radiobutton(root,text="Two",variable=v,value=2).pack(anchor=W)
Radiobutton(root,text="Three",variable=v,value=3).pack(anchor=W)
mainloop()
from tkinter import *
root=Tk()
LANS=[
("python",1),
("ruby",2),
("Per1",3),
]
v=IntVar()
v.set(1)
for lang,num in LANS:
b=Radiobutton(root,text=lang,variable=v,value=num,indicator=False)#indicator设置按钮
'''b.pack(anchor=W)'''
b.pack(fill=X)#将按钮横向填充 X为大写 或者'w'小写
mainloop()
from tkinter import *
root=Tk()
group=LabelFrame(root,text="最好的脚本语言是?",padx=5,pady=5)
group.pack(padx=10,pady=10)
LANS=[
("python",1),
("ruby",2),
("Per1",3),
]
v=IntVar()
v.set(1)
for lang,num in LANS:
b=Radiobutton(group,text=lang,variable=v,value=num)
b.pack(anchor=W)
mainloop()
from tkinter import *
root=Tk()
Label(root,text="作品:").grid(row=0,column=0)
Label(root,text="作者:").grid(row=1,column=0)
e1=Entry(root)
e2=Entry(root)
e1.grid(row=0,column=1,padx=10,pady=5)
e2.grid(row=1,column=1,padx=10,pady=5)
def show():
print("作品:《%s》" % e1.get())
print("作品: %s" % e2.get())
#两个按钮
Button(root,text="获取信息",width=10,command=show).\
grid(row=3,column=0,sticky=W,padx=10,pady=5)
Button(root,text="退出",width=10,command=root.quit).\
grid(row=3,column=1,sticky=E,padx=10,pady=5)
mainloop()
from tkinter import *
root=Tk()
Label(root,text="账号:").grid(row=0,column=0)
Label(root,text="密码:").grid(row=1,column=0)
v1=StringVar()
v2=StringVar()
e1=Entry(root,textvariable=v1)
e2=Entry(root,textvariable=v2,show="*")
e1.grid(row=0,column=1,padx=10,pady=5)
e2.grid(row=1,column=1,padx=10,pady=5)
def show():
print("账号: %s" % e1.get())
print("密码: %s" % e2.get())
#两个按钮
Button(root,text="芝麻开门",width=10,command=show).\
grid(row=3,column=0,sticky=W,padx=10,pady=5)
Button(root,text="退出",width=10,command=root.quit).\
grid(row=3,column=1,sticky=E,padx=10,pady=5)
mainloop()
4.3在第一个输入框输入“小甲鱼”并通过Tab键将焦点转移到第二个输入框的时候,验证功能被成功触发。
from tkinter import *
master=Tk()
def test():
if e1.get()=="小甲鱼":
print("正确!")
return True
else:
print("错误!")
e1.delete(0,END)
return False
v=StringVar()
e1=Entry(master,textvariable=v,validate="focusout",validatecommand=test)
e2=Entry(master)
e1.pack(padx=10,pady=10)
e2.pack(padx=10,pady=10)
mainloop()
4.4
invalidcommand选项指定的函数只有在validatecommand的返回值为False的时候才被调用。
from tkinter import *
master=Tk()
def test1():
if e1.get()=="小甲鱼":
print("正确!")
return True
else:
print("错误!")
e1.delete(0,END)
return False
def test2():
print("我被调用了...")
return True
v=StringVar()
e1=Entry(master,textvariable=v,validate="focusout",validatecommand=test1,invalidcommand=test2)
e2=Entry(master)
e1.pack(padx=10,pady=10)
e2.pack(padx=10,pady=10)
mainloop()
4.5
from tkinter import *
master=Tk()
v=StringVar()
def test(content,reason,name):
if content=="小甲鱼":
print("正确!")
print(content,reason,name)
return True
else:
print("错误!")
print(content,reason,name)
return False
testCMD=master.register(test)
#'%P'当输入框的值允许改变的时候,该值有效,该值为输入框的最新文本内容
#'%v'该组件当前的validate选项的值
#'%W'该组件的名字
e1=Entry(master,textvariable=v,validate="focusout",\
validatecommand=(testCMD,'%P','%v','%W'))
e2=Entry(master)
e1.pack(padx=10,pady=10)
e2.pack(padx=10,pady=10)
mainloop()
from tkinter import *
master=Tk()
v1=StringVar()
v2=StringVar()
v3=StringVar()
def test(content):
return content.isdigit()
testCMD=master.register(test)
e1=Entry(master,textvariable=v1,validate="key",\
validatecommand=(testCMD,'%P')).grid(row=0,column=0)
Label(master,text="+").grid(row=0,column=1)
e2=Entry(master,textvariable=v2,validate="key",\
validatecommand=(testCMD,'%P')).grid(row=0,column=2)
Label(master,text="=").grid(row=0,column=3)
e3=Entry(master,textvariable=v3,state="readonly").grid(row=0,column=4)#计算结果设置为只读
def calc():
result=int(v1.get())+int(v2.get())
v3.set(str(result))
Button(master,text="计算结果",command=calc).grid(row=1,column=2)
mainloop()
from tkinter import *
master=Tk()
frame=Frame(master)
frame.pack(padx=10,pady=10)
v1=StringVar()
v2=StringVar()
v3=StringVar()
def test(content):
return content.isdigit()
testCMD=master.register(test)
e1=Entry(frame,width=10,textvariable=v1,validate="key",\
validatecommand=(testCMD,'%P')).grid(row=0,column=0)
Label(frame,text="+").grid(row=0,column=1)
e2=Entry(frame,width=10,textvariable=v2,validate="key",\
validatecommand=(testCMD,'%P')).grid(row=0,column=2)
Label(frame,text="=").grid(row=0,column=3)
e3=Entry(frame,width=10,textvariable=v3,state="readonly").grid(row=0,column=4)#计算结果设置为只读
def calc():
result=int(v1.get())+int(v2.get())
v3.set(str(result))
Button(frame,text="计算结果",command=calc).grid(row=1,column=2,pady=5)
mainloop()