Tkinter教程(7)

2019-08-31 15:05

from Tkinter import * root = Tk()

def printSpin():

# 使用delete()方法删除指定索引的字符 sb.delete(0) print sb.get() sb = Spinbox(root,

values = (1234567890,234567890,34567890,4567890,567890, 67890,7890,890,90,0), command = printSpin #回调函数 ) sb.pack()

root.mainloop()

#这个程序显示的依次是1234567890,34567890,567890,7890,90。

#还不了解内部工作原理,先这样理解吧,使用delete时注意可能会出现这样的问题。

'''8.在Spinbox指定位置插入文本'''

#在每项后面添加.00表示精度,同样使用回调函数实现,代码如下: # -*- coding: cp936 -*- from Tkinter import * root = Tk()

def printSpin():

# 使用get()方法来得到当前的显示值 sb.insert(END,'.00') print sb.get()

sb = Spinbox(root,

from_ = 1234, #最小值 to = 9999, #最大值 increment = 1,

command = printSpin#回调函数 ) sb.pack()

root.mainloop()

#每次点击Spinbox按钮时就会调用printSpin函数,当前的显示值均添加了两个有数字\。这个与delete不同,倒是可以正确显示。 '''

delete所遇到的问题,insert真的就不会发生吗?再次对上面的代码进行测试,代码如下: '''

# -*- coding: cp936 -*- from Tkinter import * root = Tk()

def printSpin():

# 使用get()方法来得到当前的显示值 sb.insert(END,'0') print sb.get()

sb = Spinbox(root,

from_ = 1234, #最小值 to = 9999, #最大值 increment = 1,

command = printSpin #回调函数 ) sb.pack()

root.mainloop()

#在每个项的后加一个0,即将值变为原来的10倍,则程序的输出结果为123450,99990,同样也出现了异常

#现象,第一个例子的中出现正确的情况纯粹是个偶然,在整数的后添加.00相当于没有对其值进行改变,故下次

#使用的值依旧没有变化。 Scrollbar

'''Tkinter教程之Scrollbar篇''' #Scrollbar(滚动条),可以单独使用,但最多的还是与其它控件(Listbox,Text,Canva等)结合使用

'''1.创建一个Scrollbar'''

from Tkinter import * root = Tk()

Scrollbar(root).pack() root.mainloop()

#显示了一个Scrollbar,但什么也做不了,无法拖动slider。 from Tkinter import * root = Tk()

sl = Scrollbar(root) sl.set(0.5,0) sl.pack()

root.mainloop()

'''2.通过set方法来设置slider的位置'''

#使用水平滚动条,通过set将值设置为(0.5,1),即slider占整个Srollbar的一半 from Tkinter import * root = Tk()

sl = Scrollbar(root,orient = HORIZONTAL) sl.set(0.5,1) sl.pack()

root.mainloop()

'''3.使用回调函数(不建议这样使用)'''

# -*- coding: cp936 -*- from Tkinter import * root = Tk()

def scrollCall(moveto,pos):

#如何得到两个参数:使用如下打印中的信息,可以看到解释器传给scrollCall函数的两个参数,一个为

#moveto,参考手册可以得知,它是当拖动slider时调用的函数;另一个参数为slider的当前位置,我们

#可以通过set函数来设置slider的位置,因此使用这个pos就可以完成控制slider的位置。

#print moveto,pos sl.set(pos,0) print sl.get()

sl = Scrollbar(root,orient = HORIZONTAL,command = scrollCall) sl.pack()

root.mainloop()

#这样还有一个严重问题,只能对其进行拖动。对两个按钮及pagedwon/pageup的响应,由于up按钮响应的为三个参数,故会出

#现异常。这个例子只是用来说明command属性是可用的,如果喜欢自己可以处理所有的消息,将scrollCall是否可以改为变参数函数? #对于不同的输入分别进行不同的处理。

'''4.单独使用还是比较少见,大部分应用还是与其它控件的绑定,以下是将一个Listbox与Scrollbar绑定的例子''' # -*- coding: cp936 -*- from Tkinter import * root = Tk()

lb = Listbox(root) sl = Scrollbar(root)

sl.pack(side = RIGHT,fill = Y)

#side指定Scrollbar为居右;fill指定填充满整个剩余区域,到WM在时候再详细介绍这几个属性。

#下面的这句是关键:指定Listbox的yscrollbar的回调函数为Scrollbar的set lb['yscrollcommand'] = sl.set for i in range(100):

lb.insert(END,str(i)) #side指定Listbox为居左 lb.pack(side = LEFT)

#下面的这句是关键:指定Scrollbar的command的回调函数是Listbar的yview sl['command'] = lb.yview root.mainloop()

'''5.这样理解二者之间的关系:当Listbox改变时,Scrollbar调用set以改变slder的位置;当Scrollbar改变了slider的位置时,Listbox调用yview以显示新的list项,为了演示这两种关系先将yscrollcommad与scrollbar的set解除绑定,看看会有什么效果

'''

# -*- coding: cp936 -*- from Tkinter import * root = Tk()

lb = Listbox(root) sl = Scrollbar(root)

sl.pack(side = RIGHT,fill = Y)

#解除Listbox的yscrollcommand与Scrollbar的set绑定 #lb['yscrollcommand'] = sl.set for i in range(100):

lb.insert(END,str(i)) #使用索引为50的元素可见 lb.see(50)

lb.pack(side = LEFT) sl['command'] = lb.yview root.mainloop()

#运行结果,Listbox显示了50项,即Listbox的视图已经到50了,但Scrollbar的slider仍旧位于0处。也就是说Scroolbar没有收到set

#的命令。即说明解除此绑定,Scrollbar将不再响应Listbox视图改变的消息。但仍可以使用Scrollbar的slider来移动Listbox的视图。

'''6.再测试一下,解除Scrollbar的command与Listbox的yview的关系,测试代码如下:'''

# -*- coding: cp936 -*- from Tkinter import * root = Tk()

lb = Listbox(root) sl = Scrollbar(root)

sl.pack(side = RIGHT,fill = Y)

#下面的这句是关键:指定Listbox的yscrollbar的回调函数为Scrollbar的set lb['yscrollcommand'] = sl.set for i in range(100):

lb.insert(END,str(i*100)) #使用索引为50的元素可见 lb.see(50)

lb.pack(side = LEFT)

#解除Scrollbar的command与Listbox的yview的关系 #sl['command'] = lb.yview root.mainloop()

#运行程序,Scrollbar的slider已经到了50位置,也就是说Scrollbar响应了Listbox视图改变的消息,调用 了自己的set函数。

#进行操作:拖动slder或点击up/down按钮,Listbox的视图没有任何反应,即Listbox不会响应Scrollbar的消息了。

Menu

'''Tkinter教程之Menu篇''' '''1.创建一个简单的Menu'''

#添加菜单hello和quit,将hello菜单与hello函数绑定;quit菜单与root.quit绑定 # -*- coding: cp936 -*- from Tkinter import * root = Tk() def hello():

print 'hello menu' menubar = Menu(root)

#创建主菜单,每个菜单对应的回调函数都是hello

for item in ['Python','PHP','CPP','C','Java','JavaScript','VBScript']: menubar.add_command(label = item,command = hello) #将root的menu属性设置为menubar root['menu'] = menubar root.mainloop()

#这个菜单没有下拉菜单,仅包含两个菜单项

'''2.添加下拉菜单''' from Tkinter import * root = Tk()

def hello():

print 'hello menu' menubar = Menu(root)

filemenu = Menu(menubar,tearoff = 0)

for item in ['Python','PHP','CPP','C','Java','JavaScript','VBScript']: filemenu.add_commad(label = item,command = hello)

#将menubar的menu属性指定为filemenu,即filemenu为menubar的下拉菜单 menubar.add_cascade(label = 'Language',menu = filemenu) root['menu'] = menubar root.mainloop()

'''3.向菜单中添加Checkbutton项''' # -*- coding: cp936 -*- from Tkinter import * root = Tk()

#每次打印出各个变量的当前值 def printItem():

print 'Python = ',vPython.get() print 'PHP = ',vPHP.get() print 'CPP = ',vCPP.get()


Tkinter教程(7).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:人教版小学语文二年级下册8.彩色的梦第二课时公开课教学设计

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: