本来想学习写游戏,但是有个事件机制不会,就想着想学个GUI,结果我这一天停下来越听越没耐心--我为啥不直接学事件机制呢?
不过今天好不容易累死累活学的这么一点东西,还是做点总结吧.
写了十一个小例子,先贴在底下感受一下:
import tkinter as tk
app=tk.Tk()#使用该函数可以创建一个root,顶层窗口,注意k是小写
app.title("root window")
theLabel=tk.Label(app,text="我的第一个窗口程序")
theLabel.pack()#注释掉之后窗口里就没有这句话了
app.mainloop()#必须使用该方法才能生成窗口
------------------------------------------------
class APP:
def __init__(self,master):
frame=tk.Frame(master)
frame.pack(side=tk.LEFT,padx=10,pady=10)
self.hi_there=tk.Button(frame,text="打招呼",bg="blue",fg="yellow",command=self.say_hi)
self.hi_there.pack()
def say_hi(self):
print("我是一个快乐的按钮")
root=tk.Tk()
app=APP(root)
root.mainloop()
---------------------------------------------------
root =tk.Tk()
label1=tk.Label(root,text="经过检测您还没有购买,\n请购买正版之后再使用",justify=tk.LEFT)
label1.pack(side=tk.LEFT)
photo1=tk.PhotoImage(file="周润发.gif")
label2=tk.Label(root,image=photo1)
label2.pack(side=tk.RIGHT)
tk.mainloop()
-------------------------------------------------
root=Tk()
frame1=Frame(root)
frame2=Frame(root)
var1=StringVar()
var1.set("检测到您还没有购买正版,\n请在购买后再使用")
textLabel1=Label(frame1,textvariable=var1,justify=LEFT)
textLabel1.pack(side=LEFT)
photo1=PhotoImage(file="周润发.gif")
imageLabel1=Label(frame1,image=photo1)
imageLabel1.pack(side=RIGHT)
def claback():
var1.set("请前往关注微信公众号或支付宝缴费")
button1=Button(frame2,text="前去购买",command=claback)
button1.pack()
frame2.pack()
frame1.pack()
mainloop()
--------------------------------------------------
root=Tk()
photo1=PhotoImage(file="壁纸2.gif")
theLable1=Label(
root,
text="我是我自己",
justify=LEFT,
image=photo1,
compound=CENTER,
font=("隶书",30),
fg="white"
)
theLable1.pack()
mainloop()
-------------------------------------------------------
root=Tk()
GIRLS=["肖","林","萧"]
v=[]
for girl in GIRLS:
v.append(IntVar())
b=Checkbutton(root,text=girl,variable=v[-1])
b.pack(anchor=W)
Label(root,textvariable=v[-1]).pack()
mainloop()
-------------------------------------------------------------
root=Tk()
group=LabelFrame(root,text="最好的脚本语言是",padx=5,pady=5)
group.pack(padx=10,pady=10)
LANGS=[("python",1),("Perls",2),("PHP",30),("Ruby",4)]
v=IntVar()
v.set(1)
for lang,num in LANGS:
b=Radiobutton(group,text=lang,variable=v,value=num,indicatoron=FALSE)
#b.pack(anchor=W)
b.pack(fill=X )
else:
Label(root,textvariable=v).pack()
mainloop()
------------------------------------------------------
root=Tk()
e=Entry(root)
e.pack(padx=10,pady=10)
e.delete(0,END)
e.insert(0,"默认文本")
mainloop()
----------------------------------------------------------
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,show="S")
e2=Entry(root,textvariable=v2)
e1.grid(row=0,column=1,padx=10,pady=5)
e2.grid(row=1,column=1,padx=10,pady=5)
def show():
v2.set("别问我,我不知道")
print("你问道:",e1.get())
print("回答是",e2.get())
Button(root,text="告诉我",width=10,command=show)\
.grid(row=2,column=0,sticky=W,padx=10,pady=5)
Button(root,text="退出",width=10,command=root.quit)\
.grid(row=2,column=1,sticky=E,padx=10,pady=5)
mainloop()
------------------------------------------------------
root=Tk()
Label(root,text="密码是多少?").grid(row=0,column=0)
v1=StringVar()
def test():
if e1.get()=="123456":
return TRUE
else:
v1.set("输入的密码不正确")
return FALSE
#还有invalidcommand属性,当输入无效时调用该函数的属性.
e1=Entry(root,textvariable=v1,validate="focusout",validatecommand=test)
e1.grid(row=1,column=0)
mainloop()
行吧,B站那个小甲鱼讲课其实不咋地.
类似于HTML的标签,有一对Label,Entry,Button,RadioButton,Text等的控制件,当年写个HTML用的标签语言,那是何等的轻松写意,到了python这里是真的难受:你要先创建一个控制键对象,还要在构造的时候说明它是部署在哪个控制键上(说明它的父标签是谁),然后指定它的文本内容(就相当于标签内的文本),还有一大堆的属性等着你填,最后还要pack或者grid一下(就是这些控制件在整个页面上的布局),让我回忆起被Java的GUI支配的恐惧.
总之就是一堆繁琐而细碎的东西,学这个就感觉洗碗或者洗衣服或者写作业一样,纯粹就是一种折磨.