067GUI的终极选择:Tkinter4(中2)
from tkinter import *root = Tk()
Label(root, text="账号:").grid(row=0, column=0) # 第0行第一列
Label(root, text="密码:").grid(row=1, column=0)
# 然后需要两个变量用于存放账号和密码
v1 = StringVar() # 输入框里是字符串的类型,所以就用tkinter的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()
067GUI的终极选择:Tkinter4(中3)
from tkinter import *master = Tk()
def test():
if e1.get() == "1024":
print("正确!")
return True # 返回True后并打印正确
else:
print("错误!")
e1.delete(0, END)
return False # 返回False后并清空这个输入框
v = StringVar()
e1 = Entry(master, textvariable=v, validate="focusout", validatecommand=test) # 当焦点移出的时候,Ta就会去调用validatecommand这个制定的函数
e2 = Entry(master)
e1.pack(padx=10, pady=10)
e2.pack(padx=10, pady=10)
mainloop()
067GUI的终极选择:Tkinter4(中4)
from tkinter import *master = Tk()
v = StringVar()
def test(content, reason, name):
if content == "1024":
print("正确")
print(content, reason, name)
return True
else:
print("错误")
print(content, reason, name)
return False
testCMD = master.register(test)
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()
>>>
================ RESTART: C:/Users/Administrator/Desktop/2.py ================
正确
1024 focusout .!entry # 1024是content,也就是输入框的内容,reason是focusout
067GUI的终极选择:Tkinter4(下)
本帖最后由 摆渡终极鉴黄师 于 2018-1-14 21:27 编辑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.isdight()
testCMD = master.register(test)
e1 = Entry(frame, width=10, textvariable=v1, validate="key", \
validatecommand=(testCMD, '%P')).grid(row=0, column=0) # variable选项被指定为key的时候,有任何输入操作都会立刻被拦截,然后来调用验证函数,只有当这个验证函数返回True,Ta才会将这个内容放在textvariable关联的变量里面
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()
068GUI的终极选择:Tkinter5(上)
本帖最后由 摆渡终极鉴黄师 于 2018-1-17 00:31 编辑Listbox是用列表宽的形式出来的,并适合滚动和操作
from tkinter import *
master = Tk()
# 创建一个空列表
theLB = Listbox(master, setgrid=True)
theLB.pack()
# 往列表里添加数据
068GUI的终极选择:Tkinter5(上2)
本帖最后由 摆渡终极鉴黄师 于 2018-1-19 14:02 编辑from tkinter import *
master = Tk()
theLB = Listbox(master)
theLB.pack()
theLB.insert(0, "不要观察并思考")
theLB.insert(END, "要分析并思考")
mainloop()
068GUI的终极选择:Tkinter5(上3)
本帖最后由 摆渡终极鉴黄师 于 2018-1-19 13:52 编辑from tkinter import *
master = Tk()
theLB = Listbox(master)
theLB.pack()
for item in ["鸡蛋", "鸭蛋", "鹅蛋", "李狗嗨"]:
theLB.insert(END, item)
theButton = Button(master, text="删除它", \
command=lambda x=theLB:x.delete(ACTIVE)) # lambda的表达式,冒号前面是参数,冒号后面是表达式,然后参数设为x,给Ta传一个参数,这里就等于是LB.delete的意思,ACTIVE表示的是当前选中的值
theButton.pack()
mainloop()
068GUI的终极选择:Tkinter5(中)
from tkinter import *master = Tk()
theLB = Listbox(master, selectmode=EXTENDED, height=16) # 设置一下高度为16,否则最多显示10个,有5个显示不出来
theLB.pack()
for item in (15):
theLB.insert(END, item)
mainloop()
068GUI的终极选择:Tkinter5(中2)
from tkinter import *root = Tk()
sb = Scrollbar(root)
sb.pack()
mainloop()
#一个滚动条
068GUI的终极选择:Tkinter5(中3)
为了在某个组件上安装垂直滚动条,你需要做两件事:1.设置该组件的yscrollbarcommand选项为Scrollbar组件的set()方法;
2.设置Scrollbar组件的command选项为该组件的yview()方法。
068GUI的终极选择:Tkinter5(中4)
from tkinter import *root = Tk()
sb = Scrollbar(root)
sb.pack(side=RIGHT, fill=Y)
lb = Listbox(root, yscrollcommand=sb.set) # 里边滚动会调用sb.set,同时修改滚动条的位置
for i in range(1000):
lb.insert(END, i)
lb.pack(side=LEFT, fill=BOTH)
sb.config(command=lb.yview) # yview是用来设置好怎么去显示垂直滚动的内容变化
mainloop()
068GUI的终极选择:Tkinter5(下)
from tkinter import *root = Tk()
Scale(root, from_=0, to=42).pack()
Scale(root, from_=0, to=200, orient=HORIZONTAL).pack()
mainloop()
#一个滑块
068GUI的终极选择:Tkinter5(下2)
本帖最后由 摆渡终极鉴黄师 于 2018-1-25 23:22 编辑from tkinter import *
root = Tk()
Scale(root, from_=0, to=42, tickinterval=5, resolution=5, length=200).pack() # 每5显示一个刻度,精度5
Scale(root, from_=0, to=200, tickinterval=10, orient=HORIZONTAL, length=600).pack()
mainloop()
069GUI的终极选择:Tkinter6(上)
from tkinter import *root = Tk()
text = Text(root, width=30, height=4)
text.pack()
text.insert(INSERT, "cute \n")
text.insert(END,"loli")
#def show():
# text.image_create(END, image=photo)
def show():
print("呀~")
b1 = Button(text, text="调戏一下♀", command=show)
text.window_create(INSERT, window=b1)
mainloop()
#一个text组件,可以插入和编辑文本,也可以插入window对象和组件,也可以插入图片
069GUI的终极选择:Tkinter6(上2)
本帖最后由 摆渡终极鉴黄师 于 2018-1-29 00:29 编辑from tkinter import *
root = Tk()
text = Text(root, width=30, height=30)
text.pack()
photo = PhotoImage(file="截图167105168182118.png") # 插入的图名
def show():
text.image_create(END, image=photo)
b1 = Button(text, text="确定", command=show)
text.window_create(INSERT, window=b1)
mainloop()
069GUI的终极选择:Tkinter6(中)
本帖最后由 摆渡终极鉴黄师 于 2018-1-30 07:16 编辑Indexes(索引)是用来只想Text组件中文本的位置,跟Python的序列索引一样,Text组件索引也是对应实际自负之间的位置。
069GUI的终极选择:Tkinter6(下)
http://bbs.fishc.com/thread-59444-1-1.html {:10_256:}071GUI的终极选择:Tkinter8(上)
Canvas组件通常用于显示以及编辑图形,可以用来绘制各种形状和组件,在Canvas来绘制对象可以使用create方法,“create”+“下横线_”“所要创建的对象,例如from tkinter import *
root = Tk()
w = Canvas(root, width=200, height=100)
w.pack()
w.create_line(0,50, 200, 50, fill="yellow")
w.create_line(100, 0, 100, 100, fill="red", dash=(4, 4))
w.create_rectangle(50,25, 150, 75, fill="blue")
mainloop()
071GUI的终极选择:Tkinter8(中)
本帖最后由 摆渡终极鉴黄师 于 2018-2-3 17:13 编辑from tkinter import *
root = Tk()
w = Canvas(root, width=200, height=100)
w.pack()
line1 = w.create_line(0, 50, 200, 50, fill="yellow")
line2 = w.create_line(100, 0, 100, 100, fill="red", dash=(4, 4))
rect1 = w.create_rectangle(50, 25, 150, 75, fill="blue")
w.coords(line1, 0, 25, 200, 25)
w.itemconfig(rect1, fill="red")
w.delete(line2)
Button(root, text="删除全部", command=(lambda x=ALL:w.delete(x))).pack() # :前参数后返回值
mainloop()
#点击按钮可以删掉所有对象