PyQt写的图片浏览器

PyQt写的图片浏览器,第1张

概述PyQt写的图片浏览器

下面是内存溢出 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写的图片浏览器所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/1198713.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-06-03
下一篇2022-06-03

发表评论

登录后才能评论

评论列表(0条)

    保存