`
purpen
  • 浏览: 794251 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python与tkinter结合写的简易相册预览(原创)

阅读更多
这两天一直在学习Tkinter,感觉其中的元件布局,有点复杂,不容易控制,因此,写了此例算作是练习一下了(其中用到了,Entry,  Button, listbox, canvas,scrollbar等等),有高手发现不准确之处,希望指点一二:)


python 代码
 
  1. #!/usr/bin/env python  
  2.   
  3. import os,sys,math  
  4. from glob import glob  
  5.   
  6. from Tkinter import *  
  7. import Image  
  8. from ImageTk import PhotoImage  
  9. from tkFileDialog import askopenfilename,askdirectory  
  10. from tkMessageBox import showerror  
  11.   
  12. class ViewPhotos(Frame):  
  13.     """all photos manage"""  
  14.     photodirs = ""  
  15.     savephotos = ""  
  16.   
  17.     def __init__(self,parent=None,photo_dir=None):  
  18.         Frame.__init__(self,parent)  
  19.         self.pack(expand=YES,fill=BOTH)  
  20.         self.makeWidgets()  
  21.   
  22.     def makeWidgets(self):  
  23.         """ 
  24.         init button 
  25.         """  
  26.         frm = Frame(self,relief=SUNKEN)  
  27.         frm.pack(side=TOP,fill=X,padx=5)  
  28.         Label(frm,text=':)Browse Directory:').pack(side=LEFT)  
  29.         ent = Entry(frm,text='Type Your Directory or Press Browse Button',fg='blue')  
  30.         ent.pack(side=LEFT,expand=YES,fill=X)  
  31.         Button(frm,text='Browse...',command=self.onOpenDir).pack(side=LEFT)  
  32.         Button(frm,text='Quit',command=self.quit).pack(side=RIGHT)  
  33.   
  34.         self.ent = ent  
  35.   
  36.     def makeCanvas(self):  
  37.         """ 
  38.         create content display area. 
  39.         """  
  40.         cont = Frame(self)  
  41.         cont.pack(side=TOP,expand=YES,fill=BOTH,pady=3)  
  42.         cont.config(relief=SUNKEN)  
  43.         lis = Listbox(cont)  
  44.         lis.pack(side=LEFT,fill=Y)  
  45.         can = Canvas(cont)  
  46.         can.config(width=300,height=200)  
  47.         sbar = Scrollbar(cont)  
  48.         sbar.config(command=can.yview)  
  49.         can.config(yscrollcommand=sbar.set)  
  50.         sbar.pack(side=RIGHT,fill=Y)  
  51.         can.pack(side=LEFT,expand=YES,fill=BOTH)  
  52.   
  53.         #display photos  
  54.         imglist = [img for img in os.listdir(self.photodirs)]  
  55.         for img in imglist:  
  56.             lis.insert(END,img)  
  57.   
  58.         lis.bind('<Double-Button-1>',self.viewOne)  
  59.   
  60.         self.lis = lis  
  61.         self.can = can  
  62.   
  63.     def viewOne(self,event):  
  64.         """one photo view"""  
  65.         try:  
  66.             index = self.lis.curselection()  
  67.             img = self.lis.get(index)  
  68.             imgpath = self.photodirs + '/' + img  
  69.             imgobj = PhotoImage(file=imgpath)  
  70.             #self.can.create_text(10,10,text=imgpath,font=('times',16,'bold'),fill='red')  
  71.             self.can.create_image(10,20,image=imgobj,anchor=NW)  
  72.             self.savephotos = imgobj  
  73.         except IOError:  
  74.             showerror('Photos',"This file isn't image.")  
  75.             pass  
  76.         return self.savephotos  
  77.   
  78.     def onOpenDir(self):  
  79.         photodirs = askdirectory()  
  80.         if photodirs:  
  81.             if os.path.exists(photodirs):  
  82.                 self.photodirs = photodirs  
  83.                 #create display area.   
  84.                 self.makeCanvas()  
  85.                 self.ent.delete(0,END)  
  86.                 self.ent.insert(0,photodirs)  
  87.             else:  
  88.                 showerror('Photos','you have not browse directory!')  
  89.   
  90.           
  91. if __name__ == '__main__':  
  92.     root = Tk()  
  93.     root.geometry('800x600+50+50')  
  94.     view = ViewPhotos(root)  
  95.     root.mainloop()  


补充一点:from  ImageTk import PhotoImage 这里的ImageTk 需要下载包(PIL)重新安装(http://www.pythonware.com).

因为,Tkinter 中的PhotoImage()支持的图片格式比较少(gif,ppm,pgm),所以,如果需要处理其它格式的图片,就需要ImageTk哩.  它的PhotoImage()支持gif,jpeg,tiff,bmp等,处理常用的图片,够用了。。。 ^ _^

分享到:
评论

相关推荐

    Python与Tkinter编程

    Python与Tkinter编程 PYTHON自带的GUI库 part1

    python 与 Tkinter编程

    Python与Tkinter的结合,使得编写具有专业外观和功能的应用程序变得容易且高效。 #### 4. Python在GUI编程中的优势 Python之所以在GUI编程中受到青睐,原因之一是其代码的易读性和易写性。它允许开发者用更少的...

    Python-Tkinter.rar

    Tkinter是Python与Tcl/Tk接口的绑定,Tcl/Tk是一个流行的开源GUI库。在"Python-Tkinter.rar"这个压缩包中,包含了关于Tkinter库开发的相关文档,例如"Python-Tkinter_jb51"可能是一个详细的教程或者指南。 Tkinter...

    用python的tkinter库实现简易计算器

    用python的tkinter库实现简易计算器

    基于python+tkinter超市信息管理系统

    【基于python+tkinter超市信息管理系统】是一种使用Python编程语言,结合Tkinter图形用户界面库,SQLite3数据库,以及openpyxl和pandas数据处理库开发的管理软件。该系统设计用于超市日常运营,帮助管理人员高效地...

    Manning.Python与Tkinter编程.pdf

    Manning.Python与Tkinter编程.pdf 看看

    Manning.Python与Tkinter编程中文版

    Manning.Python与Tkinter编程,由于文件较大,所以分成2个压缩包,这是第二个

    美河提供.Manning.Python与Tkinter编程.pdf

    美河提供.Manning.Python与Tkinter编程,一本非常不错的PYTHON 资源

    python与Tkinter编程源码

    学习Tkinter,发现《python与Tkinter编程》的manning主页上不去了,也在论坛求助过没有结果,后来经过多方搜索找到下载的地址,花了几个星期的时间才下载下来。希望与大家共享。 因为积分太少了,资源要一个积分...

    python与Tkinter编程代码

    Tkinter是Python的标准GUI库,它基于Tcl/Tk库,为Python程序员提供了丰富的窗口系统。 Tkinter库提供了多种控件,如按钮(Button)、标签(Label)、文本框(Entry)、滚动条(Scrollbar)、列表框(Listbox)、菜单(Menu)、...

    Python_Tkinter教程.pdf

    由于Tkinter与Python紧密集成,因此在不需要复杂图形界面的应用中,使用Tkinter进行GUI开发是一个非常便捷的选择。 在进行Tkinter编程时,可以将整个窗口看作画布,其中的组件比如按钮、标签、输入框等可视为画布上...

    python tkinter 实现简易计算器

    python tkinter 实现简易计算器(学校程序设计实践作业)

    Python Tkinter入门讲义 完整版PDF

    4. 内置与 Python里面的,不需要我们单独去安装, 方便了很多,而且Tkinter也是一个 Python 里面的标准。 5. 缺点就是功能过于简单,对于⼀些很大型的应用,Tkinter 提供的功能还是太少了。但是 Tkinter会不断进步,...

    毕业设计:基于python+tkinter+sqlite3的超市信息管理系统.zip

    7. Python与SQLite3交互:使用Python的sqlite3模块,实现Python程序与SQLite3数据库的交互,如执行SQL命令、处理结果集等。 8. 异常处理:在代码中加入异常处理机制,提高程序的健壮性。 9. 文件操作:可能涉及读写...

Global site tag (gtag.js) - Google Analytics