''' Python中的“copy”与“reference” 每个对象对应一个实体,一个实体可以对应多个别名,python没有像C++语言的参数和引用的之分,python统一使用别名(alia)。 对于简单(或者称为基本)和不可修改类型,python使用“copy”别名的方式;对于复合和可修改类型,python使用“reference”别名 1.使用“copy”别名,必须使用基本类型(int,float,string,tuple) ''' # 整型数值 x = 10 y = x print x,y # 10,10 y = 40 print x,y # 10,40 # x的值还为10,y的值变为40 ''' y = x是对象复制,x与y分别使用不同的对象实体,故y只改变后,x值还为10 ''' ''' 2.使用“reference”别名,类型为自定义一个Point ''' #定义一个Point class Point: pass; a = Point() a.x = 10 # 给对象Point再加一个别名 b = a # 打印原始数据 print a.x,b.x # 使用别名b访问Point对象 b.x = 40 # 打印修改后的Point对象 print a.x,b.x ''' b = a为Point对象实体添加另外的一个别名,当再次调用b.x = 40时,b指向的实体改变,其x属性重新赋值为40.因x与y指向同一个实体, 故a的属性x也改为40 ''' |
''' python不单单用作结构化编程,她还是面向对象的高级语言,支持类(class),本文将介绍Python面向对象的编程思想。类(class)被用来用户自定义数据类型,用户使用类(class)来组织数据,管理数据。 类(class)的定义 类(class)的属性(attribute) 类(class)的方法(method) 类(chalss)成员的控制域 类(class)的继承与组合 1.类的定义,类的定义使用关键字class,后跟类的名称,及":"。如定义一个Point类 ''' # 定义一个空的类,没有任何属性与方法 class Point: pass ''' 向类中添加类属性(有的称之为类成员),类属性与其它的变量使用方法一致,第一次使用便是对此变量的定义,属性的作用域为整个类,即这个类的所有方法可以访问此属性,定义Point属性的属性x和y ''' # 定义一个空的类,没有任何属性与方法 class Point: # 定义x和y坐标 x = 10 y = 10 ''' 类方法为特殊的函数,其定义方法与函数类似,但有一个默认的参数lf,表示此类对象的实例(instance),定义类的方法,设置x的方法tX和获取x的方法getX。 ''' # 定义一个完整的类,包含属性与方法 class Point: # 定义x和y坐标 x = 10 y 爆肚满= 10 def tX(lf,x_): lf.x = x_ def getX(lf): return lf.x def tY(lf,y_): lf.y = y_ def getY(lf): return lf.y def tXY(lf,x_,y_): lf.tX(x_) lf.tY(y_) ''' 注意:这个类方法如何访问类属性,使用lf.x,而不是x。python类方法与C++不同,类的成员方法不会自动使用类的属性,必须使用lf明确指定。如果只使用x,则在tX函数中创建了一个变量x,并将其值设置为_x。 同样对于类方法之间互相访问时也必须使用lf指定为调用的为类的方法。 ''' # python还支持在类定义块之外定义方法,这个方法满足类方法,例如先定义一个函数outX def out_tX(lf,x_): lf.x = x_ # 然后定义类,并将类成员h赋值为out_tX class Point: x = 10 y = 10 tX = out_tX ''' 创建一个类的对象,并访问这个类的属性和方法 ''' # 创建Point的一个对象 pt = Point() # 设置坐标x的值 pt.x = 10 # 获取坐标x的值 print pt.x # 访问对象的方法 pt.tX(20) ''' C++中有函数重载的概念,python鲁迅时代背景则没有,如果有如下函数定义 def f(): print 'f' def f(x): print 'f(x)' f() f(20) 出错信息 TypeError: f() takes exactly 1 argument (0 given) 由于f先定义为无参数的函数,后有定义为带一个参数的函数,及f被重新定义,所以再次调用 f()时,解释器抱怨找不到无参数名称为f的函数。但可以使用如下 def f(): print 'f' def f(x): print 'f(x)' #此id已被重新定义,可以这样解释: ## x = 10 ## x = 20 #此时x的值已经被改编为20,已不再是10无法在访问10 #f() f(20) ''' ''' C++还有构造函数(constructor)的概念,这个函数为一特殊的函数,在创建对象时自动被调用,python中也没有构造函数,有一个功能类似的函数,用来初始化类属性,这个函数为: __init__,如下代码,在创建对象时将类属性初始化 ''' class Point: x = 10 y = 10 def __init__(lf,x_,y_): lf.x = x_ lf.y = y_ # 将坐标(x,y)设置为(20,20) pt = Point(20,20) print pt.x,pt.y ''' 类的成员(属性和方法),python默认使用public,即属性与方法可以被直接访问,这一点与C++也不相同,python改变属性可见性的是通过表示ID,私有成员以"前导字符_至少两个,后尾字符_最多一个"表示,如定义私有属性和私有方法 私有属性: __pri1 前导字符个数2 ___pri2 前导字符个数3 ____pri3_ 前导字符个数4,后尾字符1 共有属性: _pub1 前导字符1 ___pri2__ 前导字符3,后尾字符2 ''' class Point: # 私有属性,只能通过类方法访问 __x = 10 # 私有方法,可被其他类方法调用 def __tX(lf,x_): # 访问私有属性 lf.__x = x_ def tX(lf,x_): # 调用私有方法 lf.__tX(x_) def getX(lf): # 访问私有属性 return lf.__x pt = Point() # 直接访问__x # pt.__x # 解释器会抱怨没有__x属性 # AttributeError: Point instance has no attribute '__x' # 访问私有方法 # pt.__tX(10) # 解释器还是会抱怨没有属性__tX(python视方法也为属性) print pt.getX() pt.tX(20) print pt.getX() ''' 在类中可以定义属性,有此类创建的对象可以使用此类的所有属性,除此之外,python还支持动态向类或类对象中添加属性。向类中添加属性,其后所有的类对象便可以使用新添加的属性;若向类对象中添加属性,只用此类对象可以使用此属性 ''' '''向类中添加属性''' class Point:pass # 向类中添加属性z Point.z = 30 # 创建类对象 pt = Point() pp = Point() # 访问类属性z print Point.z # 访问类对象属性z,pp与pt均含有属性z print pt.z,pp.z '''向类对象中添加属性''' class Point:pass pt = Point() pp = Point() # 向类对象中添加属性 pt.z = 10 # 访问类的属性 # print Point.z # 解释器抱怨没有属性z #AttributeError: class Point has no attribute 'z' print pt.z # 访问pp对象的属性z # print pp.z #解释器抱怨没有z属性 #AttributeError: Point instance has no attribute 'z' ''' 类的继承与组合,实现代码重用。不用copy&paste代码,当创建新类时,不必全部从头开始,尽可能的使用已有代码。TIC++中使用两种方法:一种称为组合(composition);另一种称为继承(inheritance)。 继承语法格式: class class DerivedClassName(BaClassName):pass ''' '''子类访问父类属性''' class Point: x = 10 y = 20 def tX(lf,x_): lf.x = x_ def getX(lf): return lf.x class Circle(Point): r = 5 # 创建父类对象 pt = Point() # 创建子类对象 cl = Circle() # 访问父类的属性 print cl.x,cl.y # 访问父类的方法 cl.tX(40) print cl.x,cl.y '''重载父类属性,访问Circle属性''' class Point: x = 10 y = 20 def tX(lf,x_): lf.x = x_ def getX(lf): return lf.x class Circle(Point): x = 40 y = 50 r = 5 # 创建父类对象 pt = Point() # 创建子类对象 cl = Circle() # 访问Circle类的属性 print cl.x,cl.y # 40,50 '''重载父类属性,访问父类Point属性''' class Point: x = 10 y = 20 def tX(lf,x_): lf.x = x_ def getX(lf): return lf.x class Circle(Point): x = 40 y = 50 r = 5 # 访问父类的属性 def callBa(lf): # x,y已经被Circle重载,显示使用父类访问父类属性 print Point.x,Point.y # 创建子类对象 cl = Circle() # 访问Point类的属性 cl.callBa() # 10,20 ''' C++语言中的子类会自动调用父类的构造函数,python中的__init__不会自动调用父类的__init__,如果要调用必须显示的调用父类的__init__ ''' '''重载父类属性,访问父类属性''' class Point: def __init__(lf): print 'Point' class Circle(Point): def __init__(lf): # 显示调用父类的__init__函数 Point.__init__(lf) print 'Circle' cl = Circle() # Point # Circle ''' C++有抽象类,此类只定义函数接口(有的称之为interface),其具体的实现有子类来实现,python没有抽象类,实现方法:将基类函数接口设置为None团队精神正能量的句子,如果使用此基类创建对象,调用此函数时会出现异常,具体实现由其子类实现 ''' #抽象类 class Graphic: draw = None # 实现Graphic的draw class Point(Graphic): x = 10 y = 10 # 将draw赋值 def __init__(lf): lf.draw = lf.__draw # 实现抽象接口 def __draw(lf): print lf.x,lf.y # 实现Graphic的draw class Circle(Point): r = 5 # 将draw赋值 def __init__(lf): lf.draw = lf.__draw # 实现抽象接口 def __draw(lf): print lf.x,lf.y,lf.r # 创建各个类的对象 gp = Graphic() pt = Point() cl = Circle() #gp.各种笑的描写draw() # 函数调用出错 #TypeError: 'NoneType' object is not callable # 调用Point的draw pt.draw() # 调用Circle的draw cl.draw() ''' 类的组合:类的另一种重用方式,《C++ Primer plus》有介绍适用于此设计方法的类与类之间的关系,称之为”has-a“关系,与继承”is-a“关系相对应。 ”is-a“关系: 圆柱(cylinder)is-a特殊的圆(circle),它含有高度属性,圆(circle)为圆柱(cylinder)的父类; 圆(circle)is-a特殊的点,它含有半径属性,点(point)为圆(circle)的父类 ''' # 定义父类及子类 class Point:pass class Circle(Point):pass class Cylinder(Circle):pass ''' ”has-a"关系: 画布(canvas)上可以绘制各种图形(如:点(point)、圆(circle)和圆柱(cylinder)等)。绘图程序 定义如下关系 ''' # 定义容器类 class Canvas: # 包含三个类对象Point、Circle和Cylinder pt = Point() cl = Circle() cy = Cylinder() def __init__(lf): pass |
#Tkinter教程之Label篇 '''1.Label的第一个例子 text属性使用方法 ''' #要使用Tk模块,除非你不想使用这个模块,那整个教程就不需要看了 from Tkinter import * #初始化Tk root = Tk() #创建一个label,使用编码,到现在为止还没有使用过直接通过“drag-and-drop”就可以完成的IDE。 label = Label(root,text = 'Hello Tkinter') #显示label,必须含有此语句 label.pack() #root.pack() #但root是不需要(严格地说是必须不这样使用),否则解释器抱怨 #进入消息循环 root.mainloop() #控件的显示步骤: #1.创建这个控件 #2.指定这个空间的master,即这个控件属于哪一个 #3.告诉GM(geometry manager)有一个控件产生了 ''' 还有更简单的一个例子:将‘Hello Tkinter’打印到标题上,Label也不用创建了 from Tkinter import * root = Tk() root.title('hello Tkinter') root.mainloop() 再没法儿简化了,就这样吧 ''' '''2.在label上使用内置位图 bitmap的使用方法 ''' from Tkinter import * #初始化Tk root = Tk() #创建一个label,使用编码,到现在为止还没有使用过直接通过“drag-and-drop”就可以完成的IDE。 label = Label(root,bitmap = 'error') #上面的代码使用了内置位图error #显示label,必须含有此语句 label.pack() #进入消息循环 root.mainloop() ''' 其他可用的位图: * error * hourglass * info * questhead * question * warning * gray12 * gray25 * gray50 * gray75 若要查看各自的效果,可以使用相应的名称将bitmpa = 'error'替换。 据说还可以使用自己指定的位图文件,网上找了一下,格式如下: Label(root, bitmap="@/path/bitmapname") 不过我试了一下,从来没有成功过,我已经将位图该为单色的了:( 另:还有的网上的文章说明如何使用PhotoImage和BitmapImage显示bmp或gif文件,提到一点 防止图像文件被python自动回收(garbage collected),应将bmp或gif放到全局(global)或实体 (instance)中,使用如下两种方法,仍未奏效: ''' #使用image属性 # bm = PhotoImage(file = 'c:\\python.gif') # label = Label(root,image = bm) # label.bm = bm #错误信息: #TclError: image "pyimageXX" doesn't exist #使用bitmap属性 # bm = BitmapImage(file='c:\\python2.bmp') # label = Label(root,bitmap=bm) # label.bm = bm # label.pack() #错误信息: #TclError: format error in bitmap data ''' 虽然二者均没有起作用,还是要说明一下,bitmap与image的关系,如果同时指定这两参数,image 优先。 ''' '''3.改变控件的前景色和背景色 fg:前景色 bg:背景色 设置背景色的一个大的用处是:可以判断控件的大小(不同的控件使用不同的颜色,后续内容 可以使用此特性来调试container) ''' from Tkinter import * root = Tk() #在创建Label时指定各自使用的颜色 '''可以使用的颜色值:''' #使用颜色名称 Label(root,fg = 'red',bg = 'blue',text = 'Hello I am Tkinter').pack() #使用颜色值#RRGGBB Label(root,fg = 'red',bg = '#FF00FF',text = 'Hello I am Tkinter').pack() #使用系统相关的颜色值(Windows),不建议使用这样的值,不利于平台移植 Label(root,fg = 'red',bg = 'SystemButtonShadow',text = 'Hello I am Tkinter').pack() root.mainloop() ''' (1).使用颜色名称 Red Green Blue Yellow LightBlue ...... (2).使用#RRGGBB label = Label(root,fg = 'red',bg = '#FF00FF',text = 'Hello I am Tkinter') 指定背景色为绯红色 (3).除此之外,Tk还支持与OS相关的颜色值,如Windows支持 SystemActiveBorder, SystemActiveCaption, SystemAppWorkspace, SystemBackground, ...... ''' '''三别4.设置宽度与高度 width: 宽度 height: 高度 ''' from Tkinter import * root = Tk() #创建三个Label,分别显示red,blue,yellow #注意三个Label的大小,它们均与文本的长度有关 Label(root,text = 'red',bg = 'red').pack() Label(root,text = 'blue',bg = 'blue').pack() Label(root,text = 'yellow',bg = 'yellow').pack() #再创建三个Label,与上次不同的是这三个Label均使用width和heigth属性 #三个Label的大小由width和height指定 Label(root,bg = 'red',width = 10,height = 3).pack() Label(root,bg = 'blue',width = 10,height = 3).pack() Label(root,bg = 'yellow',width = 10,height = 3).pack() root.mainloop() '''5.同时使用图像与文本 compound: 指定文本(text)与图像(bitmap/image)是如何在Label上显示,缺省为None, 当指定image/bitmap时,文本(text)将被覆盖,只显示图像了。可以使用的值: left: 图像居左 right: 图像居右 top: 图像居上 bottom:图像居下 center:文字覆盖在图像上 bitmap/image: 显示在Label上的图像 text: 显示在Label上的文本 label = Label(root,text = 'Error',compound = 'left',bitmap = 'error') ''' from Tkinter import * root = Tk() #演示compound的使用方法 #图像与文本在Label中的位置 #图像居下 Label(root,text = 'botton',compound = 'bottom',bitmap = 'error').pack() #图像居上 Label(root,text = 'top',compound = 'top',bitmap = 'error').pack() #图像居右 Label(root,text = 'right',compound = 'right',bitmap = 'error').pack() #图像居左 Label(root,text = 'left',compound = 'left',bitmap = 'error').pack() #文字覆盖在图像上 Label(root,text = 'center',compound = 'center',bitmap = 'error').pack() #消息循环 root.mainloop() '''6.文本的多行显示 在Tk004中,使用width和heigth来指定控件的大小,如果指定的大小无法满足文本的要求是,会出现 什么现象呢?如下代码: Label(root,bg = 'welcome to jcodeer.cublog',width = 10,height = 3).pack() 运行程序,超出Label的那部分文本被截断了,常用的方法是:使用自动换行功能,及当文本长度大于 控件的宽度时,文本应该换到下一行显示,Tk不会自动处理,但提供了属性: wraplength: 指定多少单位后开始换行 justify: 指定多行的对齐方式 ahchor: 指定文本(text)或图像(bitmap/image)在Label中的显示位置 可用的值: e w n s ne sw sn center 布局如下图 nw n ne w center e sw s ''' from Tkinter import * root = Tk() #左对齐,文本居中 Label(root,text = 'welcome to jcodeer.cublog.cn',bg = 'yellow',width = 40,height = 3,wraplength = 80,justify = 'left').pack() #居中对齐,文本居左 Label(root,text = 'welcome to jcodeer.cublog.cn',bg = 'red',width = 40,height = 3,wraplength = 80,anchor = 'w').pack() #居中对齐,文本居右 Label(root,text = 'welcome to jcodeer.cublog.cn',bg = 'blue',width = 40,height = 3,wraplength = 80,anchor = 'e').pack() root.mainloop() ''' 运行一下程序就可以直观的看出,justify与anchor的区别了:一个用于控制多行的对齐;另一个用于 控制整个文本块在Label中的位置 '' |
#JTkinter教程之Button篇(1) #Button功能触发事件 '''1.一个简单的Button应用''' from Tkinter import * #定义Button的回调函数 def helloButton(): print 'hello button' root = Tk() #通过command属性来指定Button的回调函数 Button(root,text = 'Hello Button',command = helloButton).pack() root.mainloop() ''' 执行的结果:每次点击一次,程序向标准输出打印'hello button',以上为Button使用方法,可以 再做一下简化,如不设置Button的回调函数,这样也是允许的但这样的结果与Label没有什么太 大的区别,只是外观看起来有所不同罢了,失去了Button的作用。 from Tkinter import * root = Tk() #下面的relief = FLAT设置,就是一个Label了!!! Button(root,text = 'hello button',relief=FLAT).pack() root.mainloop() ''' '''2.测试Button的relief属性''' #运行下面的代码可以看到Button的各个不同效果,均没有回调函数。 from Tkinter import * root = Tk() #flat, groove, raid, ridge, solid, or sunken Button(root,text = 'hello button',relief=FLAT).pack() Button(root,text = 'hello button',relief=GROOVE).pack() Button(root,text = 'hello button',relief=RAISED).pack() Button(root,text = 'hello button',relief=RIDGE).pack() Button(root,text = 'hello button',relief=SOLID).pack() Button(root,text = 'hello button',relief=SUNKEN).pack() root.mainloop() ''' Button显示图像 image:可以使用gif图像,图像的加载方法img = PhotoImage(root,file = filepath bitmap:使用X11 格式的bitmap,Windows的Bitmap没法显示的,在Windows下使用GIMP2.4将windows Bitmap转换为xbm文件,依旧无法使用.linux下的X11 bitmap编辑器生成的bitmap还没有测试,但可 以使用内置的位图。 (1).使用位图文件 bp = BitmapImage(file = "c:\\python2.xbm") Button(root,bitmap = bp).pack() (2).使用位图数据 BITMAP = """ #define im_width 32 #define im_height 32 static char im_bits[] = { 0xaf,0x6d,0xeb,0xd6,0x55,0xdb,0xb6,0x2f, 0xaf,0xaa,0x6a,0x6d,0x55,0x7b,0xd7,0x1b, 0xad,0xd6,0xb5,0xae,0xad,0x55,0x6f,0x05, 0xad,0xba,0xab,0xd6,0xaa,0xd5,0x5f,0x93, 0xad,0x76,0x7d,0x67,0x5a,0xd5,0xd7,0xa3, 0xad,0xbd,0xfe,0xea,0x5a,0xab,0x69,0xb3, 0xad,0x55,0xde,0xd8,0x2e,0x2b,0xb5,0x6a, 0x69,0x4b,0x3f,0xb4,0x9e,0x92,0xb5,0xed, 0xd5,0xca,0x9c,0xb4,0x5a,0xa1,0x2a,0x6d, 0xad,0x6c,0x5f,0xda,0x2c,0x91,0xbb,0xf6, 0xad,0xaa,0x96,0xaa,0x5a,0xca,0x9d,0xfe, 0x2c,0xa5,0x2a,0xd3,0x9a,0x8a,0x4f,0xfd, 0x2c,0x25,0x4a,0x6b,0x4d,0x45,0x9f,0xba, 0x1a,0xaa,0x7a,0xb5,0xaa,0x44,0x6b,0x5b, 0x1a,0x55,0xfd,0x5e,0x4e,0xa2,0x6b,0x59, 0x9a,0xa4,0xde,0x4a,0x4a,0xd2,0xf5,0xaa }; """ 使用tuple数据来创建图像 bmp = BitmapImage(data = BITMAP) Button(root,bitmap = bmp) ''' '''3.与Label一样,Button也可以同时显示文本与图像,使用属性compound''' from Tkinter import * root = Tk() #图像居下,居上,居右,居左,文字位于图像之上 Button(root,text = 'botton',compound = 'bottom',bitmap = 'error').pack() Button(root,text = 'top',compound = 'top',bitmap = 'error').pack() Button(root,text = 'right',compound = 'right',bitmap = 'error').pack() Button(root,text = 'left',compound = 'left',bitmap = 'error').pack() Button(root,text = 'center',compound = 'center',bitmap = 'error').pack() #消息循环 root.mainloop() '''4.控件焦点问题 创建三个Button,各自对应回调函数;将第二个Button设置焦点,程序运行是按“Enter”,判断 程序的打印结果 ''' from Tkinter import * def cb1(): print 'button1 clicked' def cb2(event): print 'button2 clicked' def cb3(): print 'button3 clicked' root = Tk() b1 = Button(root,text = 'Button1',command = cb1) b2 = Button(root,text = 'Button2') b2.bind("<Return>",cb2) b3 = Button(root,text = 'Button3',command = cb3) b1.pack() b2.pack() b3.pack() b2.focus_t() root.mainloop() ''' 上例中使用了bind方法,它建立事件与回调函数(响应函数)之间的关系,每当产生<Enter>事件 后,程序便自动的调用cb2,与cb1,cb3不同的是,它本身还带有一个参数----event,这个参数传递 响应事件的信息。 ''' from Tkinter import * def printEventInfo(event): print 'event.time = ' , event.time print 'pe = ' , event.type print 'event.WidgetId = ', event.widget print 'event.KeySymbol = ',event.keysym root = Tk() b = Button(root,text = 'Infomation') b.bind("<Return>",printEventInfo) 自动挡车起步正确方法b.pack() b.focus_t() root.mainloop() ''' 犯了个错误,将<Return>写成<Enter>了,结果是:当鼠标进入Button区域后,事件printEventInfo 被调用。程序打印出了event的信息。 ''' |
# Tkinter教程之Button篇(2) '''5.指定Button的宽度与高度 width: 宽度 heigth: 高度 使用三种方式: 1.创建Button对象时,指定宽度与高度 2.使用属性width和height来指定宽度与高度 3.使用configure方法来指定宽度与高度 ''' from Tkinter import * root = Tk() b1 = Button(root,text = '30X1',width = 30,height = 2) b1.pack() b2 = Button(root,text = '30X2') b2['width'] = 30 b2['height'] = 3 b2.pack() b3 律所实习日志= Button(root,text = '30X3') b3.configure(width = 30,height = 3) b3.pack() root.mainloop() # 上述的三种方法同样也适合其他的控件 '''6.设置Button文本在控件上的显示位置 anchor: 使用的值为:n(north),s(south),w(west),e(east)和ne,nw,,sw,就是地图上的标识位置了,使用 width和height属性是为了显示各个属性的不同。 ''' from Tkinter import * root = Tk() #简单就是美! for a in ['n','s','e','w','ne','nw','','sw']: Button(root, text = 'anchor', anchor = a, width = 30, height = 4).pack() #如果看的不习惯,就使用下面的代码。 # Button(root,text = 'anchor',width = 30,height =4).pack() # Button(root,text = 'anchor',anchor = 'center',width = 30,height =4).pack() # Button(root,text = 'anchor',anchor = 'n',width = 30,height = 4).pack() # Button(root,text = 'anchor',anchor = 's',width = 30,height = 4).pack() # Button(root,text = 'anchor',anchor = 'e',width = 30,height = 4).pack() # Button(root,text = 'anchor',anchor = 'w',width = 30,height = 4).pack() # Button(root,text = 'anchor',anchor = 'ne',width = 30,height = 4).荷花介绍pack() # Button(root,text = 'anchor',anchor = 'nw',width = 30,height = 4).pack() # Button(root,text = 'anchor',anchor = '',width = 30,height = 4).pack() # Button(root,text = 'anchor',anchor = 'sw',width = 30,height = 4).pack() root.mainloop() '''7.改变Button的前景色与背景色 fg: 前景色 bg:背景色 ''' from Tkinter import * root = Tk() bfg = Button(root,text = 'change foreground',fg = 'red') bfg.pack() bbg = Button(root,text = 'change backgroud',bg = 'blue') bbg.pack() root.mainloop() '''8.设置Button的边框 bd(bordwidth):缺省为1或2个像素 ''' # 创建5个Button边框宽度依次为:0,2,4,6,8 from Tkinter import * root = Tk() for b in [0,1,2,3,4]: Button(root, text = string(b), bd = b).pack() root.mainloop() '''9.设置Button的风格 relief/raid/sunken/groove/ridge ''' from Tkinter import * root = Tk() for r in ['raid','sunken','groove','ridge']: Button(root, text = r, relief = r, width = 30).pack() root.mainloop() '''10.设置Button状态 normal/active/disabled ''' from Tkinter import * root = Tk() def statePrint(): print 'state' for r in ['normal','active','disabled']: Button(root, text = r, state = r, width = 30, command = statePrint).pack() root.mainloop() #例子中将三个Button在回调函数都设置为statePrint,运行程序只有normal和active激活了回调函数,而disable按钮则没有,对于暂时不 #需要按钮起作用时,可以将它的state设置为disabled属性 '''11.绑定Button与变量 设置Button在textvariable属性 ''' from Tkinter import * root = Tk() def changeText(): if b['text'] == 'text': v.t('change') print 'change' el: v.t('text') print 'text' v = StringVar() b = Button(root,textvariable = v,command = changeText) v.t('text') b.pack() root.mainloop() ''' 将变量v与Button绑定,当v值变化时,Button显示的文本也随之变化 ''' |
本文发布于:2023-07-14 07:46:49,感谢您对本站的认可!
本文链接:https://www.wtabcd.cn/fanwen/fan/89/1080901.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |