现在很少有人用tkinter,所以真正研究它的人就更少了。我不想更新tkinter。看到很多人在学tkinter,但是用Python做布局,没人做。不过还是更新了几节tkinter,inPython从入门到精通的教程。tkinter包是Python的标准包,所以我们不需要安装任何东西就可以使用它。窗口主框架每个tkinter应用程序的主框架可以包括以下部分。定义窗口window和窗口的一些属性,然后写入窗口内容,最后执行window.mainloop使窗口存活。importtkinterastkwindow=tk.Tk()window。title('mywindow')window.geometry('200x100')#这里是窗口的内容window.mainloop()窗口内容这次我们要创建一个标签tk.Label用于描述,例如:importtkinterastkwindow=tk.Tk()window.title('mywindow')window.geometry('200x100')l=tk.Label(window,text='OMG!thisisTK!',#labeltextbg='green',#backgroundcolorfont=('Arial',12),#fontandfontsizewidth=15,height=2#labellengthandwidth)l.pack()#fixedwindowpositionwindow.mainloop()控件上面的label是一个控件,还有有很多,比如按钮、标签和文本框等,如下图所示,控件的常用属性,比如大小、字体和颜色等。可以根据控件的显示形式选择相应的属性。具体属性如下:tkinter绑定事件tkinter绑定事件就是定义一个函数,然后通过command属性传入函数名。接下来通过Button绑定事件,点击就会出现润森爱learningfromtkinterimport*defp_label():globalrootLb=Label(root,text='润森爱学习')Lb.pack()root=tk()root.title("ApplicationWindow")B_n=Button(root,text='Clickme',command=p_label,bg='red')#command不能有任何标点符号B_n.pack()root.mainloop()布局说明一个窗口要有布局,就是packing的时候需要设置side,expand需要展开,fill需要填充吗?fromtkinterimport*root=Tk()root.title("Applicationwindow")Button(root,text='1').pack(side=LEFT,expand=YES,fill=Y)Button(root,text='2').pack(side=TOP,expand=YES,fill=BOTH)Button(root,text='3').pack(side=RIGHT,expand=YES,fill=NONE)Button(root,text='4').pack(side=LEFT,expand=NO,fill=Y)Button(root,text='5').pack(side=TOP,expand=YES,fill=BOTH)Button(root,text='6').pack(side=BOTTOM,expand=YES)Button(root,text='7').pack(anchor=SE)root.mainloop()除了pack之外还有一个网格,网格将组件布局为表格下面做一个电话拨号GUIfromtkinterimport*root=Tk()labels=[['1','2','3'],#text,布局为网格['4','5','6'],['7','8','9'],['*','0','#']]forrinrange(4):#Lineloopforcinrange(3):#Columnlooplabel=Lab??el(root,relief=RAISED,#设置边框格式padx=10,#Widelabeltext=labels[r][c])#LabelTextlabel.grid(row=r,column=c)#将label放在r行c列。root.mainloop()制作日历,教你制作电话拨号界面。你能在下面做一个简单的日历吗?我你不会看到的,不是我看不起你,你放心,我这里需要导入日历模块,importcalendarfromtkinterimport*root=Tk()labels=[['Mon','Tue','Wed','Thu','Fri','Sat','Sun']]MonthCal=calendar.monthcalendar(2020,5)foriinrange(len(MonthCal)):labels.append(MonthCal[i])forrinrange(len(MonthCal)+1):forcinrange(7):iflabels[r][c]==0:labels[r][c]=''label=Lab??el(root,padx=5,pady=5,text=str(labels[r][c]))label.grid(row=r,column=c)root.mainloop()丰富我们的日历上面的日历只是一个辣鸡,没有任何功能,需求很简单,只需使用两个按钮即可向上滚动,向下滚动。上下翻动两个按钮清空界面,然后将日历添加到标签列表中,放置日历。看似很简单,其实就是这么简单。大家想一想,怎么做。我还是实现标准的代码#@Author:Runsenimportcalendarfromtkinterimport*root=Tk()defLabelCal(Year,Month):#第一行“年、月”的位置label=Lab??el(root,text=str(Year)+"年")label.grid(row=0,column=2)label=Lab??el(root,text=str(Month)+"month")label.grid(row=0,column=4)#labels列表:put"week"titlelabels=[['Mon','Tue','Wed','Thu','Fri','Sat','Sun']]#用日历库计算日历MonthCal=calendar.monthcalendar(Year,Month)#先清空界面forrinrange(7):forcinrange(7):label=Lab??el(root,width=5,padx=5,pady=5,text='')label.grid(row=r+1,column=c)#将日历添加到标签列表中foriinrange(len(MonthCal)):labels.append(MonthCal[i])#将日历放入forrinrange(len(MonthCal)+1):forcinrange(7):iflabels[r][c]==0:labels[r][c]=''label=Lab??el(root,width=5,padx=5,pady=5,text=str(labels[r][c]))label.grid(row=r+1,column=c)#Gridlayout#DefaultdateYear,Month=2020,5LabelCal(Year,Month)#button:EnterdefButtonPrevious():全局Year,MonthMonth=Month-1ifMonth<1:Month=Month+12Year=Year-1LabelCal(Year,Month)button1=Button(root,text='Previous',command=ButtonPrevious)button1.grid(row=len(MonthCal)+3,column=0)#button:CleardefButtonNext():globalYear,MonthMonth=Month+1ifMonth>12:Month=Month-12Year=Year+1LabelCal(Year,month)button2=Button(root,text='Next',command=ButtonNext)button2.grid(row=len(MonthCal)+3,column=6)root.mainloop()运行一波,实现最后的gif效果图片
