Tkinter
Tkinter
from tkinter import *
TK()
通常我们将使用Tk( )方法建立的窗口称为根窗口(root window),未来可以在此根窗口中建立许多组件(widget),甚至也可以在此根窗口建立上层窗口
window = TK()
mainloop()
mainloop( )方法可以让程序继续执行,同时进入等待与处理窗口事件,若是单击窗口右上方的“关闭”按钮,此程序才会结束。
window.mainloop()
与窗口相关的设置。
- title( ):窗口标题。
- geometry(“widthxheight”):窗口的宽与高,单位是像素。
- maxsize(width,height):拖曳时可以设置窗口最大的宽(width)与高(height)。
- resizeable(True,True):可设置是否更改窗口大小,第一个参数是宽,第二个参数是高,如果要固定窗口宽与高,可以使用resizeable(0,0)。
*config()
config(option=value)窗口组件的通用方法,
为对象设置选择性参数内容,通过设置option为bg参数时,可以设置窗口组件的背景颜色。
destroy() & quit()
window.destroy可以关闭window窗口对象,同时程序结束。
另一个常用的是window.quit,可以让Python Shell内执行的程序结束,但是window窗口则继续执行
Label()
Label( )方法可以用于在窗口内建立文字或图形标签,
Label( )方法的第一个参数是父对象,表示这个标签将建立在哪一个父对象内。
下列是Label( )方法内其他常用的options参数。
- text:标签内容,如果有"\n"则可建立多行文字。
- width:标签宽度,单位是字符。
- height:标签高度,单位是字符。
- bg或background:背景色彩。
- fg或foreground:字体色彩。
- font( ):可选择字体与大小。
- textvariable:可以设置标签以变量方式显示。
- image:标签以图形方式呈现。
- relief:默认是relief=flat,可由此控制标签的外框,有下列选项.
- flat
- groove
- raised
- ridge
- solid
- sunken
- justify:在多行文件时最后一行的对齐方式有LEFT/CENTER/RIGHT(靠左/居中/靠右),默认是居中对齐
窗口组件配置管理员
在设计GUI程序时,可以使用3种方法包装和定位各组件的位置,这3种方法又称为窗口组件配置管理员(Layout Management)
*pack()
pack( )方法主要是包装窗口的组件和定位窗口的对象
当窗口有多个组件时,使用pack( )可以让组件由上往下排列然后显示
这是系统的默认环境。
使用pack( )方法时,也可以增加side参数设置组件的排列方式,此参数的值如下。
- TOP:这是默认值,由上往下排列。
- BOTTOM:由下往上排列。
- LEFT:由左往右排列。
- RIGHT:由右往左排列。
fill=Y: 设置此对象高度与父对象相同
使用pack( )方法时,窗口组件间的距离是1像素,
如果需要有适度间距,可以增加参数padx/pady,代表水平间距/垂直间距,可以分别在组件间增加间距。
*grid( )
这是一种以格状(类似Excel电子表格)包装和定位窗口组件的方法,使用row和column参数。
可以适度调整grid( )方法内的row和column值,即可包装窗口组件的位置。
在grid( )方法内也可以增加sticky参数,
可以用此参数设置N/S/W/E,意义是上/下/左/右对齐。
此外,也可以增加padx/pady参数分别设置组件与相邻组件的x轴间距/y轴间距。
columnspan参数可以设置控件在column方向的合并数量
rowspan参数可以设置控件在row方向的合并数量。
*place()
使用place( )方法内的x和y参数可以直接设置窗口组件的左上方位置,
单位是像素,窗口显示区的左上角是(x=0,y=0),x是往右递增,y是往下递增。
使用这种方法时,窗口将不会自动重设大小,而是使用默认的大小显示
Button()
功能按钮也可称为按钮,在窗口组件中可以设计单击功能按钮时,执行某一个特定的动作
Button( )方法的第一个参数是父对象,表示这个功能按钮将建立在哪一个窗口内。
下列是Button( )方法内其他常用的options参数。
- text:功能按钮名称。
- width:宽,单位是字符宽。
- height:高,单位是字符高。
- bg或background:背景色彩。
- fg或foreground:字体色彩。
- image:功能按钮上的图形,
- command:单击功能按钮时,执行此参数所指定的方法。
变量类型
有些窗口组件在执行时会更改内容,此时可以使用tkinter模块内的变量类型(Variable Classes),它的使用方式如下。
x = IntVar() # 整数变量,默认0
x = DoubleVar() # 浮点数变量,默认0.0
x = StringVar() # 字符串变量,默认""
x = BooleanVar() # 布尔值变量,1是True,2是False
可以使用get( )方法取得变量内容,使用set( )方法设置变量内容。
Entry
文本框Entry通常是指单行的文本框
Entry( )方法的第一个参数是父对象,表示这个文本框将建立在哪一个窗口内。
下列是Entry( )方法内其他常用的options参数。
- width:宽,单位是字符宽。
- height:高,单位是字符高。
- bg或background:背景色彩。
- fg或foreground:字体色彩。
- state:输入状态,默认是NORMAL,表示可以输入,DISABLE则是无法输入。
- textvariable:文字变量。
- show:显示输入字符,例如,show=’*'表示显示星号,常用于密码字段输入。
*insert()
在tkinter模块的应用中可以使用insert(index,s)方法插入字符串,
s是所插入的字符串,字符串会插入在index位置前。
程序设计时可以使用这个方法为文本框建立默认的文字,通常会将它放在Entry( )方法建立完文本框后
*delete()
在tkinter模块的应用中可以使用delete(first,last=None)方法删除Entry内的字符串,
如果要删除整个字符串可以使用delete(0,END)。
Text()
可以将Text想成是Entry的扩充,可以在此输入多行文本,
甚至也可以使用此区域建立简单的文字编辑程序或是利用它设计网页浏览程序。
Text( )方法的第一个参数是父对象,表示这个文字区域将建立在哪一个窗口内。
下列是Text( )方法内其他常用的options参数。
- width:宽,单位是字符宽。
- height:高,单位是字符高。
- bg或background:背景色彩。
- fg或foreground:字体色彩。
- state:输入状态,默认是NORMAL,表示可以输入,DISABLE则是无法输入。
- xscrollbarcommand:水平滚动条。
- yscrollbarcommand:垂直滚动条
- wrap:这是换行参数,默认是CHAR,如果输入数据超出行宽度时,必要时会将单字依拼音拆成不同行输出。如果是WORD,则不会将单字拆成不同行输出。如果是NONE,则不换行,这时将有水平滚动条。
*insert() & delete()
与Entry()同
Scrollbar()
滚动条
在设计滚动条时,第一个参数,窗口对象
选项按钮Radiobutton
选项按钮Radio Button名称的由来是无线电的按钮,在收音机时代可以用无线电的按钮选择特定频道。选项按钮最大的特点可以用鼠标单击方式选取此选项,同时一次只能有一个选项被选取。
Radiobutton( )方法的第一个参数是父对象,表示这个选项按钮将建立在哪一个窗口内。
下列是Radiobutton( )方法内其他常用的options参数。
- text:选项按钮旁的文字。
- font:字体。
- height:选项按钮的文字有几行,默认是1行。
- width:选项按钮的文字区间有几个字符宽,省略时会自行调整为实际宽度。
- padx:默认是1,可设置选项按钮与文字的间隔。
- pady:默认是1,可设置选项按钮的上下间距。
- value:选项按钮的值,可以区分所选取的选项按钮。
- indicatoron:当此值为0时,可以建立盒子选项按钮。
- command:当用户更改选项时,会自动执行此函数。
- variable:设置或取得目前选取的单选按钮,它的值类型通常是IntVar或StringVar。
复选框Checkbutton
在屏幕上是一个方框,它与选项按钮最大的差异在于它是复选。
Checkbutton( )方法的第一个参数是父对象,表示这个复选框将建立在哪一个窗口内。
下列是Checkbutton( )方法内其他常用的options参数。
- text:复选框旁的文字。
- font:字体。
- height:复选框的文字有几行,默认是1行。
- width:复选框的文字有几个字符宽,省略时会自行调整为实际宽度。
- padx:默认是1,可设置复选框与文字的间隔。
- pady:预设是1,可设置复选框的上下间距。
- command:当用户更改选项时,会自动执行此函数。
- variable:设置或取得目前选取的复选框,它的值类型通常是IntVar或StringVar。
messagebox()
Python的tkinter模块内有messagebox模块,这个模块提供了8个对话框,这些对话框有不同的使用场合。
- showinfo(title,message,options):显示一般提示信息。
- showwarning(title,message,options):显示警告信息。
- showerror(title,message,options):显示错误信息。
- askquestion(title,message,options):显示询问信息。若单击“是”或Yes按钮会返回yes,若单击“否”或No按钮会返回no。
- askokcancel(title,message,options):显示确定或取消信息。若单击“确定”或OK按钮会返回True,若单击“取消”或Cancel按钮会返回False。
- askyesno(title,message,options):显示是或否信息。若单击“是”或Yes按钮会返回True,若单击“否”或No按钮会返回False。
- askyesnocancel(title,message,options):显示是或否或取消信息。
- askretrycancel(title,message,options):显示重试或取消信息。若单击“重试”或Retry按钮会返回True,若单击“取消”或Cancel按钮会返回False。
上述对话框方法内的参数大致相同,title是对话框的名称,message是对话框内的文字。options是选择性参数,可能有下列3种取值。
- (1)default constant:默认按钮是OK(确定)、Yes(是)、Retry(重试)在前面,也可更改此设置。
- (2)icon(constant):可设置所显示的图标,有INFO、ERROR、QUESTION、WARNING等4种图示可以设置。
- (3)parent(widget):指出当对话框关闭时,焦点窗口将返回父窗口。
PhotoImage()
图形功能可以应用于许多地方,例如,标签、功能按钮、选项按钮、文字区域等。
在使用前可以用PhotoImage(file = ’ ’ )方法建立此图形对象,然后再将此对象适度应用于其他窗口组件。
一般功能按钮是用文字当作按钮名称,也可以用图形当作按钮名称,若要使用图形当作按钮,
在Button( )内可以省略text参数设置按钮名称,
但是在Button( )内要增加image参数设置图形对象。若是要图形和文字并存在功能
按钮上,需增加参数compund=xx,xx可以是LEFT、TOP、RIGHT、BOTTOM、CENTER,
分别代表图形在文字的左、上、右、下、中央。
Scale()
Scale可以翻译为尺度,Python的tkinter模块有提供Scale( )方法,我们可以移动尺度盒产生某一范围的数字。
使用尺度时可以用set( )方法设置尺度的值,用get( )方法取得尺度的值。
Scale( )方法的第一个参数是父对象,表示这个尺度控制将建立在哪一个窗口内。
下列是Scale( )方法内其他常用的options参数 。
- from_:尺度范围值的初值。
- to:尺度范围值的末端值。
- orient:默认是水平尺度,可以设置水平HORIZONTAL或垂直VERTICAL。
- command:当用户更改选项时,会自动执行此函数。
- length:尺度长度,默认是100。
Menu()
窗口中一般会有菜单设计。菜单是一种下拉式的窗体,在这个窗体中可以设计菜单项。
Menu( )方法的第一个参数是父对象,表示这个菜单将建立在哪一个窗口内。
下列是Menu( )方法内其他常用的options参数。
- activebackground:当鼠标移置此菜单项时的背景色。
- bg:菜单项未被选取时的背景色。
- fg:菜单项未被选取时的前景色。
- image:菜单项的图示。
- tearoff:菜单上方的分隔线,有分隔线时tearoff等于1,此时菜单项从1开始放置。如果将tearoff设为0时,此时不会显示分隔线,但是菜单项将从0开始存放。下列是其他相关的方法。
- add_cascade( ):建立分层菜单,同时让此子功能项目与父菜单建立链接。
- add_command( ):增加菜单项。
- add_separator( ):增加分隔线。
HelloWorld
window = Tk()
window.title('Tk')
window.geometry("260x70")
label = Label(window,text = 'Hello,world',font = 'None 20')
label.pack()
window.mainloop()
小计算器
只有加减乘除的计算器…
from tkinter import *
window = Tk()
window.title("计算器")
window.geometry("200x250")
equ = StringVar()
equ.set("0\n0")
eq=["",""]
def addEqu(a):
global eq
eq[0]+=a
try:
eq[1] = str(eval(eq[0]))
except:
pass
equ.set(eq[0]+"\n"+eq[1])
def subEqu():
global eq
eq[0]=eq[0][:-1]
try:
eq[1] = str(eval(eq[0]))
except:
pass
equ.set(eq[0]+"\n"+eq[1])
text = Label(window,width=23,textvariable = equ,relief=RAISED,height=2,font = "None 10",anchor=E)
text.grid(row=0,column=0,columnspan=4)
Button(window,width=3,height=2,text = "1",command = lambda: addEqu("1")).grid(row=1,column = 0)
Button(window,width=3,height=2,text = "2",command = lambda: addEqu("2")).grid(row=1,column = 1)
Button(window,width=3,height=2,text = "3",command = lambda: addEqu("3")).grid(row=1,column = 2)
Button(window,width=3,height=2,text = "+",command = lambda: addEqu("+")).grid(row=1,column = 3)
Button(window,width=3,height=2,text = "4",command = lambda: addEqu("4")).grid(row=2,column = 0)
Button(window,width=3,height=2,text = "5",command = lambda: addEqu("5")).grid(row=2,column = 1)
Button(window,width=3,height=2,text = "6",command = lambda: addEqu("6")).grid(row=2,column = 2)
Button(window,width=3,height=2,text = "-",command = lambda: addEqu("-")).grid(row=2,column = 3)
Button(window,width=3,height=2,text = "7",command = lambda: addEqu("7")).grid(row=3,column = 0)
Button(window,width=3,height=2,text = "8",command = lambda: addEqu("8")).grid(row=3,column = 1)
Button(window,width=3,height=2,text = "9",command = lambda: addEqu("9")).grid(row=3,column = 2)
Button(window,width=3,height=2,text = "*",command = lambda: addEqu("*")).grid(row=3,column = 3)
Button(window,width=3,height=2,text = "0",command = lambda: addEqu("0")).grid(row=4,column = 0)
Button(window,width=3,height=2,text = ".",command = lambda: addEqu(".")).grid(row=4,column = 1)
Button(window,width=3,height=2,text = "Del",command = lambda:subEqu() ).grid(row=4,column = 2)
Button(window,width=3,height=2,text = "/",command = lambda: addEqu("/")).grid(row=4,column = 3)
window.mainloop()
没有括号真的很遗憾…
*通用属性anchor
所谓的锚(anchor)其实是指标签文字在标签区域输出位置的设置,在默认情况下Widget控件是上下与左右居中对齐,可以使用anchor选项设置组件的对齐方式。