
下面是内存溢出 jb51.cc 通过网络收集整理的代码片段。
内存溢出小编现在分享给大家,也给大家做个参考。
# -*- Coding: utf-8 -*-#! /usr/bin/env pythonimport sysfrom PyQt4 import QtGui,QtCoreimport os,stringimport mathTHUMB_WIDTH = 128THUMB_HEIGHT = 128THUMB_MIN = 64THUMB_MAX = 256file_TYPE = ['jpg','jpeg','tif','bmp','gif']class ImageWidget(QtGui.QWidget): #单选,上一个被选择的对象 prevSelected = None """ Use this Widget to display image. """ def __init__(self): super(ImageWidget,self).__init__() self.ID = 0 self.displayText = '' #显示的文字 self.version = '' self.status = 0 self.path = '' self.showStatus = True self.selected = False self.isHightlight = False self.thumb = QtGui.QImage() self.initAttrib() def initAttrib(self): self.name_Font = QtGui.QFont() self.bg_color = QtGui.Qcolor(50,50,50) self.hightlight = QtGui.Qcolor(255,255,100) self.edge_size = 5 self.pen_selected = QtGui.QPen(QtGui.Qcolor(255,0)) self.pen_selected.setWIDth(self.edge_size) self.pen_selected.setJoinStyle(QtCore.Qt.MiterJoin)# self.settooltip('aaaa\nbbbb\ncccc') def assetfile(self): return self.path + "_asset_.txt" def thumbfile(self): return self.path + "_thumb_.png" def @R_502_4329@ionfile(self): return self.path + "_@R_502_4329@ion_.txt" def getPublishPath(self): current_version = self.version if not current_version: current_version = '000' new_version = int(string.atof(current_version)) + 1 return '%s/%03d' % (self.path,new_version) def getVersionPath(self,version): return '%s/%s' % (self.path,version) def getCurrentVersionPath(self): return self.getVersionPath(self.version) def setThumb(self,thumb = None): if not thumb: thumb = self.thumbfile() if os.path.isfile(thumb): self.thumb.load(QtCore.QString(thumb)) self.repaint() return True def paintAsThumb(self,painter): name_height = max(self.height() * 0.15,20) name_ty = self.height() - self.edge_size * 2 # draw background painter.fillRect(self.rect(),self.bg_color) painter.drawImage(self.rect(),self.thumb) # draw hightlight if self.isHightlight and not self.selected: painter.fillRect(self.rect(),self.hightlight) # draw name painter.setPen(QtGui.QPen(QtGui.Qcolor(255,255))) self.name_Font.setPixelSize(name_height) painter.setFont(self.name_Font) #脚标字符 painter.drawText(self.edge_size,name_ty,str(self.displayText)) if self.status: Title_height = self.edge_size + name_height p1 = QtCore.QPoint(0,0) p2 = QtCore.QPoint(0,Title_height) p3 = QtCore.QPoint(Title_height,0) painter.setPen(QtCore.Qt.nopen) painter.fillRect(0,self.wIDth(),Title_height,QtGui.Qcolor(40,40,40)) if self.status == 1: painter.setBrush(QtGui.QBrush(QtGui.Qcolor(255,0))) elif self.status == 2: painter.setBrush(QtGui.QBrush(QtGui.Qcolor(0,0))) elif self.status == 3: painter.setBrush(QtGui.QBrush(QtGui.Qcolor(0,255))) painter.drawConvexpolygon(p1,p2,p3) if self.version: version_x = self.wIDth() - self.edge_size - name_height * 1.5 version_y = name_height painter.setPen(QtGui.QPen(QtGui.Qcolor(255,255))) painter.drawText(version_x,version_y,'%s' % self.version) # draw selected if self.selected: painter.setPen(self.pen_selected) painter.setBrush(QtCore.Qt.NoBrush) painter.drawRect(self.edge_size/2,self.edge_size/2,\ self.wIDth() - self.edge_size,self.height() - self.edge_size) def paintEvent(self,event): painter = QtGui.QPainter(self) self.paintAsThumb(painter) def mouseReleaseEvent(self,event): if event.button() == QtCore.Qt.leftbutton: self.setSelected() def mouseDoubleClickEvent(self,event): self.emit(QtCore.SIGNAL('doubleClick')) def enterEvent(self,event): self.isHightlight = True self.repaint() def leaveEvent(self,event): self.isHightlight = False self.repaint() #设定当前为选中状态 def setSelected(self): #取消其他缩略图的选择状态,当前设为选择状态 if ImageWidget.prevSelected != None: ImageWidget.prevSelected.selected = False ImageWidget.prevSelected.repaint() self.selected = True self.repaint() ImageWidget.prevSelected = self self.onWidgetClicked() self.emit(QtCore.SIGNAL("click"),self.ID) def onWidgetClicked(self): print 'on Widget clicked'class ImageContainer(QtGui.qframe): def __init__(self,Widgets = None): super(ImageContainer,self).__init__() containerLayout = QtGui.QVBoxLayout() #初始化SlIDer self.zoomSlIDer = QtGui.QSlIDer() self.zoomSlIDer.setorIEntation(QtCore.Qt.Horizontal) self.zoomSlIDer.setMinimum(THUMB_MIN) self.zoomSlIDer.setMaximum(THUMB_MAX) self.zoomSlIDer.setValue(THUMB_WIDTH) self.zoomSlIDer.setFixeDWIDth(128) self.zoomSlIDer.setFixedHeight(10) #SlIDer设定 QtCore.QObject.connect(self.zoomSlIDer,QtCore.SIGNAL('valueChanged(int)'),self.setItemSize) self.item_scrollarea = QtGui.QScrollArea() self.item_area = QtGui.QWidget() self.item_scrollarea.setWidget(self.item_area) containerLayout.addWidget(self.zoomSlIDer) containerLayout.addWidget(self.item_scrollarea) self.Widget_w = THUMB_WIDTH self.Widget_h = THUMB_HEIGHT self.min_wIDth = THUMB_MIN self.max_height = THUMB_MAX self.asset_space = 2 self.auto_space = False self.setwindowOpacity(0.0) self.setLayout(containerLayout) #缩略图对象列表 self.ImageWidgetList = {} def addWidget(self,Widget): Widget.setParent(self.item_area) Widget.resize(self.Widget_w,self.Widget_h) Widget.show() #添加到列表 self.ImageWidgetList[str(Widget.ID)] = Widget def addWidgets(self,Widgets): for Widget in Widgets: self.addWidget(Widget) self.layout() def clearall(self): Widgets = self.item_area.children() if Widgets: for Widget in Widgets: Widget.setParent(None) self.ImageWidgetList.clear() def layout(self): w = self.wIDth() - 20 Widgets = self.item_area.children() num_x = max(math.ceil(w / (self.Widget_w + self.asset_space)),1) # Can do -1 num_y = math.ceil(len(Widgets) / num_x) self.item_area.resize(w,num_y * (self.Widget_h + self.asset_space) + 50) main_w = self.item_area.wIDth() main_h = self.item_area.height() num_x = max(math.ceil(main_w / (self.Widget_w + self.asset_space)),1) # Can do -1 x = 0 y = 0 for i in range(len(Widgets)): space_x = 0 if self.auto_space: space_x = (main_w - self.asset_space * 2 - num_x * (self.Widget_w + self.asset_space)) / num_x Widgets[i].move(self.asset_space * 2 + x * (self.Widget_w + self.asset_space + space_x),\ self.asset_space*2 + y * (self.Widget_h + self.asset_space)) x += 1 if x >= num_x: x = 0 y += 1 def resizeEvent(self,event): self.layout() def changeItemSize(self,mount): Widgets = self.item_area.children() self.Widget_w += mount if self.Widget_w > self.max_height: self.Widget_w = self.max_height elif self.Widget_w < self.min_wIDth: self.Widget_w = self.min_wIDth self.Widget_h += mount if self.Widget_h > self.max_height: self.Widget_h = self.max_height elif self.Widget_h < self.min_wIDth: self.Widget_h = self.min_wIDth for a in Widgets: a.resize(self.Widget_w,self.Widget_h) self.layout() def setItemSize(self,size): Widgets = self.item_area.children() self.Widget_w = size self.Widget_h = size for a in Widgets: a.resize(size,size) self.layout() #设定指定ID为选中状态 def setSelected(self,ID): print 'ImageContainer -> setSelected ',ID self.ImageWidgetList[str(ID)].setSelected()class MainWindow(QtGui.QWidget): def __init__(self): app = QtGui.QApplication(sys.argv) super(MainWindow,self).__init__() self.setwindowTitle("Image VIEwer") self.resize(1280,800) #屏幕居中 self.screen = QtGui.QDesktopWidget().screenGeometry() self.size = self.geometry() self.move((self.screen.wIDth()-self.size.wIDth())/2,(self.screen.height()-self.size.height())/2) self.show() mainSpliter = QtGui.QSplitter(QtCore.Qt.Horizontal) #文件夹列表model self.dirModel = QtGui.QDirModel(self) #只显示文件夹 self.dirModel.setFilter(QtCore.QDir.Dirs|QtCore.QDir.NodotAndDotDot) #文件夹列表vIEw self.dirTreeVIEw = QtGui.QTreeVIEw() #绑定model self.dirTreeVIEw.setModel(self.dirModel) self.dirTreeVIEw.hIDeColumn(1) self.dirTreeVIEw.hIDeColumn(2) self.dirTreeVIEw.hIDeColumn(3) #DirTree事件响应 self.dirTreeVIEw.selectionModel().selectionChanged.connect(self.dirTreeClicked) mainLayout = QtGui.QVBoxLayout() mainSpliter.addWidget(self.dirTreeVIEw) self.imageContainer = ImageContainer(mainSpliter)# self.imageContainer.setGeometry(self.imageContainer.geometry().x(),self.imageContainer.geometry().y(),100,self.imageContainer.geometry().height()) self.imageContainer.setMinimumWIDth(self.geometry().wIDth()*0.7) mainSpliter.addWidget(self.imageContainer) mainLayout.addWidget(mainSpliter) self.setLayout(mainLayout) sys.exit(app.exec_()) def dirTreeClicked(self): print 'dirTreeClicked' self.imageContainer.clearall() #获取选择的路径 pathSelected = self.dirModel.filePath(self.dirTreeVIEw.selectedindexes()[0]) print 'pathSelected ',pathSelected #遍历路径下的媒体文件 for item in os.Listdir(pathSelected): if item.split('.')[-1] in file_TYPE: print item #添加Widget try: Widget = ImageWidget() Widget.displayText = item Widget.setThumb(unicode(pathSelected +'/' + item)) self.imageContainer.addWidget(Widget) except: pass# self.imageContainer.layout()def main(): MainWindow()if __name__ == '__main__': main() 以上是内存溢出(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
总结以上是内存溢出为你收集整理的PyQt写的图片浏览器全部内容,希望文章能够帮你解决PyQt写的图片浏览器所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)