Exemple #1
0
 def set_image(self, image_filename):
     size = 800
     pixmap = QPixmap(image_filename)
     if pixmap.width() > pixmap.height():
         if pixmap.width() > size:
             pixmap = pixmap.scaledToWidth(size)
     else:
         if pixmap.height() > size:
             pixmap = pixmap.scaledToHeight(size)
     self.ui.label.setPixmap(pixmap)
     self.ui.label.setMask(pixmap.mask())
     self.ui.label.show()
Exemple #2
0
    def _setup_layout(self):
        main_layout = QVBoxLayout()
        content_layout = QHBoxLayout()
        splash_path = os.path.join(
            os.path.split(ilastik.__file__)[0], 'ilastik-splash.png'
        )
        splash_pixmap = QPixmap(splash_path)
        logo_label = QLabel()
        logo_label.setPixmap(splash_pixmap)
        content_layout.addWidget(logo_label)

        text_label = QLabel()
        text_label.setWordWrap(True)
        text_label.setTextFormat(Qt.RichText)
        text_label.setOpenExternalLinks(True)
        text_label.setText(about_text)
        content_layout.addWidget(text_label)

        btn_box = QDialogButtonBox(QDialogButtonBox.Ok)
        btn_box.accepted.connect(self.accept)

        main_layout.addLayout(content_layout)
        main_layout.addWidget(btn_box)

        self.setLayout(main_layout)
        self.setStyleSheet("background-color: white;")
        self.setWindowTitle('About ilastik')
        self.setFixedSize(splash_pixmap.width() * 2.5, splash_pixmap.height() * 1.05)
 def initUI(self):
     
     self.setFixedSize(400, 260)
     
     self.setWindowTitle('Fomoire!')
     fomoire = QPixmap(os.path.join('./Pictures/', "fomoire.png"))
     logo = QLabel(self)
     logo.setPixmap(fomoire)
     logo.setFixedSize(fomoire.size())
     logo.move(400 / 2 - fomoire.width() / 2, 15)
     
     towerDefence = QLabel('A Tower Defence Game', self)
     towerDefence.move(130, 66)
     
     selectMap = QLabel('Select map:', self)
     selectMap.move(50, 105)
     
     mapList = QComboBox(self)
     mapList.addItem('No map selected')
     
     for mapFile in os.listdir('./Maps/'):
         mapList.addItem(mapFile)
     
     mapList.move(135, 102)
     mapList.activated[str].connect(self.selectMap)
     
     setSpeed = QLabel('Set game speed:', self)
     setSpeed.move(50, 140)
     
     slow = QLabel('Slow', self)
     slow.move(170, 140)
     
     slider = QSlider(Qt.Horizontal, self)
     slider.setFocusPolicy(Qt.NoFocus)
     slider.setSliderPosition(100 - self.gameSpeed)
     slider.setGeometry(210, 140, 100, 20)
     slider.valueChanged[int].connect(self.changeGameSpeed)
     
     fast = QLabel('Fast', self)
     fast.move(325, 140)
     
     start = QPushButton('Start game!', self)
     start.move(145, 175)
     start.clicked[bool].connect(self.startGame)
     
     quitButton = QPushButton('Quit', self)
     quitButton.move(168, 210)
     quitButton.clicked[bool].connect(qApp.quit)
     
     barbarian = QLabel(self)
     brbr = QPixmap(os.path.join('./Pictures/', "barbarian.png"))
     barbarian.setPixmap(brbr)
     barbarian.move(70, 185)
     
     berserker = QLabel(self)
     berber = QPixmap(os.path.join('./Pictures/', "berserker_left.png"))
     berserker.setPixmap(berber)
     berserker.move(290, 185)
     
     self.show()
Exemple #4
0
    def drawRects(self, source, rectsTree, scale):
        """Draw rectangles in 'rectsTree' on 'source'.
        """
        pixmap = QPixmap(source)
        self.drawBackground(pixmap)

        def drawRect(node, parentHash):
            painter = QtGui.QPainter(pixmap)
            roi, param, tracking = node.data
            x, y, w, h = common.scaleRect(roi, scale)
            painter.setPen(param.color)
            funcTable = {
                self.FILL_MASK: self.fillMask,
                self.FILL_BLUR: self.fillBlur,
                self.FILL_IMAGE: self.fillImage,
                self.FILL_COLOR: self.fillColor,
                self.FILL_OUTLINE: self.fillOutline
                         }
            for fill, func in funcTable.iteritems():
                if param.fill == fill:
                    func(pixmap, painter, (x, y, w, h), param, source)
            if param.tracking:
                self.drawTracking(painter, tracking, scale)
            if param.showName:
                painter.drawText(x, y, param.name)
            return param.hash

        h, w = pixmap.height(), pixmap.width()
        rectsTree.map(None, drawRect)
        painter = QtGui.QPainter(source)
        painter.drawPixmap(0, 0, pixmap)
    def draw_indicator(indicator: int):
        pixmap = QPixmap(24, 24)

        painter = QPainter(pixmap)
        w, h = pixmap.width(), pixmap.height()

        painter.fillRect(0, 0, w, h, QBrush((QColor(0, 0, 200, 255))))

        pen = QPen(QColor("white"))
        pen.setWidth(2)
        painter.setPen(pen)

        font = util.get_monospace_font()
        font.setBold(True)
        font.setPixelSize(16)
        painter.setFont(font)

        f = QFontMetrics(painter.font())
        indicator_str = str(indicator) if indicator < 10 else "+"

        fw = f.width(indicator_str)
        fh = f.height()
        painter.drawText(math.ceil(w / 2 - fw / 2), math.ceil(h / 2 + fh / 4), indicator_str)

        painter.end()
        return QIcon(pixmap)
Exemple #6
0
    def buildCharPreview(self):        
        char = self.selectedChar - self.charFrom.value()
        if char < 0:
            char = 0
        if char >= len(self.charSizes):
            char = len(self.charSizes) - 1
        
        k = 5
        s_x = self.charSizes[char][0]
        w = self.charSizes[char][1]
        
        charPix = self.chars.pixmap()
        charImage = charPix.toImage()

        self.charPreview.resize(w * k + 1, charPix.height() * k + 1)

        pix = QPixmap(w * k, charPix.height() * k)
        p = QPainter()
        p.begin(pix)
        p.setBrush(QBrush(QColor(0xffffff), Qt.SolidPattern))
        p.drawRect(0, 0, pix.width() - 1, pix.height() - 1)

        p.setBrush(QBrush(QColor(0x0), Qt.SolidPattern))        
        for x in range(w):
            for y in range(charPix.height()):
                if QColor(charImage.pixel(s_x + x, y)).lightness() == 0x0:
                    p.drawRect(x * k, y * k, k, k)
        p.end()
        self.charPreview.setPixmap(pix)
Exemple #7
0
	def paintEvent(self,event=None):
	    
	    painter = QPainter(self)
	    pixmap=QPixmap(":/images/wheelfinal.png")

	    #painter.begin(self)
	    #painter.drawPixmap(QtCore.QRect(self.left, self.top, self.width, self.height), self.pixmap)
	    painter.drawPixmap(self.rect(), pixmap)
	    self.resize(pixmap.width(),pixmap.height())
	    
	    pen = QPen(Qt.red, 3)
	    painter.setPen(pen)
	    
	    painter.drawArc (self.disc_center-int(self.distance_from_center(self.points[0])) , 
	                        self.disc_center - int(self.distance_from_center (self.points[0])) , 
	                        2*int(self.distance_from_center(self.points[0])) , 
	                        2*int(self.distance_from_center(self.points[0])) , 
	                        int(16*self.hue_min) , 
	                        int(16*(self.hue_max-self.hue_min)))#arc joining point 0 and point 1
	    painter.drawLine(int(self.points[0][0]),int(self.points[0][1]),int(self.points[3][0]),int(self.points[3][1]))#line joining point 0 and point 3
	    painter.drawArc(self.disc_center-int(self.distance_from_center(self.points[2])) , 
	                        self.disc_center - int(self.distance_from_center (self.points[2])) , 
	                        2*int(self.distance_from_center(self.points[2])) , 
	                        2*int(self.distance_from_center(self.points[2])) , 
	                        int(16*self.hue_min) , 
	                        int(16*(self.hue_max-self.hue_min)))#arc joining point 2 and 3
	    painter.drawLine(int(self.points[1][0]),int(self.points[1][1]),int(self.points[2][0]),int(self.points[2][1]))#line joining point 1 and 2
	    
	    self.update()
Exemple #8
0
def createThemePreview(theme, screenRect, size=QSize(200, 120)):
    if type(theme) == str and os.path.exists(theme):
        # Theme is the path to an ini file
        themeDatas = loadThemeDatas(theme)
    else:
        themeDatas = theme

    pixmap = generateTheme(themeDatas, screenRect)

    addThemePreviewText(pixmap, themeDatas, screenRect)

    px = QPixmap(pixmap).scaled(size, Qt.KeepAspectRatio)

    w = px.width() / 10
    h = px.height() / 10
    r = themeTextRect(themeDatas, screenRect)

    painter = QPainter(px)
    painter.drawPixmap(QRect(w, h, w * 4, h * 5), pixmap,
                       QRect(r.topLeft() - QPoint(w / 3, h / 3), QSize(w * 4, h * 5)))
    painter.setPen(Qt.white)
    painter.drawRect(QRect(w, h, w * 4, h * 5))
    painter.end()

    return px
    def draw(self, defending, status, scene, size):
        """function draw

        :param defending: boolean
        :param status: str {'Charge', 'Shoot', 'Stand'}
        :param scene: QGraphicsScene
        :param size: QSize

        no return
        """
        pix = QPixmap('')
        pix.width()

        unit_pixmap = self.get_pixmap(status).scaled(size.width() * 80 / 100, size.height() * 80 / 100)
        if defending:
            unit_pixmap = mirror_pixmap(unit_pixmap)
        scene.addPixmap(unit_pixmap)
Exemple #10
0
    def __init_ui(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        label = QLabel(self)
        image = QPixmap('15_flower.jpg')
        label.setPixmap(image)
        label.move(0, 0)
        self.resize(image.width(), image.height())
Exemple #11
0
class PlayerUI(ShapeUI):
    def __init__(self, parent, game):
        super().__init__(parent, game)
        self.player = game.player
        self.speed = game.player_speed

        self.pixmap = QPixmap("images/smile3.png")
        self.image_height_fix = 48  # 48

        self.width = self.pixmap.width()
        self.height = self.pixmap.height()

        self.set_shape_size()

        self.set_initial_position()
        self.show()

    def set_initial_position(self):
        """Set the initial position of the player and moves the player
        there.
        """
        self.x = (self.field_width - self.image_size[0]) / 2
        self.y = self.field_height - 50
        self.move(self.x, self.y)

    @property
    def is_player_invincible(self):
        """Checks if the player is invincible"""
        return self.player.is_player_invincible

    def set_player_invinciblity(self):
        """Sets the player's invincibility to the opposite of the current
        value.
        """
        self.player.set_player_invinciblity()

    @pyqtSlot()
    def move_left(self):
        """Moves the player to the left and checks if the move is valid
        (if the move is out of the game field).
        """
        print("left")
        if(self.x - self.speed > 0):
            self.x -= self.speed
            self.move(self.x, self.y)

    @pyqtSlot()
    def move_right(self):
        """Moves the player to the right and checks if the move is valid
        (if the move is out of the game field).
        """
        print("right")
        if(self.x + self.speed < self.field_width -
           self.image_size[0]):
            self.x += self.speed
            self.move(self.x, self.y)
Exemple #12
0
class ShapeWidget(QWidget):  
	def __init__(self,parent=None):  
		super(ShapeWidget,self).__init__(parent)
		self.i = 1
		self.mypix()
		self.timer = QTimer()
		self.timer.setInterval(500)  # 500毫秒
		self.timer.timeout.connect(self.timeChange)   
		self.timer.start()

    # 显示不规则 pic
	def mypix(self):
		self.update()
		if self.i == 5:
			self.i = 1
		self.mypic = {1: './images/left.png', 2: "./images/up.png", 3: './images/right.png', 4: './images/down.png'}
		self.pix = QPixmap(self.mypic[self.i], "0", Qt.AvoidDither | Qt.ThresholdDither | Qt.ThresholdAlphaDither)   
		self.resize(self.pix.size())
		self.setMask(self.pix.mask())  
		self.dragPosition = None

	def mousePressEvent(self, event):
		if event.button() == Qt.LeftButton:
			self.m_drag=True
			self.m_DragPosition=event.globalPos()-self.pos()
			event.accept()
			self.setCursor(QCursor(Qt.OpenHandCursor))

	def mouseMoveEvent(self, QMouseEvent):
		if Qt.LeftButton and self.m_drag:
			self.move(QMouseEvent.globalPos()- self.m_DragPosition )
			QMouseEvent.accept()
	
	def mouseReleaseEvent(self, QMouseEvent):
		self.m_drag=False
		self.setCursor(QCursor(Qt.ArrowCursor))
        
	def paintEvent(self, event):
		painter = QPainter(self)
		painter.drawPixmap(0, 0, self.pix.width(),self.pix.height(),self.pix)
    
	# 鼠标双击事件
	def mouseDoubleClickEvent(self, event):
		if event.button() == 1:
			self.i += 1
			self.mypix()

    # 每500毫秒修改paint
	def timeChange(self):
		self.i += 1
		self.mypix()
Exemple #13
0
class RoundRectItem(QGraphicsObject):
    def __init__(self, bounds, color, parent=None):
        super(RoundRectItem, self).__init__(parent)

        self.fillRect = False
        self.bounds = QRectF(bounds)
        self.pix = QPixmap()

        self.gradient = QLinearGradient()
        self.gradient.setStart(self.bounds.topLeft())
        self.gradient.setFinalStop(self.bounds.bottomRight())
        self.gradient.setColorAt(0, color)
        self.gradient.setColorAt(1, color.darker(200))

        self.setCacheMode(QGraphicsItem.ItemCoordinateCache)

    def setFill(self, fill):
        self.fillRect = fill
        self.update()

    def fill(self):
        return self.fillRect

    fill = pyqtProperty(bool, fill, setFill)

    def paint(self, painter, option, widget):
        painter.setPen(Qt.NoPen)
        painter.setBrush(QColor(0, 0, 0, 64))
        painter.drawRoundedRect(self.bounds.translated(2, 2), 25.0, 25.0)

        if self.fillRect:
            painter.setBrush(QApplication.palette().brush(QPalette.Window))
        else:
            painter.setBrush(self.gradient)

        painter.setPen(QPen(Qt.black, 1))
        painter.drawRoundedRect(self.bounds, 25.0, 25.0)
        if not self.pix.isNull():
            painter.scale(1.95, 1.95)
            painter.drawPixmap(-self.pix.width() / 2, -self.pix.height() / 2, self.pix)

    def boundingRect(self):
        return self.bounds.adjusted(0, 0, 2, 2)

    def pixmap(self):
        return QPixmap(self.pix)

    def setPixmap(self, pixmap):
        self.pix = QPixmap(pixmap)
        self.update()
    def loadImage(self, path):
        self.markable_picture = QMarkablePicture(self)
        hbox = QHBoxLayout(self)
        picture = QPixmap(path)

        if picture.width() > self.maximumWidth():
            picture = picture.scaledToWidth(self.maximumWidth())
        if picture.height() > self.maximumHeight():
            picture = picture.scaledToHeight(self.maximumHeight())

        self.markable_picture.setPixmap(picture)
        hbox.addWidget(self.markable_picture)
        hbox.setContentsMargins(0, 0, 0, 0)
        self.setLayout(hbox)
Exemple #15
0
    def initUI(self):
        self.setWindowTitle(self.title)
        self.setGeometry(self.left, self.top, self.width, self.height)

        button = QPushButton('PyQt5 button', self)
        button.setToolTip('This is an example button')
        button.move(0,0)
        button.clicked.connect(self.on_click)

        # # Create widget
        label = QLabel(self)
        pixmap = QPixmap(os.path.join(full_mask_path, 'EN20160520L039-26_mask.jpg'))
        label.setPixmap(pixmap)
        self.resize(pixmap.width(),pixmap.height())
        self.show()
Exemple #16
0
class ImageToggleButton(ToggleButton):

	def __init__(self,imgId,img):
		super(ImageToggleButton, self).__init__()
		self.id = imgId
		self.pixMap = QPixmap(img)
		eliminateBackgroundColor(self.pixMap)
		self.backBrush = QBrush(QColor(img.pixel(0,0)))

	def paintEvent(self,event):
		super().paintEvent(event)
		painter = QPainter(self)
		painter.fillRect(4,4,frameWidth,frameHeight,self.backBrush)
		painter.drawPixmap(4+(frameWidth-self.pixMap.width())//2,4+(frameHeight-self.pixMap.height())//2,self.pixMap)
		if self.isChecked():
			painter.setPen(self.checkedPen)
			painter.drawRect(3,3,self.width()-6,self.height()-6)
Exemple #17
0
def createThemePreview(theme, screenRect, size=QSize(200, 120)):
    """
    Generates a QPixmap preview for given theme.

    Theme can be either a string containing the filename of the ini
    file with the theme settings, or it can be a dict with the settings.

    If theme is a filename, the result is cached.
    """

    # Checking whether theme is a string or dict
    if type(theme) == str and os.path.exists(theme):
        # Theme is the path to an ini file
        themeDatas = loadThemeDatas(theme)
        fromFile = True
    else:
        themeDatas = theme
        fromFile = False

    # Check if item is in cache
    if fromFile and theme in _thumbCache:
        if _thumbCache[theme][0] == themeDatas:
            return _thumbCache[theme][1]

    pixmap = generateTheme(themeDatas, screenRect)

    addThemePreviewText(pixmap, themeDatas, screenRect)

    px = QPixmap(pixmap).scaled(size, Qt.KeepAspectRatio)

    w = px.width() / 10
    h = px.height() / 10
    r = themeTextRect(themeDatas, screenRect)

    painter = QPainter(px)
    painter.drawPixmap(QRect(w, h, w * 4, h * 5), pixmap,
                       QRect(r.topLeft() - QPoint(w / 3, h / 3), QSize(w * 4, h * 5)))
    painter.setPen(Qt.white)
    painter.drawRect(QRect(w, h, w * 4, h * 5))
    painter.end()

    # If theme is a themefile, we keep it in cache
    if fromFile:
        _thumbCache[theme] = [themeDatas, px]

    return px
    def textureRect(self, rect_tile):
        tile_info = rect_tile.data(0)

        if tile_info is None:
            return False

        pm = QPixmap(self.__tiler.tile_to_path(tile_info))  
        if pm.width() != 256:
            #print("Probably didn't get tile:", next_tile_info.x, next_tile_info.y, "\n")
            #TODO: Attempt to texture with a lower res tile
            #Bear in mind that you will have to take Mercator projection into
            #account on the lower res tile.
            
            #First Attempt: didn't work
            #if tile_info.zoom <= self.__tiler.get_min_zoom():
            #    return False
            #
            #find colocated lower res tile
            #(lat,lon) = tile_info.coord()
            #tile_info2 = self.__tiler.coord_to_tile(lat,lon, tile_info.zoom-1)
            #rect_tile.setData(0, tile_info2)
            #print("prev tile: ", tile_info.tile, tile_info.coord())
            #return self.textureRect(rect_tile, depth + 1)

            #until such time as we can pull lower res tiles and figure out
            #which area to render on a rectangle, skip:
            return False

        topLeft = rect_tile.boundingRect().topLeft()
        bottomRight = rect_tile.boundingRect().bottomRight()   
       
        width = bottomRight.x() - topLeft.x()
        height = bottomRight.y() - topLeft.y()

        brush_trans = QTransform()        
        brush_trans.translate(topLeft.x(), topLeft.y())
        brush_trans.scale(width/256.0, height/256.0)

        qb = QBrush(pm)
        qb.setTransform(brush_trans)
        rect_tile.setBrush(qb)
   
        return True
class QImageArea(QWidget):
    def __init__(self, parent=None):
        QWidget.__init__(self, parent)

    def loadImage(self, path):
        self.picture_label = QLabel(self)
        hbox = QHBoxLayout(self)
        self.picture = QPixmap(path)

        self.picture_label.setPixmap(self.picture)
        hbox.addWidget(self.picture_label)
        hbox.setContentsMargins(0, 0, 0, 0)
        self.setLayout(hbox)

    def getImageWidth(self):
        return self.picture.width()

    def getImageHeight(self):
        return self.picture.height()
Exemple #20
0
 def setColor(self, color):
     if type(color)!=QColor:
         color = QColor(color)
     if (self.mColor == color or not color.isValid()):
         return
     self.mColor = color
     size = QSize(self.iconSize())
     size.setWidth(size.width()-2)
     size.setHeight(size.height()-2)
     pixmap = QPixmap(size)
     pixmap.fill(self.mColor)
     painter = QPainter(pixmap)
     border = QColor(Qt.black)
     border.setAlpha(128)
     painter.setPen(border)
     painter.drawRect(0, 0, pixmap.width() - 1, pixmap.height() - 1)
     painter.end()
     self.setIcon(QIcon(pixmap))
     self.colorChanged.emit(color)
  def setSampleImage(self, pathToFile):

    self.graphicsView.hide()

    #clear scene
    self.graphicsScene.clear()

    #load file
    tmpImage = QImage(pathToFile)
    self.originalHeight = tmpImage.height()
    self.originalWidth = tmpImage.width()
    tmpPixmap = QPixmap(1)
    tmpPixmap.convertFromImage(tmpImage.scaledToWidth(300))
    self.scaledHeight = tmpPixmap.height()
    self.scaledWidth = tmpPixmap.width()

    #add to scene and show
    self.graphicsScene.addPixmap(tmpPixmap)
    self.graphicsView.show()
Exemple #22
0
    def set_paragraph(self, h2='', h3='', text='', img=None):
        if h2 != '':
            lbl_h2 = QLabel(h2, self.inner)
            fnt = lbl_h2.font()
            fnt.setPointSize(self.H2_FONT_SIZE)
            lbl_h2.setFont(fnt)
            lbl_h2.setFixedHeight(self.H2_HEIGHT)
            lbl_h2.setAlignment(Qt.AlignBottom)
            lbl_h2.setMargin(self.SIDE_MARGIN)
            self.vbox.addWidget(lbl_h2)

            frm = QFrame(self.inner)
            frm.setFrameShape(QFrame.HLine)
            frm.setContentsMargins(self.SIDE_MARGIN, 0, self.SIDE_MARGIN, 0)
            plt = frm.palette()
            plt.setColor(QPalette.WindowText, Qt.darkGray)
            frm.setPalette(plt)
            self.vbox.addWidget(frm)

        if text != '':
            lbl_txt = QLabel(text, self.inner)
            lbl_txt.setWordWrap(True)
            fnt = lbl_txt.font()
            fnt.setPointSize(self.TEXT_FONT_SIZE)
            lbl_txt.setFont(fnt)
            lbl_txt.setMargin(self.SIDE_MARGIN)
            self.vbox.addWidget(lbl_txt)

        if img is not None:
            if self.params.lang == 'en':
                img += '_en.png'
            else:
                img += '_jp.png'
            pixmap = QPixmap(img)
            if not pixmap.isNull():
                lbl_img = QLabel(self.inner)
                lbl_img.setPixmap(pixmap)
                self.lbl_img_list.append(lbl_img)
                self.pixmap_list.append(pixmap.scaledToWidth(pixmap.width()))
                self.vbox.addWidget(lbl_img)

        self.inner.setLayout(self.vbox)
 def put_cv2_image(self, image, widget):
     height, width = image.shape[0:2]
     qImg = self.cv2toQImage(image)
     pixmap = QPixmap(qImg)
     if height > width:
         if height > self.preview_size:
             pixmap = pixmap.scaledToHeight(self.preview_size)
     else:
         if width > self.preview_size:
             pixmap = pixmap.scaledToWidth(self.preview_size)
     widget.setPixmap(pixmap)
     #give hints to DrawableLabel() and MyLabel()
     widget.perspective = self.perspective
     widget.focus = self.focus
     widget.slitpos = self.slitpos
     w = pixmap.width()
     h = pixmap.height()
     x = ( self.preview_size - w ) // 2
     y = ( self.preview_size - h ) // 2
     widget.geometry = x,y,w,h
Exemple #24
0
    def startDrag(self, supportedActions):
        item = self.currentItem()

        itemData = QByteArray()
        dataStream = QDataStream(itemData, QIODevice.WriteOnly)
        pixmap = QPixmap(item.data(Qt.UserRole))
        location = item.data(Qt.UserRole+1)

        dataStream << pixmap << location

        mimeData = QMimeData()
        mimeData.setData('image/x-puzzle-piece', itemData)

        drag = QDrag(self)
        drag.setMimeData(mimeData)
        drag.setHotSpot(QPoint(pixmap.width()/2, pixmap.height()/2))
        drag.setPixmap(pixmap)

        if drag.exec_(Qt.MoveAction) == Qt.MoveAction:
            if self.currentItem() is not None:
                self.takeItem(self.row(item))
Exemple #25
0
    def __init__(self, imagepath, binpath):
        super().__init__()

        QToolTip.setFont(QFont('SansSerif', 10))
        self.setToolTip('This is a <b>QWidget</b> widget')

        self.imageLabel = QLabel(self)
        self.imageLabel.setBackgroundRole(QPalette.Base)
        self.imageLabel.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored)
        self.imageLabel.setScaledContents(True)

        self.overlay = Overlay(self.imageLabel, binpath)
        self.setCentralWidget(self.overlay)

        self.overlay.c.cropImage.connect(self.crop)
        #self.overlay.setSizePolicy(QSizePolicy.Maximum,QSizePolicy.Maximum)

        self.imagepath = imagepath
        image = QPixmap(imagepath)
        w = image.width()
        h = image.height()

        rec = QApplication.desktop().screenGeometry();
        dsk_h = rec.height();
        dsk_w = rec.width();

        wdw_w = min(0.7 * dsk_w, w) # Window's width 85% of screen's size
        self.ratio = wdw_w / w      # Storing the ratio for later use
        wdw_h = h * self.ratio      # A simple proportion to get the height, because we want to mantain the aspect ratio

        image = image.scaled(wdw_w, wdw_h, transformMode=QtCore.Qt.SmoothTransformation)

        self.imageLabel.setPixmap(image)
        self.imageLabel.adjustSize()

        self.setGeometry(dsk_w/2 - wdw_w/2, dsk_h/2 - wdw_h/2, wdw_w, wdw_h)
        self.setWindowTitle('Tooltips')
        self.show()
Exemple #26
0
	def init(self):
		self.window = loadUi(os.path.join(get_ui_path(),"splash.ui"))
		self.window.setWindowFlags(Qt.FramelessWindowHint|Qt.WindowStaysOnTopHint)
		self.center()
		self.window.li.setText(notice()+"\n"+version())
		self.window.setModal(Qt.WindowModal)
		self.window.image.setHorizontalScrollBarPolicy(Qt.ScrollBarAlwaysOff)
		self.window.image.setVerticalScrollBarPolicy(Qt.ScrollBarAlwaysOff)

		window_h=self.window.height()
		window_w=self.window.width()
		r=random.randint(2, 3)
		image=QPixmap(os.path.join(get_image_file_path(),"splash"+str(r)+".png"))
		image.scaledToHeight(window_h)

		w=image.width()
		h=image.height()
		x_max=w-window_h-window_w/2

		hour=float(time.strftime("%H"))*60
		m=float(time.strftime("%m"))
		tot=hour+m
		my_max=float(24*60)

		value=tot/my_max

		xpos=int(x_max*value)+window_w/2
		print("xpos=",xpos)
		scene=QGraphicsScene();
		scene.setSceneRect(xpos, 0, 0, h)
		self.window.image.setScene(scene)

		self.window.show()

		scene.addPixmap(image);

		QTimer.singleShot(1500, self.callback_destroy)
Exemple #27
0
    def initUI(self):

        xkcd_array = requests.get("http://dynamic.xkcd.com/api-0/jsonp/comic/").json()

        self.setGeometry(300, 300, 1000, 500)
        title = xkcd_array['title'].encode("latin-1").decode("utf-8")
        self.setWindowTitle('XKCD - '+title)
        print(type(title))

        alt = xkcd_array['alt'].encode("latin-1").decode("utf-8")

        self.setToolTip(alt)

        url = xkcd_array['img']
        data = urllib.request.urlopen(url).read()
        img = QPixmap()
        img.loadFromData(data)

        self.resize(img.width(), img.height())

        lbl2 = QLabel('asd', self)
        lbl2.setPixmap(img)

        self.show()
class App(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('interface_PillowUI.ui', self)
        self.create_fileAction.triggered.connect(self.create_file)
        self.open_fileAction.triggered.connect(self.open_file)
        self.file_name = ''
        self.temp_name = ''
        self.load_image = Image
        self.pixmap = QPixmap()
        self.width = 0
        self.height = 0
        self.pixel = []

    # Открытие файла
    def open_file(self):
        try:
            while True:
                self.file_name = \
                    QFileDialog.getOpenFileName(self, 'Открыть файл', '.')[0]
                if self.file_name:
                    try:
                        self.load_image = Image.open(self.file_name)
                        self.width, self.height = self.load_image.size
                        self.pixel = self.load_image.load()
                        self.temp_image()
                        self.init_ui()
                        break
                    except OSError:
                        QMessageBox.question(
                            self, 'Предупреждение', 'Файл должен иметь '
                            'расширение графического файла, '
                            'поддерживаемого библиотекой PIL', QMessageBox.Ok,
                            QMessageBox.Ok)
                else:
                    break
        except Exception as e:
            print(e)

    # Сохранение файла
    def save_file(self):
        self.load_image.save(self.file_name)

    # Сохранение файла как...
    def save_file_as(self):
        val, ok_btn_pressed = QInputDialog.getText(self, 'Сохранить файл',
                                                   'Введите название файла')
        if ok_btn_pressed:
            try:
                self.load_image.save(val)
            except Exception as e:
                QMessageBox.question(self, 'Ошибка', str(e), QMessageBox.Ok,
                                     QMessageBox.Ok)

    # Создание файла
    def create_file(self):
        val, ok_btn_pressed = QInputDialog.getText(self, 'Создать',
                                                   'Введите название файла:')
        if ok_btn_pressed:
            # noinspection PyBroadException
            try:
                self.file_name = val
                self.load_image = Image.new('RGB', (500, 500))
                self.load_image.save(self.file_name)
                self.temp_image()
            except Exception as e:
                QMessageBox.question(
                    self, 'Предупреждение',
                    'Упс... Что-то пошло не так, попробуйте снова',
                    QMessageBox.Ok, QMessageBox.Ok)
                print(e)

    # Показ изображения в QScrollArea
    def show_image(self):
        self.pixmap = QPixmap(self.temp_name)
        self.lbl.setPixmap(self.pixmap)
        self.lbl.resize(self.pixmap.width(), self.pixmap.height())
        self.lbl.resize(self.pixmap.width(), self.pixmap.height())
        self.scroll_image.setWidget(self.lbl)

    # Создание временного изображения, с которым будет вестись работа,
    # чтобы не испортить начальное изображение
    def temp_image(self):
        self.temp_name = 'temp_im.jpg'
        self.load_image.save(self.temp_name)
        self.pixel = self.load_image.load()
        self.width, self.height = self.load_image.size
        self.show_image()

    # Инициализация UI
    def init_ui(self):
        # Подключение сигналов для меню "Фильтры"
        self.shade_of_gray_action.triggered.connect(self.shade_of_gray)
        self.white_and_black_action.triggered.connect(self.white_and_black)
        self.sepia_action.triggered.connect(self.sepia)
        self.negative_action.triggered.connect(self.negative)
        self.noise_action.triggered.connect(self.noise)
        self.brightness_action.triggered.connect(self.brightness)

        # Подключение сигналов для кнопок
        self.merge_image_btn.clicked.connect(self.merge_image)
        self.show_image_in_window_btn.clicked.connect(
            self.show_image_in_window)
        self.set_transparency_btn.clicked.connect(self.set_transparency)
        self.image_resize_btn.clicked.connect(self.image_resize)
        self.cut_btn.clicked.connect(self.cut)
        self.cut_background_btn.clicked.connect(self.cut_background)
        self.palette_btn.clicked.connect(self.open_palette)
        self.grid_btn.clicked.connect(self.grid)
        self.random_color_btn.clicked.connect(self.random_color)
        self.rotation_btn.clicked.connect(self.rotation)
        self.flip_horizontally_btn.clicked.connect(self.flip_horizontally)
        self.flip_vertical_btn.clicked.connect(self.flip_vertical)
        self.show_channel_btn.clicked.connect(self.show_channel)

        # Подключение кнопок меню "Файл"
        self.save_file_asAction.triggered.connect(self.save_file_as)
        self.save_fileAction.triggered.connect(self.save_file)

    # Показать один из цветовых каналов
    def show_channel(self):
        # Создает копию текущего изображения для отображения каналов
        channel_image_r = self.load_image.copy()
        channel_image_g = self.load_image.copy()
        channel_image_b = self.load_image.copy()
        pixel_r = channel_image_r.load()
        pixel_g = channel_image_g.load()
        pixel_b = channel_image_b.load()
        if self.radioButton_all.isChecked():
            self.load_image.show()
        # Показывает красный канал
        elif self.radioButton_red.isChecked():
            for i in range(self.width):
                for j in range(self.height):
                    r, g, b = pixel_r[i, j]
                    pixel_r[i, j] = r, 0, 0
            channel_image_r.show()

        # Показывает синий канал
        elif self.radioButton_blue.isChecked():
            for i in range(self.width):
                for j in range(self.height):
                    r, g, b = pixel_b[i, j]
                    pixel_b[i, j] = 0, 0, b
            channel_image_b.show()

        # Показывает зеленый канал
        elif self.radioButton_green.isChecked():
            for i in range(self.width):
                for j in range(self.height):
                    r, g, b = pixel_g[i, j]
                    pixel_g[i, j] = 0, g, 0
            channel_image_g.show()

    # Слияние изображений
    def merge_image(self):
        load_image2 = ''
        while True:
            file_name2 = \
                QFileDialog.getOpenFileName(self, 'Совместить файл', '.')[0]
            if file_name2:
                try:
                    load_image2 = Image.open(file_name2)
                    break
                except OSError:
                    QMessageBox.question(
                        self, 'Предупреждение', 'Файл должен иметь '
                        'расширение графического файла, '
                        'поддерживаемого библиотекой PIL', QMessageBox.Ok,
                        QMessageBox.Ok)
            else:
                break
        if load_image2:
            # Установление прозрачности для файла,
            # с которым производится слияние
            val, ok_btn_pressed = QInputDialog.getInt(
                self, 'Прозрачность', 'Укажите процент прозрачности:', 5, 0,
                10, 1)
            if ok_btn_pressed:
                val = val / 10
                # Проверка размеров изображения, если они отличаются,
                # то второе изображения принимает размер первого
                width2, height2 = load_image2.size
                if self.width != width2 or self.height != height2:
                    load_image2 = load_image2.resize((self.width, self.height))
                pixels2 = load_image2.load()
                # Слияние пикселей изображений с учетом прозрачности
                for i in range(self.width):
                    for j in range(self.height):
                        r1, g1, b1 = self.pixel[i, j]
                        r2, g2, b2 = pixels2[i, j]
                        r1 = r1 * (1 - val) + r2 * val
                        g1 = g1 * (1 - val) + g2 * val
                        b1 = b1 * (1 - val) + b2 * val
                        self.pixel[i, j] = int(r1), int(g1), int(b1)
                self.temp_image()

    # Показ изображения в отдельном окне
    def show_image_in_window(self):
        self.load_image.show()

    # Изменение прозрачности
    def set_transparency(self):
        val, ok_btn_pressed = QInputDialog.getInt(
            self, 'Прозрачность', 'Укажите процент прозрачности:', 5, 0, 10, 1)
        if ok_btn_pressed:
            val = val / 10
            # Установление прзрачности для пикселей
            for i in range(self.width):
                for j in range(self.height):
                    r1, g1, b1 = self.pixel[i, j]
                    r1 = r1 * val
                    g1 = g1 * val
                    b1 = b1 * val
                    self.pixel[i, j] = int(r1), int(g1), int(b1)
            self.temp_image()

    # Изменение размера
    def image_resize(self):
        # Создание диалогового окна и проверка корректности значений
        while True:
            val, ok_btn_pressed = QInputDialog.getText(
                self, 'Изменение размера изображения', 'Введите новый размер '
                'изображения. размер '
                'должен быть указан в '
                'формате: "ширина";"высота"')

            if ok_btn_pressed:
                if ';' not in val:
                    QMessageBox.question(
                        self, 'Предупреждение', 'Ширина и высота, указанные в '
                        'диалоговом окне, должны быть '
                        'разделены этим символом: ";"', QMessageBox.Ok,
                        QMessageBox.Ok)
                elif len(val.split(';')) > 2:
                    QMessageBox.question(
                        self, 'Предупреждение',
                        'Должно быть введено ТОЛЬКО два '
                        'аргумента. Разве это так сложно?', QMessageBox.Ok,
                        QMessageBox.Ok)
                else:
                    try:
                        val = [int(item) for item in val.split(';')]
                        # Изменение размера
                        self.load_image = self.load_image.resize(val)
                        self.temp_image()
                        break
                    except ValueError:
                        QMessageBox.question(
                            self, 'Предупреждение',
                            'Введеные значения не соответствуют типу int',
                            QMessageBox.Ok, QMessageBox.Ok)
            else:
                break

    # Обрезать изображение
    def cut(self):
        fl = False
        # Получение значения для левого верхнего угла
        while True:
            val, ok_btn_pressed = QInputDialog.getText(
                self, 'Обрезать', 'Введите координаты левого верхнего угла'
                ' в формате: x;y')
            if ok_btn_pressed:
                if ';' not in val:
                    QMessageBox.question(
                        self, 'Предупреждение', 'x и y, указанные в '
                        'диалоговом окне, должны быть '
                        'разделены этим символом: ";"', QMessageBox.Ok,
                        QMessageBox.Ok)
                elif len(val.split(';')) > 2:
                    QMessageBox.question(
                        self, 'Предупреждение',
                        'Должно быть введено ТОЛЬКО два '
                        'аргумента. Разве это так сложно?', QMessageBox.Ok,
                        QMessageBox.Ok)
                else:
                    try:
                        val = [int(item) for item in val.split(';')]
                        x_min, y_min = val
                        fl = True
                        break
                    except Exception as e:
                        QMessageBox.question(self, 'Предупреждение', str(e),
                                             QMessageBox.Ok, QMessageBox.Ok)
            else:
                break

        # Получение значения для правого нижнего и последующая обрезка
        # изображения
        if fl:
            while True:
                val, ok_btn_pressed = QInputDialog.getText(
                    self, 'Обрезать',
                    'Введите координаты правого нижнего угла '
                    'в формате: x;y')
                if ok_btn_pressed:
                    if ';' not in val:
                        QMessageBox.question(
                            self, 'Предупреждение', 'x и y, указанные в '
                            'диалоговом окне, должны быть '
                            'разделены этим символом: ";"', QMessageBox.Ok,
                            QMessageBox.Ok)
                    elif len(val.split(';')) > 2:
                        QMessageBox.question(
                            self, 'Предупреждение', 'Должно быть введено'
                            ''
                            'ТОЛЬКО два аргумента. '
                            'Разве это так сложно?', QMessageBox.Ok,
                            QMessageBox.Ok)
                    else:
                        try:
                            val = [int(item) for item in val.split(';')]
                            x_max, y_max = val
                            self.load_image = self.load_image.crop(
                                (x_min, y_min, x_max, y_max))
                            self.temp_image()
                            break
                        except Exception as e:
                            QMessageBox.question(self, 'Предупреждение',
                                                 str(e), QMessageBox.Ok,
                                                 QMessageBox.Ok)
                else:
                    break

    # Обрезать однотонное изображение
    def cut_background(self):
        QMessageBox.question(
            self, 'Предупреждение',
            'Данная функция корректно работает только, '
            'если изображение окружено однотонным фоном со '
            'всех сторон хотя бы на один пиксель.', QMessageBox.Ok,
            QMessageBox.Ok)
        # Поиска верхнего левого угла для нового изображения
        fl = False
        for i in range(self.width):
            for j in range(self.height):
                if self.pixel[i, j] != self.pixel[0, 0]:
                    x_min = i
                    fl = True
                    break
            if fl:
                break
        fl = False
        for i in range(self.height):
            for j in range(self.width):
                if self.pixel[i, j] != self.pixel[0, 0]:
                    y_min = i
                    fl = True
                    break
            if fl:
                break
        # Поиска нижнего правого угла
        fl = False
        for i in range(self.width - 1, -1, -1):
            for j in range(self.height - 1, -1, -1):
                if self.pixel[i, j] != self.pixel[0, 0]:
                    x_max = i
                    fl = True
                    break
            if fl:
                break
        fl = False
        for i in range(self.height - 1, -1, -1):
            for j in range(self.width - 1, -1, -1):
                if self.pixel[j, i] != self.pixel[0, 0]:
                    y_max = i
                    fl = True
                    break
            if fl:
                break
        self.load_image.crop((x_min, y_min, x_max, y_max))
        self.temp_image()

    # Открыть палитру
    def open_palette(self):
        color = QColorDialog.getColor()
        if color.isValid():
            color = color.name()
            QMessageBox.question(self, 'Выбранный цвет', color, QMessageBox.Ok,
                                 QMessageBox.Ok)
            reply = QMessageBox.question(self, 'Сохранить?', 'Сохранить?',
                                         QMessageBox.Yes | QMessageBox.No,
                                         QMessageBox.No)
            if reply == QMessageBox.Yes:
                # Запись значения цвета в файл
                while True:
                    val, ok_btn_pressed = QInputDialog.getText(
                        self, 'Сохранить!', 'Введите название файла')
                    if ok_btn_pressed:
                        try:
                            f = open(val, 'w')
                            f.write(color)
                            f.close()
                            break
                        except Exception as e:
                            QMessageBox.question(self, 'Ошибка', str(e),
                                                 QMessageBox.Ok,
                                                 QMessageBox.Ok)
                    else:
                        break

    # Добавить сетку
    def grid(self):
        # Создаем объект ImageDraw и передаем ему изображение
        draw = ImageDraw.Draw(self.load_image)

        # Рисуем вертикальные лини каждые 50 пикселей
        for i in range(0, self.width, 50):
            draw.line((i, 0, i + self.height, 0))

        # Рисуем горизонталные линии каждые 50 пикселей
        for j in range(0, self.height, 50):
            draw.line((0, i, 0, i + self.width))

        del draw
        self.temp_image()

    # Заполнить случайными цветами
    def random_color(self):
        for i in range(self.width):
            for j in range(self.height):
                r = randint(0, 255)
                g = randint(0, 255)
                b = randint(0, 255)
                self.pixel[i, j] = r, g, b
        self.temp_image()

    # Поворот изображения
    def rotation(self):
        # Получение аргументов для поворота
        val, ok_btn_pressed = QInputDialog.getInt(self, 'Поворот',
                                                  'Укажите градус поворота:',
                                                  45, 90, 270, 45)
        if ok_btn_pressed:
            direction, ok_btn_pressed = QInputDialog.getItem(
                self, 'Поворот', 'Выберите направление поворота:',
                ('Влево', 'Вправо'), 0, False)
            if ok_btn_pressed:
                # Поворот
                if direction == 'Влево':
                    self.load_image = self.load_image.rotate(val)
                else:
                    self.load_image = self.load_image.rotate(360 - val)
                self.temp_image()

    # Отражение по горизонтали
    def flip_horizontally(self):
        self.load_image = self.load_image.transpose(Image.FLIP_TOP_BOTTOM)
        self.temp_image()

    # Отражение по вертикали
    def flip_vertical(self):
        self.load_image = self.load_image.transpose(Image.FLIP_LEFT_RIGHT)
        self.temp_image()

    # Фильтры
    # Оттенок серого
    def shade_of_gray(self):
        for i in range(self.width):
            for j in range(self.height):
                r, g, b = self.pixel[i, j]
                new_color = (r * 30 + g * 59 + b * 11) // 100
                self.pixel[i, j] = (new_color, new_color, new_color)
        self.temp_image()

    # Черно-белое изображение
    def white_and_black(self):
        for i in range(self.width):
            for j in range(self.height):
                r, g, b = self.pixel[i, j]
                new_color = r + g + b
                if new_color > 531:
                    new_color = 255
                else:
                    new_color = 0
                self.pixel[i, j] = (new_color, new_color, new_color)
        self.temp_image()

        # Сепия

    def sepia(self):
        depth, ok_btn_pressed = QInputDialog.getInt(self, 'Сепия',
                                                    'Укажите глубину:', 5, 0,
                                                    10, 1)
        if ok_btn_pressed:
            depth *= 10
            for i in range(self.width):
                for j in range(self.height):
                    r, g, b = self.pixel[i, j]
                    new_color = (r + g + b) // 3
                    r = new_color + depth * 2
                    g = new_color + depth
                    b = new_color
                    self.pixel[i, j] = r, g, b
            self.temp_image()

    # Негатив
    def negative(self):
        for i in range(self.width):
            for j in range(self.height):
                r, g, b = self.pixel[i, j]
                self.pixel[i, j] = (255 - r), (255 - g), (255 - b)
        self.temp_image()

    # Шумы изображения
    def noise(self):
        factor, ok_btn_pressed = QInputDialog.getInt(self, 'Шум',
                                                     'Укажите уровень шума:',
                                                     5, 0, 10, 1)
        if ok_btn_pressed:
            factor *= 10
            for i in range(self.width):
                for j in range(self.height):
                    r, g, b = self.pixel[i, j]
                    rand = randint(-factor, factor)
                    r += rand
                    g += rand
                    b += rand
                    if r < 0:
                        r = 0
                    if g < 0:
                        g = 0
                    if b < 0:
                        b = 0
                    if r > 255:
                        r = 255
                    if g > 255:
                        g = 255
                    if b > 255:
                        b = 255
                    self.pixel[i, j] = r, g, b
            self.temp_image()

    # Яркость
    def brightness(self):
        factor, ok_btn_pressed = QInputDialog.getInt(
            self, 'Яркость', 'Укажите уровень яркости:', 5, -10, 10, 1)
        if ok_btn_pressed:
            factor *= 10
            for i in range(self.width):
                for j in range(self.height):
                    r, g, b = self.pixel[i, j]
                    r += factor
                    g += factor
                    b += factor
                    if r < 0:
                        r = 0
                    if g < 0:
                        g = 0
                    if b < 0:
                        b = 0
                    if r > 255:
                        r = 255
                    if g > 255:
                        g = 255
                    if b > 255:
                        b = 255
                    self.pixel[i, j] = r, g, b
            self.temp_image()

    def closeEvent(self, a0: QCloseEvent):
        if self.temp_name:
            os.remove(self.temp_name)
        self.close()
Exemple #29
0
    app.setStyle('Fusion')
    #    app.setWindowIcon(QIcon(os.path.join(bundle_dir, 'logo.png')))

    splash_pix = QPixmap(os.path.join(bundle_dir, 'loadingLogo.png'))
    splash = QSplashScreen(splash_pix, Qt.WindowStaysOnTopHint)
    #    splash = MySplashScreen('chicken.gif', Qt.WindowStaysOnTopHint)
    splash.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.FramelessWindowHint
                          | Qt.Tool)
    splash.setEnabled(False)
    # splash = QSplashScreen(splash_pix)
    # adding progress bar
    progressBar = QProgressBar(splash)
    #    progressBar.setMaximum(10)
    progressBar.setGeometry(100,
                            splash_pix.height() - 50,
                            splash_pix.width() - 200, 20)
    #    progressBar.setGeometry(150, 320, 200, 18)
    # splash.setMask(splash_pix.mask())

    splash.show()
    splash.showMessage("Expanding app", Qt.AlignBottom | Qt.AlignCenter,
                       Qt.black)
    app.processEvents()

    #    initLoop = Qt.QEventLoop()
    #    pool = Pool(processes=1)
    #    pool.apply_async(longInitialization, [2], callback=lambda exitCode: initLoop.exit(exitCode))
    #    initLoop.exec_()

    #    app.processEvents()
    #    progressBar.setValue(1)
Exemple #30
0
class Node:
    width = 120

    def __init__(self, icon: str):
        super(Node, self)
        self.windowRect = QRectF(0, 0, Node.width, 20)
        self.item = None
        self.inputs = []
        self.icon = QPixmap(icon)

    def setPos(self, pos: QPointF):
        self.item.setPos(pos)

    def GetTitle(self):
        return ""

    def Inputs(self):
        return []

    def Outputs(self):
        return []

    def GetInputPoint(self, ids: int):
        ic = len(self.Inputs())
        oc = len(self.Outputs())
        m = max(ic, oc) * 10
        io = 25 + m - ic * 10 + ids * 20
        return self.item.pos() + QPointF(-5, io + 5)

    def GetOutputPoint(self, ids: int):
        ic = len(self.Inputs())
        oc = len(self.Outputs())
        m = max(ic, oc) * 10
        io = 25 + m - oc * 10 + ids * 20
        return self.item.pos() + QPointF(self.windowRect.width() + 5, io + 5)

    def GetInputId(self, pos: QPointF):
        pos = pos - self.item.pos()
        ic = len(self.Inputs())
        oc = len(self.Outputs())
        m = max(ic, oc) * 10
        io = 20 + m - ic * 10
        ids = int((pos.y() - io) / 20.0)
        if (ids < 0 or ids >= ic or pos.x() > self.windowRect.width() / 2):
            return -1
        return ids

    def GetOutputId(self, pos: QPointF):
        pos = pos - self.item.pos()
        ic = len(self.Inputs())
        oc = len(self.Outputs())
        m = max(ic, oc) * 10
        io = 20 + m - oc * 10
        ids = int((pos.y() - io) / 20.0)
        if (ids < 0 or ids >= oc or pos.x() < self.windowRect.width() / 2):
            return -1
        return ids

    def ItemsInit(self, scene: QGraphicsScene):
        ic = len(self.Inputs())
        oc = len(self.Outputs())
        m = max(ic, oc) * 10
        self.windowRect.setHeight(m * 2 + 20)
        ins = self.Inputs()
        ino = 20 + m - ic * 10
        ouo = 20 + m - oc * 10

        pix = scene.addPixmap(self.icon)
        pix.setPos(
            (self.windowRect.width() - self.icon.width()) * 0.5,
            20 + (self.windowRect.height() - 20 - self.icon.height()) * 0.5)
        pix.setParentItem(self.item)

        for i in range(0, ic):
            ti = scene.addText(ins[i])
            ti.setPos(0, i * 20 + ino)
            ti.setParentItem(self.item)
            ie = scene.addEllipse(
                QRectF(QPointF(-5, i * 20 + 5 + ino), QSizeF(10, 10)))
            ie.setParentItem(self.item)
            ie.setFlag(QGraphicsItem.ItemNegativeZStacksBehindParent)
            ie.setZValue(-1)

        ins = self.Outputs()
        for i in range(0, oc):
            ti = scene.addText(ins[i])
            ti.setPos(
                QPointF(self.windowRect.width() - ti.boundingRect().width(),
                        i * 20 + ouo))
            ti.setParentItem(self.item)
            ie = scene.addEllipse(
                QRectF(QPointF(self.windowRect.width() - 5, i * 20 + 5 + ouo),
                       QSizeF(10, 10)))
            ie.setParentItem(self.item)
            ie.setFlag(QGraphicsItem.ItemNegativeZStacksBehindParent)
            ie.setZValue(-1)

        self.inputs = []
        for i in range(0, ic):
            self.inputs.append(NodeConnector())
Exemple #31
0
class MainWindow(QMainWindow):
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)

        self.puzzleImage = QPixmap()

        self.setupMenus()
        self.setupWidgets()

        self.setSizePolicy(QSizePolicy(QSizePolicy.Fixed, QSizePolicy.Fixed))
        self.setWindowTitle("Puzzle")

    def openImage(self, path=None):
        if not path:
            path, _ = QFileDialog.getOpenFileName(
                self, "Open Image", "", "Image Files (*.png *.jpg *.bmp)")

        if path:
            newImage = QPixmap()
            if not newImage.load(path):
                QMessageBox.warning(
                    self,
                    "Open Image",
                    "The image file could not be loaded.",
                    QMessageBox.Cancel,
                )
                return

            self.puzzleImage = newImage
            self.setupPuzzle()

    def setCompleted(self):
        QMessageBox.information(
            self,
            "Puzzle Completed",
            "Congratulations! You have completed the puzzle!\nClick OK "
            "to start again.",
            QMessageBox.Ok,
        )

        self.setupPuzzle()

    def setupPuzzle(self):
        size = min(self.puzzleImage.width(), self.puzzleImage.height())
        self.puzzleImage = self.puzzleImage.copy(
            (self.puzzleImage.width() - size) / 2,
            (self.puzzleImage.height() - size) / 2,
            size,
            size,
        ).scaled(400, 400, Qt.IgnoreAspectRatio, Qt.SmoothTransformation)

        random.seed(QCursor.pos().x() ^ QCursor.pos().y())

        self.model.addPieces(self.puzzleImage)
        self.puzzleWidget.clear()

    def setupMenus(self):
        fileMenu = self.menuBar().addMenu("&File")

        openAction = fileMenu.addAction("&Open...")
        openAction.setShortcut("Ctrl+O")

        exitAction = fileMenu.addAction("E&xit")
        exitAction.setShortcut("Ctrl+Q")

        gameMenu = self.menuBar().addMenu("&Game")

        restartAction = gameMenu.addAction("&Restart")

        openAction.triggered.connect(self.openImage)
        exitAction.triggered.connect(QApplication.instance().quit)
        restartAction.triggered.connect(self.setupPuzzle)

    def setupWidgets(self):
        frame = QFrame()
        frameLayout = QHBoxLayout(frame)

        self.piecesList = QListView()
        self.piecesList.setDragEnabled(True)
        self.piecesList.setViewMode(QListView.IconMode)
        self.piecesList.setIconSize(QSize(60, 60))
        self.piecesList.setGridSize(QSize(80, 80))
        self.piecesList.setSpacing(10)
        self.piecesList.setMovement(QListView.Snap)
        self.piecesList.setAcceptDrops(True)
        self.piecesList.setDropIndicatorShown(True)

        self.model = PiecesModel(self)
        self.piecesList.setModel(self.model)

        self.puzzleWidget = PuzzleWidget()

        self.puzzleWidget.puzzleCompleted.connect(self.setCompleted,
                                                  Qt.QueuedConnection)

        frameLayout.addWidget(self.piecesList)
        frameLayout.addWidget(self.puzzleWidget)
        self.setCentralWidget(frame)
 def create_image(self):
     self.lbl_scheme_image = QLabel(self)
     pixmap = QPixmap('scheme.png')
     self.lbl_scheme_image.setPixmap(pixmap)
     self.lbl_scheme_image.move(225, 0)
     self.lbl_scheme_image.resize(pixmap.width(), pixmap.height())
Exemple #33
0
class Notification(QMainWindow):
    '''Transparent window containing an image or animated gif, used to display notifications.'''
    def __init__(self,
                 name,
                 notifier,
                 artPath,
                 link,
                 sound=None,
                 *args,
                 **kwargs):
        '''- name : a string
        - notifier : a Notifier object used to manage this notification
        - artPath : a string containing the path to the image file to be displayed
        - link : a string containing the link to be opened when left-clicking the notification
        - sound : a string containing the path to the object or None. Set to None for silent notifiations.'''
        super().__init__(*args, **kwargs)
        self.setCursor(QCursor(Qt.PointingHandCursor))
        self.name = name
        self.notifier = notifier
        self.link = link
        self.artPath = artPath
        self.isMovie = self.artPath.endswith(".gif")
        if sound == None:
            self.sound = None
        else:
            self.sound = QSoundEffect()
            self.sound.setSource(QUrl.fromLocalFile(sound))
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint
                            | Qt.Tool)
        self.setAttribute(Qt.WA_TranslucentBackground)
        imageLabel = QLabel()
        self.setCentralWidget(imageLabel)
        if self.isMovie:
            self.art = QMovie(self.artPath)
            self.art.jumpToNextFrame()
            imageLabel.setMovie(self.art)
            self.moveToBottomRight(self.art.frameRect().width(),
                                   self.art.frameRect().height())
        else:
            self.art = QPixmap(self.artPath)
            imageLabel.setPixmap(self.art)
            self.moveToBottomRight(self.art.width(), self.art.height())

    def moveToBottomRight(self, x, y):
        '''Moves the notification window to the bottom-right of the screen, above the taskbar'''
        screen = QDesktopWidget().availableGeometry()
        x_pos = screen.width() - x
        y_pos = screen.height() - y
        self.move(x_pos, y_pos)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.close()
            webbrowser.open_new_tab(self.link)
        elif event.button() == Qt.RightButton:
            self.close()

    def display(self, volume=1):
        '''Show the notification window and plays the sound.'''
        super().show()
        if self.isMovie:
            self.art.start()
        if self.sound:
            self.sound.setVolume(volume)
            self.sound.play()

    def close(self):
        '''Updates notifier and closes window'''
        super().close()
        self.notifier.update()
Exemple #34
0
class PixmapButton(QPushButton):
    def __init__(self, parent):
        QPushButton.__init__(self, parent)

        self.fPixmapNormal = QPixmap()
        self.fPixmapDown = QPixmap()
        self.fPixmapHover = QPixmap()
        self.fPixmapRect = QRectF(0, 0, 0, 0)

        self.fIsHovered = False

        self.fTopText = ""
        self.fTopTextColor = QColor()
        self.fTopTextFont = QFont()

        self.setText("")

    def setPixmaps(self, normal, down, hover):
        self.fPixmapNormal.load(normal)
        self.fPixmapDown.load(down)
        self.fPixmapHover.load(hover)

        width = self.fPixmapNormal.width()
        height = self.fPixmapNormal.height()

        self.fPixmapRect = QRectF(0, 0, width, height)

        self.setMinimumSize(width, height)
        self.setMaximumSize(width, height)

    def setTopText(self, text, color, font):
        self.fTopText = text
        self.fTopTextColor = color
        self.fTopTextFont = font

    def enterEvent(self, event):
        self.fIsHovered = True
        QPushButton.enterEvent(self, event)

    def leaveEvent(self, event):
        self.fIsHovered = False
        QPushButton.leaveEvent(self, event)

    def paintEvent(self, event):
        painter = QPainter(self)
        event.accept()

        if not self.isEnabled():
            painter.save()
            painter.setOpacity(0.2)
            painter.drawPixmap(self.fPixmapRect, self.fPixmapNormal,
                               self.fPixmapRect)
            painter.restore()

        elif self.isChecked() or self.isDown():
            painter.drawPixmap(self.fPixmapRect, self.fPixmapDown,
                               self.fPixmapRect)

        elif self.fIsHovered:
            painter.drawPixmap(self.fPixmapRect, self.fPixmapHover,
                               self.fPixmapRect)

        else:
            painter.drawPixmap(self.fPixmapRect, self.fPixmapNormal,
                               self.fPixmapRect)

        if not self.fTopText:
            return

        painter.save()
        painter.setPen(self.fTopTextColor)
        painter.setBrush(self.fTopTextColor)
        painter.setFont(self.fTopTextFont)
        painter.drawText(QPointF(10, 16), self.fTopText)
        painter.restore()
Exemple #35
0
class MyFirstScene(QWidget):
    mainWindow = None

    def __init__(self):
        QWidget.__init__(self)
        MyFirstScene.mainWindow = self
        self.scene = scene(self)
        self.setGeometry(100, 100, 400, 400)
        self.background = QPixmap("./chessboard.png")
        self.bg_height = self.background.height()
        self.bg_width = self.background.width()
        self.field = self.bg_width / 8

        #self.background=QPixmap("./chessboard.png")
        #self.scene.drawBackground(painter.drawPixmap)
        #self.scene.addText("Hello, world!")
        figure = Figure(1, 1, 1)
        Blackpavn = [Pawns(6, i, 2) for i in range(8)]
        Whitepavn = [WhitePawn(1, i, 1) for i in range(8)]
        Blackrooks = [Rooks(7, 0, 2), Rooks(7, 7, 2)]
        Whiterooks = [Rooks(0, 0, 1), Rooks(0, 7, 1)]
        Blackkhnights = [Khnights(7, 1, 2), Khnights(7, 6, 2)]
        Whitekhnights = [Khnights(0, 1, 1), Khnights(0, 6, 1)]
        Blackbishops = [Bishops(7, 2, 2), Bishops(7, 5, 2)]
        Whitebishops = [Bishops(0, 2, 1), Bishops(0, 5, 1)]
        BlackKing = King(7, 4, 2)
        WhiteKing = King(0, 4, 1)
        BlackQuean = Quen(7, 3, 2)
        WhiteQuean = Quen(0, 3, 1)
        Piece.addGlobalScene(self.scene)
        Piece.addGlobalSize(self.field)

        self.scene.addItem(
            Background(self.background, 0, 0, self.bg_width, self.bg_height,
                       False))
        self.scene.addItem(
            Piece(
                QPixmap("./whiterook.png").scaled(self.field, self.field), 0,
                0, self.field, self.field, Whiterooks[0]))
        self.scene.addItem(
            Piece(QPixmap("./whiterook.png").scaled(self.field, self.field),
                  self.field * 7,
                  0,
                  self.field,
                  self.field,
                  Whiterooks[1],
                  site='r'))
        self.scene.addItem(
            Piece(
                QPixmap("./whiteknight.png").scaled(self.field, self.field),
                self.field, 0, self.field, self.field, Whitekhnights[0]))
        self.scene.addItem(
            Piece(
                QPixmap("./whiteknight.png").scaled(self.field, self.field),
                self.field * 6, 0, self.field, self.field, Whitekhnights[1]))
        self.scene.addItem(
            Piece(
                QPixmap("./whitebishop.png").scaled(self.field, self.field),
                self.field * 2, 0, self.field, self.field, Whitebishops[0]))
        self.scene.addItem(
            Piece(
                QPixmap("./whitebishop.png").scaled(self.field, self.field),
                self.field * 5, 0, self.field, self.field, Whitebishops[1]))
        self.scene.addItem(
            Piece(
                QPixmap("./whitequean.png").scaled(self.field, self.field),
                self.field * 3, 0, self.field, self.field, WhiteQuean))
        self.scene.addItem(
            Piece(
                QPixmap("./Chessking.png").scaled(self.field, self.field),
                self.field * 4, 0, self.field, self.field, WhiteKing))
        [
            self.scene.addItem(
                Piece(
                    QPixmap("./whitepawn.png").scaled(self.field, self.field),
                    self.field * i, self.field, self.field, self.field, pawn))
            for i, pawn in enumerate(Whitepavn)
        ]
        self.scene.addItem(
            Piece(
                QPixmap("./blackrook.png").scaled(self.field, self.field), 0,
                self.field * 7, self.field, self.field, Blackrooks[0]))
        self.scene.addItem(
            Piece(QPixmap("./blackrook.png").scaled(self.field, self.field),
                  self.field * 7,
                  self.field * 7,
                  self.field,
                  self.field,
                  Blackrooks[1],
                  site='r'))
        self.scene.addItem(
            Piece(
                QPixmap("./blackknight.png").scaled(self.field,
                                                    self.field), self.field,
                self.field * 7, self.field, self.field, Blackkhnights[0]))
        self.scene.addItem(
            Piece(
                QPixmap("./blackknight.png").scaled(self.field, self.field),
                self.field * 6, self.field * 7, self.field, self.field,
                Blackkhnights[1]))
        self.scene.addItem(
            Piece(
                QPixmap("./blackbishop.png").scaled(self.field, self.field),
                self.field * 2, self.field * 7, self.field, self.field,
                Blackbishops[0]))
        self.scene.addItem(
            Piece(
                QPixmap("./blackbishop.png").scaled(self.field, self.field),
                self.field * 5, self.field * 7, self.field, self.field,
                Blackbishops[1]))
        self.scene.addItem(
            Piece(
                QPixmap("./blackquean.png").scaled(self.field,
                                                   self.field), self.field * 3,
                self.field * 7, self.field, self.field, BlackQuean))
        self.scene.addItem(
            Piece(
                QPixmap("./blackking.png").scaled(self.field,
                                                  self.field), self.field * 4,
                self.field * 7, self.field, self.field, BlackKing))
        [
            self.scene.addItem(
                Piece(
                    QPixmap("./blackpawn.png").scaled(self.field, self.field),
                    self.field * i, self.field * 6, self.field, self.field,
                    pawn)) for i, pawn in enumerate(Blackpavn)
        ]
        #self.scene.addItem(Piece(QPixmap("./Chessking.png").scaled(self.bg_width / 8, self.bg_height / 8), 0, 0))
        #height=QPixmap("./Chessking.png").height()
        #item=self.selectedItems()
        #print(QGraphicsScene.selectedItems(self.scene))
        self.view = QGraphicsView(self.scene, self)
        #self.view.setBackgroundBrush(self.background)
        # selected=selectedThread(self.scene)
        # selected.start()
        #self.scene.selectedItems()
        self.view.scene().update()
        self.show()
        # try:
        #     client = Client()
        #     client.start()
        # except Exception as e:
        #     print(e)

    @staticmethod
    def showMessage(string):
        QMessageBox.question(MyFirstScene.mainWindow, string, None)
Exemple #36
0
class PixWindow(QWidget, UI_FORM.Ui_Form):  # 不规则窗体
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.initAppearance()
        self.setMusic()

    def initAppearance(self):
        # 设置窗口的样式
        self.pix = QPixmap('beijing.png')  # 蒙版
        windowWidth = 700
        windowHeight = 700
        self.resize(windowWidth, windowHeight)
        self.pix = self.pix.scaled(int(windowWidth), int(windowHeight))
        self.setMask(self.pix.mask())
        # 设置无边框
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.center()
        # 设置按钮的样式
        self.pushButton.setStyleSheet(
            'QPushButton{border-image:url(button.png)}')
        tempPixmap = QPixmap("button.png").scaled(self.pushButton.size())
        self.pushButton.setMask(tempPixmap.mask())

    def paintEvent(self, event):  # 绘制窗口
        paint = QPainter(self)
        paint.drawPixmap(0, 0, self.pix.width(), self.pix.height(), self.pix)

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Escape:
            self.close()

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.m_flag = True
            self.m_Position = event.globalPos() - self.pos()  # 获取鼠标相对窗口的位置
            event.accept()
            self.setCursor(QCursor(Qt.OpenHandCursor))  # 更改鼠标图标

    def mouseMoveEvent(self, QMouseEvent):
        if Qt.LeftButton and self.m_flag:
            self.move(QMouseEvent.globalPos() - self.m_Position)  # 更改窗口位置
            QMouseEvent.accept()

    def mouseReleaseEvent(self, QMouseEvent):
        self.m_flag = False
        self.setCursor(QCursor(Qt.ArrowCursor))

    def contextMenuEvent(self, event):
        cmenu = QMenu(self)
        quitAct = cmenu.addAction("Quit")
        action = cmenu.exec_(self.mapToGlobal(event.pos()))
        if action == quitAct:
            qApp.quit()

    def setMusic(self):
        pygame.mixer.init()
        pygame.mixer.music.load(r"music.mp3")
        pygame.mixer.music.play(loops=-1)

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def showLove(self):
        dialog1.pushButton_2.move(370, 240)
        dialog1.show()
Exemple #37
0
class NextWindow(QWidget, Next_UI.Ui_Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)
        self.initAppearance()

    def initAppearance(self):
        # 设置窗口的样式
        self.pix = QPixmap('next.jpg')
        windowWidth = 432
        windowHeight = 768
        self.resize(windowWidth, windowHeight)
        self.pix = self.pix.scaled(int(windowWidth), int(windowHeight))
        # 设置无边框
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.center()
        # 设置按钮的样式
        self.pushButton.setStyleSheet(
            'QPushButton{border-image:url(beijing.png)}')
        tempPixmap = QPixmap("beijing.png").scaled(self.pushButton.size())
        self.pushButton.setMask(tempPixmap.mask())

    def paintEvent(self, event):  # 绘制窗口
        paint = QPainter(self)
        paint.drawPixmap(0, 0, self.pix.width(), self.pix.height(), self.pix)

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Escape:
            self.close()

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.m_flag = True
            self.m_Position = event.globalPos() - self.pos()  # 获取鼠标相对窗口的位置
            event.accept()
            self.setCursor(QCursor(Qt.OpenHandCursor))  # 更改鼠标图标

    def mouseMoveEvent(self, QMouseEvent):
        if Qt.LeftButton and self.m_flag:
            self.move(QMouseEvent.globalPos() - self.m_Position)  # 更改窗口位置
            QMouseEvent.accept()

    def mouseReleaseEvent(self, QMouseEvent):
        self.m_flag = False
        self.setCursor(QCursor(Qt.ArrowCursor))

    def contextMenuEvent(self, event):
        cmenu = QMenu(self)
        quitAct = cmenu.addAction("Quit")
        action = cmenu.exec_(self.mapToGlobal(event.pos()))
        if action == quitAct:
            qApp.quit()

    def center(self):
        qr = self.frameGeometry()
        cp = QDesktopWidget().availableGeometry().center()
        qr.moveCenter(cp)
        self.move(qr.topLeft())

    def onClicked(self):
        self.close()
        pictureWin.show()
Exemple #38
0
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, *args, obj=None, **kwargs):
        super(MainWindow, self).__init__(*args, **kwargs)
        self.worker = None
        self.stop_ruleVar = 0

        self.centralwidget = QtWidgets.QWidget(self)
        self.label = QtWidgets.QLabel()
        self.lineEdit = QtWidgets.QLineEdit(
            "https://www.njuskalo.hr/prodaja-stanova/zagreb")
        self.siteURL = self.lineEdit.text()
        print(self.siteURL)
        self.go = QtWidgets.QPushButton()
        self.go.clicked.connect(self.gourl)
        self.lineEdit.returnPressed.connect(self.gourl)
        self.tabWidget = QtWidgets.QTabWidget()

        self.gridLayout = QtWidgets.QGridLayout(self.centralwidget)
        self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
        self.gridLayout.addWidget(self.lineEdit, 0, 1, 1, 1)
        self.gridLayout.addWidget(self.go, 0, 2, 1, 1)
        self.gridLayout.addWidget(self.tabWidget, 1, 0, 1, 3)

        # Tabs
        self.tabWidget.setEnabled(True)

        #Web tab
        self.webview = Browser()
        self.tabWidget.addTab(self.webview, "")

        #Datatab
        self.centralwidgetDT = QtWidgets.QWidget(self)

        self.lineEditDT = QtWidgets.QLineEdit(self.centralwidgetDT)
        self.pdtable = QtWidgets.QTableView(self.centralwidgetDT)
        self.comboBoxDT = QtWidgets.QComboBox(self.centralwidgetDT)
        self.labelDT = QtWidgets.QLabel(self.centralwidgetDT)

        self.gridLayoutDT = QtWidgets.QGridLayout(self.centralwidgetDT)
        self.gridLayoutDT.addWidget(self.labelDT, 0, 0, 1, 1)
        self.gridLayoutDT.addWidget(self.lineEditDT, 0, 1, 1, 1)
        self.gridLayoutDT.addWidget(self.comboBoxDT, 0, 2, 1, 1)
        self.gridLayoutDT.addWidget(self.pdtable, 1, 0, 1, 3)
        self.tabWidget.addTab(self.centralwidgetDT, "")

        self.pdtable.horizontalHeader().setCascadingSectionResizes(True)
        self.pdtable.horizontalHeader().setStretchLastSection(True)

        # Pandas model
        self.model = getPandas.PandasTableModel(pd.DataFrame())
        self.go.clicked.connect(self.getPageInfo)
        self.lineEdit.returnPressed.connect(self.getPageInfo)

        #Proxy model for filter
        self.proxy = QtCore.QSortFilterProxyModel(self)

        self.lineEditDT.textChanged.connect(self.on_lineEdit_textChanged)
        self.comboBoxDT.currentIndexChanged.connect(
            self.on_comboBox_currentIndexChanged)

        self.horizontalHeader = self.pdtable.horizontalHeader()
        self.horizontalHeader.sectionClicked.connect(
            self.on_view_horizontalHeader_sectionClicked)

        ######## NOTIFICATION TAB

        self.notifwidget = QtWidgets.QWidget(self)
        self.gridLayout_2 = QtWidgets.QGridLayout(self.notifwidget)
        self.gridLayout_2.columnStretch(0)

        ### TEXT LINES

        #  0 line - First Label
        self.label0NT = QtWidgets.QLabel(self.notifwidget)
        self.gridLayout_2.addWidget(self.label0NT, 0, 0, 1, 2)
        self.label0NT.setText(
            "Obavijesti me kada se pojavi oglas koji zadovoljava uvijete:")
        self.label0NT.setFixedHeight(20)

        # 1,0 - combobox
        self.comboBoxNT = QtWidgets.QComboBox(self.notifwidget)
        self.comboBoxNT.setObjectName("comboBoxNT")
        self.gridLayout_2.addWidget(self.comboBoxNT, 1, 0, 1, 2)

        # 1,2 - label
        self.label1NT = QtWidgets.QLabel(self.notifwidget)
        self.gridLayout_2.addWidget(self.label1NT, 1, 2, 1, 1)

        # 1,3 - lineEdit
        self.lineEditNT = QtWidgets.QLineEdit(self.notifwidget)
        self.lineEditNT.setAlignment(QtCore.Qt.AlignLeft)
        self.gridLayout_2.addWidget(self.lineEditNT, 1, 3, 1, 2)

        # 2,0 - combobox
        self.comboBoxNT_2 = QtWidgets.QComboBox(self.notifwidget)
        self.comboBoxNT_2.setObjectName("comboBoxNT_2")
        self.gridLayout_2.addWidget(self.comboBoxNT_2, 2, 0, 1, 2)

        #2,2 - label
        self.label1NT_2 = QtWidgets.QLabel(self.notifwidget)
        self.gridLayout_2.addWidget(self.label1NT_2, 2, 2, 1, 1)

        # 2,3 - lineEdit
        self.lineEditNT_2 = QtWidgets.QLineEdit(self.notifwidget)
        self.gridLayout_2.addWidget(self.lineEditNT_2, 2, 3, 1, 2)

        # 3,0 - combobox
        self.comboBoxNT_3 = QtWidgets.QComboBox(self.notifwidget)
        self.comboBoxNT_3.setObjectName("comboBoxNT_3")
        self.gridLayout_2.addWidget(self.comboBoxNT_3, 3, 0, 1, 2)

        # 3,2 - label
        self.label1NT_3 = QtWidgets.QLabel(self.notifwidget)
        self.gridLayout_2.addWidget(self.label1NT_3, 3, 2, 1, 1)

        # 3,3 - lineEdit
        self.lineEditNT_3 = QtWidgets.QLineEdit(self.notifwidget)
        self.gridLayout_2.addWidget(self.lineEditNT_3, 3, 3, 1, 2)

        ### INTEGER LINES
        # 4,0  - combobox
        self.comboBoxNT_4 = QtWidgets.QComboBox(self.notifwidget)
        self.comboBoxNT_4.setObjectName("comboBoxNT_4")
        self.gridLayout_2.addWidget(self.comboBoxNT_4, 4, 0, 1, 2)

        # 4,2 - label
        self.label1NT_4 = QtWidgets.QLabel(self.notifwidget)
        self.gridLayout_2.addWidget(self.label1NT_4, 4, 2, 1, 1)

        # 4,3 - lineEdit (int)
        self.lineEditNT_4 = QtWidgets.QLineEdit(self.notifwidget)
        self.gridLayout_2.addWidget(self.lineEditNT_4, 4, 3, 1, 1)

        # 4,4 - label
        self.label1NT_5 = QtWidgets.QLabel(self.notifwidget)
        self.label1NT_5.setAlignment(QtCore.Qt.AlignCenter)
        self.gridLayout_2.addWidget(self.label1NT_5, 4, 4, 1, 1)

        # 4,5 - lineEdit (int)
        self.lineEditNT_5 = QtWidgets.QLineEdit(self.notifwidget)
        self.gridLayout_2.addWidget(self.lineEditNT_5, 4, 5, 1, 1)

        # 5,0  - combobox
        self.comboBoxNT_5 = QtWidgets.QComboBox(self.notifwidget)
        self.gridLayout_2.addWidget(self.comboBoxNT_5, 5, 0, 1, 2)

        # 5,2 - label
        self.label1NT_6 = QtWidgets.QLabel(self.notifwidget)
        self.gridLayout_2.addWidget(self.label1NT_6, 5, 2, 1, 1)

        # 5,3 - lineEdit (int)
        self.lineEditNT_7 = QtWidgets.QLineEdit(self.notifwidget)
        self.gridLayout_2.addWidget(self.lineEditNT_7, 5, 3, 1, 1)

        # 5,4 - label
        self.label1NT_7 = QtWidgets.QLabel(self.notifwidget)
        self.label1NT_7.setAlignment(QtCore.Qt.AlignCenter)
        self.gridLayout_2.addWidget(self.label1NT_7, 5, 4, 1, 1)

        # 5,5 - lineEdit (int)
        self.lineEditNT_6 = QtWidgets.QLineEdit(self.notifwidget)
        self.gridLayout_2.addWidget(self.lineEditNT_6, 5, 5, 1, 1)

        # 6,0  - combobox
        self.comboBoxNT_6 = QtWidgets.QComboBox(self.notifwidget)
        self.gridLayout_2.addWidget(self.comboBoxNT_6, 6, 0, 1, 2)

        # 6,2 - label
        self.label1NT_8 = QtWidgets.QLabel(self.notifwidget)
        self.gridLayout_2.addWidget(self.label1NT_8, 6, 2, 1, 1)

        # 6,3 - line edit (int)
        self.lineEditNT_9 = QtWidgets.QLineEdit(self.notifwidget)
        self.gridLayout_2.addWidget(self.lineEditNT_9, 6, 3, 1, 1)

        # 6,4 - label
        self.label1NT_9 = QtWidgets.QLabel(self.notifwidget)
        self.label1NT_9.setAlignment(QtCore.Qt.AlignCenter)
        self.gridLayout_2.addWidget(self.label1NT_9, 6, 4, 1, 1)

        # 6,5  - line edit (int)
        self.lineEditNT_8 = QtWidgets.QLineEdit(self.notifwidget)
        self.gridLayout_2.addWidget(self.lineEditNT_8, 6, 5, 1, 1)

        ## DATETIME LINE
        # 7,0 - combobox
        self.comboBoxNT_8 = QtWidgets.QComboBox()
        # self.gridLayout_2.addWidget(self.comboBoxNT_8, 7, 0, 1, 2)
        #
        # # 7,2 - label
        # self.label1NT_19 = QtWidgets.QLabel(self.notifwidget)
        # self.gridLayout_2.addWidget(self.label1NT_19, 7, 2, 1, 1)
        #
        # # 7,3 - datetime from
        # self.dateTimeEditNT = QtWidgets.QDateTimeEdit(self.notifwidget)
        # self.dateTimeEditNT.setDateTime(QtCore.QDateTime.currentDateTime().addSecs(-(self.frequency)))
        # self.gridLayout_2.addWidget(self.dateTimeEditNT, 7, 3, 1, 1)
        #
        # # 7,4 - label
        # self.label1NT_20 = QtWidgets.QLabel(self.notifwidget)
        # self.label1NT_20.setAlignment(QtCore.Qt.AlignCenter)
        # self.gridLayout_2.addWidget(self.label1NT_20, 7, 4, 1, 1)
        #
        # # 7,5 - datetime end
        # self.dateTimeEditNT_2 = QtWidgets.QDateTimeEdit(self.notifwidget)
        # self.dateTimeEditNT_2.setDateTime(QtCore.QDateTime.currentDateTime())
        # self.gridLayout_2.addWidget(self.dateTimeEditNT_2, 7, 5, 1, 1)

        # 8,0 - label
        self.label1NT_22 = QtWidgets.QLabel(self.notifwidget)
        self.label1NT_22.setObjectName("label1NT_22")
        self.gridLayout_2.addWidget(self.label1NT_22, 8, 0, 1, 2)
        self.label1NT_22.setText("Dohvati nove oglase svakih: ")

        # 8,2 - combobox - minutes list
        self.comboBoxNT_MIN = QtWidgets.QComboBox(self.notifwidget)
        comboBoxNT_MIN_list = [str(x) for x in range(5, 125, 5)]
        self.comboBoxNT_MIN.clear()
        self.comboBoxNT_MIN.addItems(comboBoxNT_MIN_list)
        self.gridLayout_2.addWidget(self.comboBoxNT_MIN, 8, 2, 1, 1)

        # 8,3 - label
        self.label1NT_27 = QtWidgets.QLabel(self.notifwidget)
        self.label1NT_27.setObjectName("label1NT_27")
        self.gridLayout_2.addWidget(self.label1NT_27, 8, 3, 1, 1)

        #### sati
        # 9,0 - label
        self.label1NT_23 = QtWidgets.QLabel(self.notifwidget)
        self.gridLayout_2.addWidget(self.label1NT_23, 9, 0, 1, 2)
        self.label1NT_23.setText("Neka se ovo pravilo izvršava idućih:")

        # 9,2 - combobox - sati
        self.comboBoxNT_HOUR = QtWidgets.QComboBox(self.notifwidget)
        comboBoxNT_HOUR_list = [str(x) for x in range(2, 125, 2)]
        self.comboBoxNT_HOUR.clear()
        self.comboBoxNT_HOUR.addItems(comboBoxNT_HOUR_list)
        self.gridLayout_2.addWidget(self.comboBoxNT_HOUR, 9, 2, 1, 1)

        # 9,3 - label
        self.label1NT_28 = QtWidgets.QLabel(self.notifwidget)
        self.label1NT_28.setObjectName("label1NT_28")
        self.gridLayout_2.addWidget(self.label1NT_28, 9, 3, 1, 1)

        # EMAIL
        # 10,0 - label
        self.label1NT_26 = QtWidgets.QLabel(self.notifwidget)
        self.gridLayout_2.addWidget(self.label1NT_26, 10, 0, 1, 2)
        self.label1NT_26.setText("Obavijesti me na ovu E-mail adresu:")

        # 10,2 - Email adresa input
        self.lineEditNT_Email = QtWidgets.QLineEdit(self.notifwidget)
        self.gridLayout_2.addWidget(self.lineEditNT_Email, 10, 2, 1, 1)

        # 10,3 - Lozinka label
        self.userEmailPsswdLabel = QtWidgets.QLabel(self.notifwidget)
        self.userEmailPsswdLabel.setText("Lozinka za email adresu:")
        self.userEmailPsswdLabel.setAlignment(QtCore.Qt.AlignRight
                                              | QtCore.Qt.AlignVCenter)
        # self.userEmailPsswdLabel.setMinimumWidth(400)
        self.gridLayout_2.addWidget(self.userEmailPsswdLabel, 10, 3, 1, 1)

        #10,4 - Lozinka input
        self.lineEditNT_EmailPsswd = QtWidgets.QLineEdit(self.notifwidget)
        self.lineEditNT_EmailPsswd.setEchoMode(QLineEdit.Password)
        self.lineEditNT_EmailPsswd.setMinimumWidth(200)
        self.gridLayout_2.addWidget(self.lineEditNT_EmailPsswd, 10, 4, 1, 2)
        # loading image
        self.userEmailWarningLB = QtWidgets.QLabel(self.notifwidget)

        # 10,5 Image warning
        self.emailWarningIMG = QPixmap(':/icons/emailWarning.ico')
        self.userEmailWarningLB.setPixmap(self.emailWarningIMG)
        # Optional, resize label to image size
        self.userEmailWarningLB.resize(self.emailWarningIMG.width(),
                                       self.emailWarningIMG.height())

        # warning image info on hover
        self.userEmailWarningLB.move(0, 0)
        self.userEmailWarningLB.setStyleSheet("border :3px solid black;")
        self.userEmailWarningLB.setToolTip(
            "Mora biti omogućen pristup za Manje sigurne aplikacije (Less secure apps opcija na vašem Google računu), molimo vas kliknite na <b>\"Upute\"</b> na meniju kako biste saznali zašto ili kliknite na <b>\"Omogući manje sigurne aplikacije\"</b> na meniju i odmah uključite tu opciju ako ne želite čitati upute."
        )
        self.userEmailWarningLB.setToolTipDuration(10000000)
        self.gridLayout_2.addWidget(self.userEmailWarningLB, 10, 6, 1, 1)

        # 11 INFO
        boldLabel = QtGui.QFont()
        boldLabel.setBold(True)
        self.label.setFont(boldLabel)
        # 11,0 - label

        self.ruleTimes = QtWidgets.QLabel(self.notifwidget)
        self.ruleTimes.setText("")
        self.ruleTimes.setFont(boldLabel)
        self.gridLayout_2.addWidget(self.ruleTimes, 11, 2, 1, 4)
        self.ruleTimes.setFixedHeight(20)
        self.ruleTimes.setMinimumWidth(400)

        # 12 PRAVILO
        # 12,0 - label
        self.start = QtWidgets.QLabel(self.notifwidget)
        self.start.setText("Pravilo nije pokrenuto.")
        self.start.setFont(boldLabel)
        self.gridLayout_2.addWidget(self.start, 12, 2, 1, 2)
        self.start.setFixedHeight(20)
        self.start.setMinimumWidth(400)

        # 12,1 - label
        self.countToNext = QtWidgets.QLabel(self.notifwidget)
        self.countToNext.setText("Brojač.")
        self.countToNext.setFont(boldLabel)
        self.gridLayout_2.addWidget(self.countToNext, 12, 3, 1, 2)
        self.countToNext.setFixedHeight(20)

        # 13 - BUTTONS (POKRENI - ZAUSTAVI)
        self.testEmailBT = QPushButton("Pošalji test mail")
        self.testEmailBT.pressed.connect(self.testEmail)
        self.gridLayout_2.addWidget(self.testEmailBT, 13, 2, 1, 1)
        self.startRule = QPushButton("Pokreni")
        self.gridLayout_2.addWidget(self.startRule, 13, 3, 1, 1)
        self.endRule = QPushButton("Zaustavi")
        self.gridLayout_2.addWidget(self.endRule, 13, 4, 1, 1)

        self.tabWidget.addTab(self.notifwidget, "Obaviještavanje")
        self.setCentralWidget(self.centralwidget)

        # Create a statusbar.
        self.status = self.statusBar()
        self.progress = QProgressBar()
        self.status.addPermanentWidget(self.progress)

        # Menu
        toolbar = QToolBar("Glavni Toolbar")
        toolbar.setIconSize(QSize(16, 16))
        self.addToolBar(toolbar)

        # UPUTE
        uputeAction = QAction("Upute", self)
        uputeAction.triggered.connect(self.openUrl)
        uputeAction.setCheckable(True)
        toolbar.addAction(uputeAction)

        dopustiManjeSigurne = QAction("Omogući manje sigurne aplikacije", self)
        dopustiManjeSigurne.triggered.connect(self.openUrlManjeSigurne)
        dopustiManjeSigurne.setCheckable(True)
        toolbar.addAction(dopustiManjeSigurne)

        # O aplikaciji
        aboutAction = QAction("O aplikaciji", self)
        aboutAction.triggered.connect(self.aboutapp)
        aboutAction.setCheckable(True)
        toolbar.addAction(aboutAction)

        # Thread and timer
        self.threadpool = QThreadPool()
        self.startRule.pressed.connect(self.start_rule)
        self.endRule.pressed.connect(self.stop_rule)
        self.timer = QTimer()
        self.timer.setInterval(1000)

        self.retranslateUi()
        self.tabWidget.setCurrentIndex(0)
        QtCore.QMetaObject.connectSlotsByName(self)

    def aboutapp(self):
        QMessageBox.about(
            self, "Njuškalo Poštar info",
            "Aplikacija za dohvat, analizu i obaviještavanje na temelju"
            " podataka sa njuškalo.hr stranice. <br>"
            "Trebate više informacije, želite izraditi sličnu aplikaciju, želite licencirati enterprise verziju aplikacije ili imate neki drugi upit - obratite se na [email protected]"
        )
        return

    def openUrl(self, url):
        QDesktopServices.openUrl(
            QUrl(
                "https://njuskalo-postar-dokumentacija.readthedocs.io/hr/latest/contents.html"
            ))

    def openUrlManjeSigurne(self):
        QDesktopServices.openUrl(
            QUrl(
                "https://njuskalo-postar-dokumentacija.readthedocs.io/hr/latest/contents.html#kako-dopustiti-manje-sigurnim-aplikacijama-da-mi-salju-email"
            ))

    def testEmail(self):
        sendtoEmail = self.lineEditNT_Email.text()
        emailPsswd = self.lineEditNT_EmailPsswd.text()
        if not sendtoEmail or not emailPsswd:
            QMessageBox.about(self, "Email polje ili lozinka je prazno!",
                              "Niste unijeli email adresu i/ili lozinku.")
            return
        SendToGmail(destination=sendtoEmail,
                    df=self.pageDF[0:10],
                    serverLogin=sendtoEmail,
                    serverPss=emailPsswd)
        QMessageBox.about(
            self, "Mail poslan!",
            "Poslano je prvih 10 stanova iz <br> \"Podaci iz web stranice\". Provjerite email koji ste unijeli."
        )
        self.testEmailBT.setText("Test mail poslan")
        return

    def convert(self, seconds):
        seconds = seconds % (24 * 3600)
        days = seconds // (24 * 3600)
        hour = seconds // 3600
        seconds %= 3600
        minutes = seconds // 60
        seconds %= 60
        return "%d:%d:%02d:%02d" % (days, hour, minutes, seconds)

    def progress_fn(self, n):
        self.progress.setValue(n)
        if self.stop_ruleVar == 0:
            self.start.setText("Izvršeno " + str(n) + "%")

    def start_rule(self):
        worker = Worker(
            self.execute_rule
        )  # Any other args, kwargs are passed to the run function
        worker.signals.progress.connect(self.progress_fn)
        self.threadpool.start(worker)

    def execute_rule(self, progress_callback):
        sendtoEmail = self.lineEditNT_Email.text()
        emailPsswd = self.lineEditNT_EmailPsswd.text()
        if not sendtoEmail or not emailPsswd:
            QMessageBox.about(self, "Email polje ili lozinka je prazno!",
                              "Niste unijeli email adresu i/ili lozinku.")
            self.timer.stop()
            return
        self.timer.start()
        self.startRule.setEnabled(False)
        self.start.setText("Pravilo pokrenuto.")
        self.counter = int(self.comboBoxNT_HOUR.currentText()) * 3600
        self.frequency = int(self.comboBoxNT_MIN.currentText()) * 60
        freq = self.frequency
        counter = self.counter
        self.ruleTimes.setText("Izvršavam pravilo još -  " +
                               str(display_time(counter, 4)))
        for n in range(1, counter + 1):
            if self.stop_ruleVar == 1:
                self.timer.stop()
                progress_callback.emit(0)
                self.startRule.setEnabled(True)
                self.stop_ruleVar = 0
                return
            if freq == 1:
                freq = self.frequency
            else:
                freq -= 1
            counter -= 1
            time.sleep(1)
            if n % self.frequency == 0 and self.stop_ruleVar != 1:
                self.countToNext.setText(
                    "Dohvaćam nove podatke i šaljem obavijest.")
                self.getInfoFromForm()

                if not self.filteredpageDF.empty:
                    SendToGmail(destination=sendtoEmail,
                                df=self.filteredpageDF,
                                serverLogin=sendtoEmail,
                                serverPss=emailPsswd)
                prog_prct = (n / self.counter) * 100
                progress_callback.emit(prog_prct)
            if self.stop_ruleVar != 1:
                self.countToNext.setText("Dohvaćam nove podatke za " +
                                         str(self.convert(int(freq))))
            if counter == 0:
                self.start.setText("Zadatak izvršen.")
                self.countToNext.setText("")
                progress_callback.emit(100)
                self.timer.stop()
                self.startRule.setEnabled(True)
        return

    def stop_rule(self):
        self.start.setText("Zadatak zaustavljen.")
        self.ruleTimes.setText("")
        self.countToNext.setText("")
        self.stop_ruleVar = 1

    def shutdown(self):
        if self.worker:  # set self.worker=None in your __init__ so it's always defined.
            self.worker.kill()
        self.stop_ruleVar = 1


#########################################

    def gourl(self):
        self.siteURL = self.lineEdit.text()
        self.webview.load(QUrl(self.siteURL))

    def getPageInfo(self):
        self.siteURL = self.lineEdit.text()
        getPage = GetPage(self.siteURL, "data", "page")
        self.pageDF = getPage.getAdInfo()
        if self.pageDF.empty:
            msg = QMessageBox()
            msg.setWindowTitle("Greška!")
            msg.setText(
                "Unosite isključivo stranice koje na početku imaju https://www.njuskalo.hr/prodaja-stanova/ i koje postoje na njuskalo.hr"
            )
            msg.setIcon(QMessageBox.Critical)
            msg.exec_()

        # print(self.pageDF.columns)
        self.model = getPandas.PandasTableModel(self.pageDF)
        self.pdtable.setModel(self.model)
        self.pdtable.doubleClicked.connect(self.OpenLink)

        self.proxy.setSourceModel(self.model)
        self.pdtable.setModel(self.proxy)
        self.comboBoxDT.clear()
        self.comboBoxDT.addItems(self.pageDF.columns)

        # Combo TEXT boxes
        comboBoxNT_listText = [
            'Naslov', 'Tip', 'Lokacija', 'ID', 'URL', 'TipOglasa'
        ]
        self.comboBoxNT.clear()
        self.comboBoxNT.addItems(comboBoxNT_listText)
        self.comboBoxNT.setCurrentText(comboBoxNT_listText[0])
        self.comboBoxNT_2.clear()
        self.comboBoxNT_2.addItems(comboBoxNT_listText)
        self.comboBoxNT_2.setCurrentText(comboBoxNT_listText[1])
        self.comboBoxNT_3.clear()
        self.comboBoxNT_3.addItems(comboBoxNT_listText)
        self.comboBoxNT_3.setCurrentText(comboBoxNT_listText[2])

        # Combo NUM boxes
        comboBoxNT_listNums = ['Kvadratura', 'CijenaKN', 'CijenaEUR']
        self.comboBoxNT_4.clear()
        self.comboBoxNT_4.addItems(comboBoxNT_listNums)
        self.comboBoxNT_4.setCurrentText(comboBoxNT_listNums[0])
        self.comboBoxNT_5.clear()
        self.comboBoxNT_5.addItems(comboBoxNT_listNums)
        self.comboBoxNT_5.setCurrentText(comboBoxNT_listNums[1])
        self.comboBoxNT_6.clear()
        self.comboBoxNT_6.addItems(comboBoxNT_listNums)
        self.comboBoxNT_6.setCurrentText(comboBoxNT_listNums[2])

        # DATETIME Boxes
        self.comboBoxNT_8.clear()
        self.comboBoxNT_8.addItems(['VrijemeObjave'])
        self.comboBoxNT_8.setCurrentText('VrijemeObjave')

    def mk_int_0(self, s):
        s = s.strip()
        return int(s) if s else 0

    def mk_int_max(self, s):
        s = s.strip()
        return int(s) if s else 1073741824

    def getInfoFromForm(self):
        userQuery = []
        # Combobox - text lines
        userFormQuery = {}
        ## Pandas dataframe filtering dictionary
        datetimeFormat = '%d.%m.%Y %H:%M:%S'
        self.startTime = (
            datetime.now() -
            timedelta(seconds=int(self.comboBoxNT_MIN.currentText()) *
                      60)).strftime(datetimeFormat)
        self.endTime = datetime.now().strftime(datetimeFormat)
        # Text values
        userFormQuery[self.comboBoxNT.currentText()] = self.lineEditNT.text()
        userFormQuery[
            self.comboBoxNT_2.currentText()] = self.lineEditNT_2.text()
        userFormQuery[
            self.comboBoxNT_3.currentText()] = self.lineEditNT_3.text()
        # Int values
        userFormQuery[self.comboBoxNT_4.currentText()] = [
            self.mk_int_0(self.lineEditNT_4.text()),
            self.mk_int_max(self.lineEditNT_5.text())
        ]
        userFormQuery[self.comboBoxNT_5.currentText()] = [
            self.mk_int_0(self.lineEditNT_7.text()),
            self.mk_int_max(self.lineEditNT_6.text())
        ]
        userFormQuery[self.comboBoxNT_6.currentText()] = [
            self.mk_int_0(self.lineEditNT_9.text()),
            self.mk_int_max(self.lineEditNT_8.text())
        ]
        # DateTime values
        userFormQuery[self.comboBoxNT_8.currentText()] = [
            self.startTime, self.endTime
        ]
        self.filteredpageDF = pd.DataFrame()
        self.filteredpageDF = self.pageDF

        for key, value in list(userFormQuery.items()):
            if 'str' in str(type(value)):
                if not value: del userFormQuery[key]

        commands = []
        for key, value in userFormQuery.items():
            if 'list' in str(type(value)):
                if 'int' in str(type(value[0])):
                    command = "self.pageDF[\"{}\"] > {}) & (self.pageDF[\"{}\"] < {}".format(
                        key, value[0], key, value[1])
                    commands.append((command))
                else:  # This part takes care of datetime comparison - list contains 2 datetime strings
                    command = "self.pageDF[\"{}\"] > \"{}\") & (self.pageDF[\"{}\"] < \"{}\"".format(
                        key, value[0], key, value[1])
                    commands.append((command))
            if 'str' in str(type(value)):
                command = "self.pageDF[\"{}\"].str.contains(\"{}\", flags=re.IGNORECASE)".format(
                    key, value)
                commands.append((command))

        commandFinal = ''
        for command in commands:
            commandFinal = commandFinal + ("({}) & ".format(command))

        commandFinal = "self.pageDF[" + commandFinal[:-3] + "]"

        self.filteredpageDF = eval(commandFinal)
        # Cast datetime to str in desired format for showing on front end
        # self.pageDF['VrijemeObjave'] = pd.to_datetime(self.pageDF['VrijemeObjave'], format='%d.%m.%Y %H:%M:%S').dt.strftime('%d.%m.%Y %H:%M:%S')
        # print(self.filteredpageDF.shape)
        # if not self.filteredpageDF.empty:
        #     self.filteredpageDF['VrijemeObjave'] = pd.to_datetime(self.filteredpageDF['VrijemeObjave'],
        #                                                   format='%d.%m.%Y %H:%M:%S').dt.strftime('%d.%m.%Y %H:%M:%S')
    def OpenLink(self, item):
        for index in self.pdtable.selectionModel().selectedIndexes():
            value = str(self.pageDF.iloc[index.row()][index.column()])
            if value.startswith("http://") or value.startswith("https://"):
                webbrowser.open(value)

    def retranslateUi(self):
        _translate = QtCore.QCoreApplication.translate
        self.setWindowTitle(_translate("main", "Njuškalo Poštar"))
        self.label.setText(_translate("main", "Unesite URL:"))
        self.go.setText(_translate("main", "Kreni"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.webview),
                                  _translate("main", "Web stranica"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.centralwidgetDT),
                                  _translate("main", "Podaci iz web stranice"))
        self.labelDT.setText(_translate("main", " Pretraga: "))
        self.comboBoxDT.setPlaceholderText(_translate("main", "Odaberite"))
        self.tabWidget.setTabText(self.tabWidget.indexOf(self.notifwidget),
                                  _translate("main", "Obaviještavanje"))
        self.label1NT_4.setText(_translate("main", "između:"))
        self.label1NT_28.setText(_translate("main", "sati"))
        self.label1NT_8.setText(_translate("main", "između:"))
        self.label1NT_27.setText(_translate("main", "minuta"))
        self.label1NT_5.setText(_translate("main", "i"))
        self.label1NT_7.setText(_translate("main", "i"))
        self.label1NT.setText(_translate("main", "sadrži tekst:"))
        self.label1NT_9.setText(_translate("main", "i"))
        self.label1NT_6.setText(_translate("main", "između:"))
        self.label1NT_3.setText(_translate("main", "sadrži tekst:"))
        self.label1NT_2.setText(_translate("main", "sadrži tekst:"))

    @QtCore.pyqtSlot(int)
    def on_view_horizontalHeader_sectionClicked(self, logicalIndex):
        self.logicalIndex = logicalIndex
        self.menuValues = QtWidgets.QMenu(self)
        self.signalMapper = QtCore.QSignalMapper(self)

        self.comboBoxDT.blockSignals(True)
        self.comboBoxDT.setCurrentIndex(self.logicalIndex)
        self.comboBoxDT.blockSignals(True)

        valuesUnique = [
            self.model.item(row, self.logicalIndex).text()
            for row in range(self.model.rowCount())
        ]

        actionAll = QtWidgets.QAction("All", self)
        actionAll.triggered.connect(self.on_actionAll_triggered)
        self.menuValues.addAction(actionAll)
        self.menuValues.addSeparator()

        for actionNumber, actionName in enumerate(
                sorted(list(set(valuesUnique)))):
            action = QtWidgets.QAction(actionName, self)
            self.signalMapper.setMapping(action, actionNumber)
            action.triggered.connect(self.signalMapper.map)
            self.menuValues.addAction(action)

        self.signalMapper.mapped.connect(self.on_signalMapper_mapped)

        headerPos = self.pdtable.mapToGlobal(self.horizontalHeader.pos())

        posY = headerPos.y() + self.horizontalHeader.height()
        posX = headerPos.x() + self.horizontalHeader.sectionViewportPosition(
            self.logicalIndex)

        self.menuValues.exec_(QtCore.QPoint(posX, posY))

    @QtCore.pyqtSlot()
    def on_actionAll_triggered(self):
        filterColumn = self.logicalIndex
        filterString = QtCore.QRegExp("", QtCore.Qt.CaseSensitive,
                                      QtCore.QRegExp.RegExp)
        self.proxy.setFilterRegExp(filterString)
        self.proxy.setFilterKeyColumn(filterColumn)

    @QtCore.pyqtSlot(int)
    def on_signalMapper_mapped(self, i):
        stringAction = self.signalMapper.mapping(i).text()
        filterColumn = self.logicalIndex
        filterString = QtCore.QRegExp(stringAction, QtCore.Qt.CaseInsensitive,
                                      QtCore.QRegExp.FixedString)
        self.proxy.setFilterRegExp(filterString)
        self.proxy.setFilterKeyColumn(filterColumn)

    @QtCore.pyqtSlot(str)
    def on_lineEdit_textChanged(self, text):
        search = QtCore.QRegExp(text, QtCore.Qt.CaseInsensitive,
                                QtCore.QRegExp.RegExp)

        self.proxy.setFilterRegExp(search)

    @QtCore.pyqtSlot(int)
    def on_comboBox_currentIndexChanged(self, index):
        self.proxy.setFilterKeyColumn(index)
Exemple #39
0
class Data():
    def __init__(self, file_name=None, work_dir=None):
        """
        Init Data class (images and annotation per image)

        :param file_name: annotation file
        :param work_dir: working directory for images
        """
        self.img_size = 0

        self.work_dir = work_dir

        if file_name == None:
            self.file_name = "untitled.json"
            self.no_anno_file = True
        else:
            self.file_name = file_name
            self.no_anno_file = False
        self.changed = False
        # Sorting part
        self.sort_points = False
        self.images_origin = None
        self.points_origin = None

        self.init_images()

    def init_images(self):
        self.images = []
        self.pt_names = set()
        self.seg_names = set()
        self.img_props = {}

        if self.work_dir is not None:
            # Get list of images
            extensions = [
                '.%s' % fmt.data().decode("ascii").lower()
                for fmt in QImageReader.supportedImageFormats()
            ]
            work_dir_file_names = [
                os.path.basename(file_name)
                for file_name in Path(self.work_dir).glob('*')
                if str(file_name).lower().endswith(tuple(extensions))
            ]

            if not self.no_anno_file:
                # Has annotation file
                with open(self.file_name, "r") as read_file:
                    data = json.load(read_file)
                # Init images list
                for entry in data:
                    if entry['file_name'] in work_dir_file_names:
                        image = Image(entry['file_name'],
                                      entry.get('points', None),
                                      entry.get('outlines', None),
                                      entry.get("outlines_cv", None),
                                      entry.get("property", None))
                        self.images.append(image)
                        # Update points names of all
                        for pt in entry['points']:
                            self.pt_names.add(pt['name'])

                        #Update seg name for all seg
                        for key, _ in entry['outlines_cv'].items():
                            self.seg_names.add(key)

                        #Update outline names
                        for key, item in entry['property'].items():

                            if type(item) is str:
                                # Categorical
                                if key in self.img_props:
                                    self.img_props[key].append(item)
                                else:
                                    self.img_props[key] = [item]
                            else:
                                # Numerical
                                if key not in self.img_props:
                                    self.img_props[key] = None

            else:
                # without annotation file
                for name in work_dir_file_names:
                    image = Image(name)
                    self.images.append(image)

            self.current_image_id = 0
            self.img_size = len(self.images)
            if self.img_size != 0:
                self.current_pixmap = QPixmap(
                    os.path.join(self.work_dir, self.get_current_image_name()))
                self.set_scale_fit_limit()

            self.filter_idx = list(range(0, self.img_size))
            self.sort_idx = list(range(0, self.img_size))
            self.flagged_img_idx = []

    def sort(self, value):
        if value == True:
            self.images_origin = self.images.copy()
            self.images.sort(key=lambda x: x.img_name, reverse=False)
        elif self.images_origin is not None:
            self.images = self.images_origin

    def set_image_id(self, idx):
        self.current_image_id = idx
        # Reset scale and current pixmap

        self.current_pixmap = QPixmap(
            os.path.join(self.work_dir, self.get_current_image_name()))
        self.set_scale_fit_limit()

    def set_work_dir(self, work_dir):
        self.work_dir = work_dir
        self.init_images()

    def set_file_name(self, file_name):
        self.no_anno_file = False
        self.file_name = file_name
        self.init_images()

    def set_scale(self, scale):
        temp = self.scale * scale
        if temp <= 7 * self.origin_scale and temp >= self.origin_scale / 2:
            self.scale = temp

    def reset_scale(self):
        self.scale = self.origin_scale

    def set_scale_fit_limit(self):

        # Setting the maximum scale limit
        if self.current_pixmap.width() > pixmap_max_size_limit.width(
        ) or self.current_pixmap.height() > pixmap_max_size_limit.height():
            width_scale = ceil(self.current_pixmap.width() /
                               pixmap_max_size_limit.width())
            height_scale = ceil(self.current_pixmap.height() /
                                pixmap_max_size_limit.height())

            self.origin_scale = 1 / max(width_scale, height_scale)
        elif self.current_pixmap.width() < pixmap_min_size_limit.width(
        ) or self.current_pixmap.height() < pixmap_min_size_limit.height():
            width_scale = ceil(pixmap_min_size_limit.width() /
                               self.current_pixmap.width())
            height_scale = ceil(pixmap_min_size_limit.height() /
                                self.current_pixmap.height())

            self.origin_scale = max(width_scale, height_scale)
        else:
            self.origin_scale = 1

        self.scale = self.origin_scale
        size = self.current_pixmap.size()

        # The width length
        self.length = int(rect_length_prop * max(size.width(), size.height()))

        if self.length < min_rect_length:
            self.length = min_rect_length
        self.get_current_image().set_points_width(self.length)

    def set_current_pt_of_current_img(self,
                                      pt_name=None,
                                      x=None,
                                      y=None,
                                      error=None,
                                      absence=None,
                                      info=None,
                                      scaled_coords=False):
        if scaled_coords:
            if y is not None:
                y = int(y / self.scale)
            if x is not None:
                x = int(x / self.scale)

        if self.get_current_pt_of_current_img().check_diff(pt_name=pt_name,
                                                           x=x,
                                                           y=y,
                                                           error=error,
                                                           absence=absence,
                                                           info=info):
            self.get_current_pt_of_current_img().set_point(pt_name=pt_name,
                                                           x=x,
                                                           y=y,
                                                           error=error,
                                                           absence=absence,
                                                           info=info)

            self.changed = True
            return True
        else:
            return False

    def check_new_name_in_current_point_dict(self, name):
        if name in list(self.get_current_image().points_dict.keys()):
            return False
        else:
            current_key = self.get_current_image().current_pt_key

            self.get_current_image().points_dict[
                name] = self.get_current_image().points_dict[current_key]
            # self.get_current_image().points_dict[current_key] = None
            self.get_current_image().points_dict.pop(current_key)

            self.get_current_image().set_current_pt_key(name)

            return True

    def set_current_pt_of_current_img_dict(self, pt_prop):

        self.set_current_pt_of_current_img(
            pt_name=pt_prop.get('pt_name', None),
            x=pt_prop.get('x', None),
            y=pt_prop.get('y', None),
            absence=pt_prop.get('absence', None),
            error=pt_prop.get('error', None))

    def add_pt_for_current_img(self, pt_name, x, y, scaled_coords=True):
        """
        Add point if the name if not duplicate
        :param pt_name: pt name
        :param x: x
        :param y: y
        :param scaled_coords: if it need to scale back to real coords
        :return: If it is possible to add point
        """

        cur_pt_names = list(self.get_current_image_points().keys())
        if pt_name not in cur_pt_names:
            # if the point name is not duplicate add
            if scaled_coords:
                y = int(y / self.scale)
                x = int(x / self.scale)

            temp = Point(pt_name, x, y, width=self.length, absence=False)
            self.get_current_image().points_dict[pt_name] = temp

            self.pt_names.add(pt_name)
            self.changed = True

            return True
        else:
            return False

    def add_seg_for_current_img(self, seg_name):
        """
        Add the segmentation name
        """

        cur_seg_names = list(self.get_current_image_segments_cv().keys())
        if seg_name not in cur_seg_names:
            self.get_current_image_segments_cv()[seg_name] = {"contours": None}
            self.seg_names.add(seg_name)

            return True
        else:
            return False

    # Deprecated
    def trans_current_segment_to_contour(self, segment, segment_name):
        #turn canvas into images
        image = segment.toImage()
        print(image.format())
        image = image.convertToFormat(QImage.Format_RGBA8888)
        print(image.format())
        s = image.bits().asstring(image.width() * image.height() * 4)
        arr = np.fromstring(s, dtype=np.uint8).reshape(
            (image.height(), image.width(), 4))

        # arr_255 = np.interp(arr,[np.min(arr),np.max(arr)],[0,255]).astype(np.uint8)

        mask = arr[:, :, 3]

        print(np.max(mask), np.min(mask))

        print(arr[arr[:, :, 0] != 0, :0])

        print(np.sum(arr[:, :, :3] == np.array([220, 20, 60])))
        _, thresh = cv2.threshold(mask, 2, 255, 0)

        _, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE,
                                                  cv2.CHAIN_APPROX_SIMPLE)
        # cv2.drawContours(arr, contours, -1, (0,255,0), 3)
        # cv2.imwrite(os.path.join("mat_test/contour" , "contour.jpg") , arr)

        segments = self.get_current_image_segments()
        # key_0 = list(segments.keys())[0]
        scale = self.origin_scale
        # example of setting 0 index outline
        segment = segments[segment_name]

        new_contours = {}
        levels = find_hierarchy_level(hierarchy[0])

        for idx, contour in enumerate(contours):
            # children = None
            # find_children(idx, hierarchy[0], children)

            children = find_all_children(idx, hierarchy[0])

            if children is not None:
                children = [int(child) for child in children]

            new_contours[str(idx)] = {
                "child":
                children,
                "level":
                levels[idx],
                "coords": [{
                    "x": round(pt[0][0] / scale),
                    "y": round(pt[0][1] / scale)
                } for pt in contour]
            }

        # Turn opencv contours into relabel contour format

        segments[segment_name].set_segment(segment.segment_name,
                                           new_contours,
                                           hierarchy=None,
                                           error=segment.error,
                                           info=segment.info,
                                           absence=segment.absence)

    def trans_current_segment_to_contour_cv(self, segment, segment_name,
                                            contour_colour):
        """
        Convert the segmentaion from images to
        :param canvas:
        :param contour_name:
        :return:
        """
        image = segment.toImage()

        image = image.convertToFormat(QImage.Format_RGBA8888)

        s = image.bits().asstring(image.width() * image.height() * 4)
        arr = np.fromstring(s, dtype=np.uint8).reshape(
            (image.height(), image.width(), 4))

        # arr_255 = np.interp(arr,[np.min(arr),np.max(arr)],[0,255]).astype(np.uint8)

        ## only the mask for the current category
        cv_colour = (contour_colour.red(), contour_colour.green(),
                     contour_colour.blue(), contour_colour.alpha())

        img_mask = arr[:, :, :3] != cv_colour[:3]
        mask_final = np.logical_and(img_mask[..., 0], img_mask[..., 1],
                                    img_mask[..., 2])
        arr[mask_final, 3] = 0

        mask = arr[:, :, 3]

        _, thresh = cv2.threshold(mask, 2, 255, 0)

        height = self.get_current_origin_pixmap().height()
        width = self.get_current_origin_pixmap().width()

        thresh = cv2.resize(thresh, (width, height))

        _, contours, hierarchy = cv2.findContours(thresh, cv2.RETR_TREE,
                                                  cv2.CHAIN_APPROX_SIMPLE)

        contours = [contour.tolist() for contour in contours]
        self.get_current_image_segments_cv(
        )[segment_name]['contours'] = contours

    def remove_pt_for_current_img(self, key=None):
        """
        Remove the current point or point with key given


        :param idx:
        :return:
        """
        if key is None:
            key = self.get_current_image().current_pt_key
        pt = self.get_current_image_points().pop(key)

        self.get_current_image().set_current_pt_key_to_start()

        return pt

    def remove_seg_for_current_img(self, key=None):
        """
        Remove the current segmentation or segmentation with key given


        :param idx:
        :return:
        """
        if key is None:
            key = self.get_current_image().current_pt_key

        seg = self.get_current_image_segments_cv().pop(key, None)

        return seg

    def get_current_pt_of_current_img(self):
        return self.images[self.current_image_id].get_current_pt()

    def get_current_image(self):
        if self.images:
            return self.images[self.current_image_id]
        else:
            return None

    def get_current_image_points(self):
        # if self.images:
        #     return self.images[self.current_image_id].points
        # else:
        #     return None

        if self.images:
            return self.images[self.current_image_id].points_dict
        else:
            return None

    def get_current_image_segments(self):

        if self.images:
            return self.images[self.current_image_id].segments
        else:
            return None

    def get_current_image_scaled_segments(self):
        outlines = self.get_current_image_segments()

        if outlines:
            return {
                key: outline * self.scale
                for key, outline in outlines.items()
            }
        else:
            return None

    def get_current_image_segments_cv(self):
        if self.images:
            return self.images[self.current_image_id].segments_cv
        else:
            return None

    def get_current_image_name(self):
        return self.images[self.current_image_id].img_name

    def get_current_image_abs_path(self):
        path = os.path.join(self.work_dir,
                            self.images[self.current_image_id].img_name)
        path = os.path.abspath(path)
        return path

    def get_current_scaled_pixmap(self):
        return self.current_pixmap.scaled(
            self.scale * self.current_pixmap.size(), Qt.KeepAspectRatio)

    def get_current_origin_pixmap(self):
        return self.current_pixmap

    def get_current_scaled_points(self):
        if self.images:
            return [
                pt * self.scale
                for key, pt in self.get_current_image_points().items()
            ]
        else:
            return None

    def has_images(self):
        if self.images:
            return True
        else:
            return False

    def has_points_current_image(self):
        if self.images and self.images[self.current_image_id].points_dict:
            return True
        else:
            return False

    def toggle_flag_img(self, state):
        """
        Set the data as flagged mode
        Intersect ( flag idx, self.filter_idx)

        Change the current image into first flagged image

        :param state: Flag mode is True or False
        :return: indices of flagged images
        """

        if state == True:
            self.flagged_img_idx = [
                idx for idx, img in enumerate(self.images)
                if img.attention_flag == True
            ]

            self.flagged_img_idx = list(
                set(self.filter_idx) & set(self.flagged_img_idx))

            if self.flagged_img_idx:
                self.current_image_id = self.flagged_img_idx[0]

        else:
            self.current_image_id = 0
            # self.images = self.images_backup
            # self.images_backup = None

        # if self.current_image_id >= len(self.images):
        #     self.current_image_id =len(self.images)-1
        return self.flagged_img_idx

    def filter_imgs_by_review_assist(self, filtered_dict):
        """
        Change the current image into first flagged image
        Intersect ( flag idx, self.filter_idx)

        :return: indices of ticked images.
        """
        all_idx = list(range(0, self.img_size))
        for prop_key, filtered_items in filtered_dict.items():
            filter_idx = list(
                np.where(
                    np.isin(self.img_props[prop_key], filtered_items) == True)
                [0])
            all_idx = list(set(all_idx) & set(filter_idx))
        print("all idx", all_idx)
        self.filter_idx = all_idx
        # self.filter_idx = list(set(self.filter_idx) & set(self.flagged_img_idx))

        if self.filter_idx:
            self.current_image_id = self.filter_idx[0]
        return self.filter_idx

    def write_json(self, save_name=None):
        # Create data form to save
        image_list = []
        for image in self.images:
            entry = {'file_name': image.img_name}
            # points list
            points = []
            for key, pt in image.points_dict.items():
                pt_data = {
                    "name": pt.pt_name,
                    "x": pt.x,
                    "y": pt.y,
                    "info": pt.info,
                    "error": pt.error,
                    "absence": pt.absence
                }
                points.append(pt_data)
            entry['points'] = points

            entry['outlines_cv'] = image.segments_cv

            # Use the segmentation cv instead

            # segments = []
            # for key, seg in image.segments.items():
            # #     contour_data =
            #     seg_data = {"name": seg.segment_name, "contours": seg.contours}
            #     segments.append(seg_data)
            # entry['outlines'] = segments

            image_list.append(entry)

        if save_name is None:
            save_name = self.file_name

        with open(save_name, 'w') as write:
            json.dump(image_list, write, default=convert)

        self.changed = False
Exemple #40
0
 def refreshData(self):
     file = self.getAbsFile()
     self._size = os.path.getsize(file)
     map = QPixmap(file)
     self._width = map.height()
     self._height = map.width()
Exemple #41
0
    def printViaQCursor(self):
        dialog = QPrintDialog(self.printer, self)
        if not dialog.exec_():
            return
        logo = QPixmap(":/logo.png")
        headFormat = QTextBlockFormat()
        headFormat.setAlignment(Qt.AlignLeft)
        headFormat.setTextIndent(self.printer.pageRect().width() -
                                 logo.width() - 216)
        bodyFormat = QTextBlockFormat()
        bodyFormat.setAlignment(Qt.AlignJustify)
        lastParaBodyFormat = QTextBlockFormat(bodyFormat)
        lastParaBodyFormat.setPageBreakPolicy(
            QTextFormat.PageBreak_AlwaysAfter)
        rightBodyFormat = QTextBlockFormat()
        rightBodyFormat.setAlignment(Qt.AlignRight)
        headCharFormat = QTextCharFormat()
        headCharFormat.setFont(QFont("Helvetica", 10))
        bodyCharFormat = QTextCharFormat()
        bodyCharFormat.setFont(QFont("Times", 11))
        redBodyCharFormat = QTextCharFormat(bodyCharFormat)
        redBodyCharFormat.setForeground(Qt.red)
        tableFormat = QTextTableFormat()
        tableFormat.setBorder(1)
        tableFormat.setCellPadding(2)

        document = QTextDocument()
        cursor = QTextCursor(document)
        mainFrame = cursor.currentFrame()
        page = 1
        for statement in self.statements:
            cursor.insertBlock(headFormat, headCharFormat)
            cursor.insertImage(":/logo.png")
            for text in ("Greasy Hands Ltd.",
                         "New Lombard Street", "London", "WC13 4PX",
                         QDate.currentDate().toString(DATE_FORMAT)):
                cursor.insertBlock(headFormat, headCharFormat)
                cursor.insertText(text)
            for line in statement.address.split(", "):
                cursor.insertBlock(bodyFormat, bodyCharFormat)
                cursor.insertText(line)
            cursor.insertBlock(bodyFormat)
            cursor.insertBlock(bodyFormat, bodyCharFormat)
            cursor.insertText("Dear {0},".format(statement.contact))
            cursor.insertBlock(bodyFormat)
            cursor.insertBlock(bodyFormat, bodyCharFormat)
            balance = statement.balance()
            cursor.insertText(
                "The balance of your account is $ {0:,.2f}.".format(
                    float(balance)))
            if balance < 0:
                cursor.insertBlock(bodyFormat, redBodyCharFormat)
                cursor.insertText("Please remit the amount owing "
                                  "immediately.")
            else:
                cursor.insertBlock(bodyFormat, bodyCharFormat)
                cursor.insertText("We are delighted to have done "
                                  "business with you.")
            cursor.insertBlock(bodyFormat, bodyCharFormat)
            cursor.insertText("Transactions:")
            table = cursor.insertTable(len(statement.transactions), 3,
                                       tableFormat)
            row = 0
            for date, amount in statement.transactions:
                cellCursor = table.cellAt(row, 0).firstCursorPosition()
                cellCursor.setBlockFormat(rightBodyFormat)
                cellCursor.insertText(date.toString(DATE_FORMAT),
                                      bodyCharFormat)
                cellCursor = table.cellAt(row, 1).firstCursorPosition()
                if amount > 0:
                    cellCursor.insertText("Credit", bodyCharFormat)
                else:
                    cellCursor.insertText("Debit", bodyCharFormat)
                cellCursor = table.cellAt(row, 2).firstCursorPosition()
                cellCursor.setBlockFormat(rightBodyFormat)
                format = bodyCharFormat
                if amount < 0:
                    format = redBodyCharFormat
                cellCursor.insertText("$ {0:,.2f}".format(float(amount)),
                                      format)
                row += 1
            cursor.setPosition(mainFrame.lastPosition())
            cursor.insertBlock(bodyFormat, bodyCharFormat)
            cursor.insertText("We hope to continue doing business "
                              "with you,")
            cursor.insertBlock(bodyFormat, bodyCharFormat)
            cursor.insertText("Yours sincerely")
            cursor.insertBlock(bodyFormat)
            if page == len(self.statements):
                cursor.insertBlock(bodyFormat, bodyCharFormat)
            else:
                cursor.insertBlock(lastParaBodyFormat, bodyCharFormat)
            cursor.insertText("K. Longrey, Manager")
            page += 1
        document.print_(self.printer)
Exemple #42
0
def scaledPixmap(path: str, scale: float) -> QPixmap:
    pixmap = QPixmap(path)
    if scale > 1.0:
        pixmap = pixmap.scaledToWidth(pixmap.width() * scale, Qt.SmoothTransformation)
        pixmap.setDevicePixelRatio(scale)
    return pixmap
Exemple #43
0
    def initUI(self):
        self.setGeometry(800 - WIDTH // 2, 450 - HEIGHT // 2, WIDTH, HEIGHT)
        p = self.palette()
        p.setColor(self.backgroundRole(), QColor(40, 40, 40))
        self.setPalette(p)
        validator = QDoubleValidator()
        validator.setLocale(QLocale("Russia"))
        self.parameters = [QLineEdit(self) for _ in range(3)]
        offset = 120
        for i in range(len(self.parameters)):
            self.parameters[i].setGeometry(80, offset + 40 * i, 100, 30)
            self.parameters[i].setValidator(validator)
            self.parameters[i].setText("1")
            label = QLabel(self)
            label.setText("{} = ".format(chr(i + ord('a'))))
            label.setGeometry(50, offset + 40 * i, 70, 30)
            label.setStyleSheet("color: white")
        self.parameters[0].textChanged.connect(self.update_a_field)
        self.parameters[1].textChanged.connect(self.update_b_field)
        self.parameters[2].textChanged.connect(self.update_c_field)

        label = QLabel(self)
        label.setGeometry(65, 450, 60, 30)
        label.setText("alpha = ")
        label.setStyleSheet('color: white')
        self.alpha_field = QLineEdit(self)
        self.alpha_field.setGeometry(120, 450, 60, 30)
        self.alpha_field.setValidator(validator)
        self.alpha_field.setText(str(self.alpha))
        self.alpha_field.textChanged.connect(self.update_alpha_field)

        label = QLabel(self)
        label.setGeometry(65, 500, 60, 30)
        label.setText("beta = ")
        label.setStyleSheet('color: white')
        self.beta_field = QLineEdit(self)
        self.beta_field.setGeometry(120, 500, 60, 30)
        self.beta_field.setValidator(validator)
        self.beta_field.setText(str(self.beta))
        self.beta_field.textChanged.connect(self.update_beta_field)
        combo = QComboBox(self)
        combo.addItems(["Task {}".format(i) for i in range(1, 4)])
        combo.move(60, 15)
        combo.activated[str].connect(self.onSelect)

        self.label = QLabel(self)
        pixmap = QPixmap('formula{}.png'.format(self.task_number))
        self.label.setPixmap(pixmap)
        self.label.move((self.panelWidth - pixmap.width()) / 2, 50)
        # self.label.move(0, 100)
        self.label.setGeometry((self.panelWidth - pixmap.width()) / 2, 50,
                               pixmap.width() + 100, pixmap.height())

        label = QLabel(self)
        label.setGeometry(40, 275, 60, 30)
        label.setText("left")
        label.setStyleSheet('color: white')
        self.left_x_text_field = QLineEdit(self)
        self.left_x_text_field.setGeometry(40, 300, 60, 30)
        self.left_x_text_field.setText(str(self.t_left_top.x()))
        self.left_x_text_field.setValidator(validator)
        self.left_x_text_field.textChanged.connect(self.update_left_x_field)

        label = QLabel(self)
        label.setGeometry(120, 275, 60, 30)
        label.setText("top")
        label.setStyleSheet('color: white')
        self.left_y_text_field = QLineEdit(self)
        self.left_y_text_field.setGeometry(120, 380, 60, 30)
        self.left_y_text_field.setText(str(self.t_left_top.y()))
        self.left_y_text_field.setValidator(validator)
        self.left_y_text_field.textChanged.connect(self.update_left_y_field)

        label = QLabel(self)
        label.setGeometry(40, 355, 60, 30)
        label.setText("right")
        label.setStyleSheet('color: white')
        self.right_x_text_field = QLineEdit(self)
        self.right_x_text_field.setGeometry(40, 380, 60, 30)
        self.right_x_text_field.setText(str(self.t_right_bottom.x()))
        self.right_x_text_field.setValidator(validator)
        self.right_x_text_field.textChanged.connect(self.update_right_x_field)

        label = QLabel(self)
        label.setGeometry(120, 355, 60, 30)
        label.setText("bottom")
        label.setStyleSheet('color: white')
        self.right_y_text_field = QLineEdit(self)
        self.right_y_text_field.setGeometry(120, 300, 60, 30)
        self.right_y_text_field.setText(str(self.t_right_bottom.y()))
        self.right_y_text_field.setValidator(validator)
        self.right_y_text_field.textChanged.connect(self.update_right_y_field)

        self.setWindowTitle('Points')
        self.show()
Exemple #44
0
    def __init__(self):
        load_model()
        voice_set()
        setWalkingPathLoaction()
        super(MainWindow, self).__init__()
        self.resize(640, 1000)  # smart phone size 960
        '''palette = QPalette()
        palette.setBrush(QPalette.Background,QBrush(QPixmap("D:\\Project\\ui\\background.jpg")))        
        self.setPalette(palette)'''
        self.setStyleSheet("background-color:#2D4080;")
        self.title = "Indoor Navigation"
        self.setWindowTitle(self.title)

        #title label
        self.label1 = QLabel(self)
        pixmap = QPixmap(filename + 'cover\\title.png')
        self.label1.setPixmap(pixmap)
        self.label1.resize(pixmap.width(), pixmap.height())
        self.label1.move(195, 130)
        self.label1.setAlignment(QtCore.Qt.AlignCenter)
        self.label1.setStyleSheet("border:none; background:transparent")

        #map
        self.label2 = QLabel(self)
        pixmap = QPixmap(filename + 'building_map.jpg')
        self.label2.setPixmap(pixmap)
        self.label2.resize(pixmap.width(), pixmap.height())
        self.label2.move(15, 110)
        self.label2.setAlignment(QtCore.Qt.AlignCenter)
        self.label2.setStyleSheet("border:none; background:transparent")
        self.label2.setVisible(False)

        #destination
        self.label3 = QLabel(self)
        pixmap = QPixmap(filename + 'des.png')
        self.label3.setPixmap(pixmap)
        self.label3.resize(316, 58)
        self.label3.move(162, 550)
        self.label3.setStyleSheet("border:none; background:transparent")
        self.label3.setVisible(False)
        #departure
        self.label4 = QLabel(self)
        pixmap = QPixmap(filename + 'depa.png')
        self.label4.setPixmap(pixmap)
        self.label4.resize(316, 58)
        self.label4.move(162, 640)
        self.label4.setStyleSheet("border:none; background:transparent")
        self.label4.setVisible(False)

        #video
        self.label6 = QLabel(self)
        t = QTransform()
        t.rotate(90)
        pixmap1 = QPixmap(filename + 'building_map_4.jpg')
        pixmap1 = pixmap1.transformed(t)
        self.label6.resize(pixmap1.width(), pixmap1.height())
        self.label6.setScaledContents(True)
        self.label6.move(30, 100)
        self.label6.setAlignment(QtCore.Qt.AlignCenter)
        self.label6.setPixmap(pixmap1)
        self.label6.setStyleSheet("border:none; background:transparent")
        self.label6.setVisible(False)

        # destination text
        self.label7 = QLabel(self)
        self.label7.setStyleSheet("border:none; background:transparent")
        self.label7.resize(100, 24)
        self.label7.move(300, 567)
        self.label7.setVisible(False)

        # departure text
        self.label8 = QLabel(self)
        self.label8.setStyleSheet("border:none; background:transparent")
        self.label8.resize(100, 24)
        self.label8.move(300, 657)
        self.label8.setVisible(False)

        # cover picture
        self.label9 = QLabel(self)
        pixmap = QPixmap(filename + 'cover\\pic.png')
        self.label9.setPixmap(pixmap)
        self.label9.resize(pixmap.width(), pixmap.height())
        self.label9.move(195, 290)
        self.label9.setAlignment(QtCore.Qt.AlignCenter)
        self.label9.setStyleSheet("border:none; background:transparent")

        # cover slogan
        self.label10 = QLabel(self)
        pixmap = QPixmap(filename + 'cover\\Start Your Indoor Discovery.png')
        self.label10.setPixmap(pixmap)
        self.label10.resize(pixmap.width(), pixmap.height())
        self.label10.move(185, 570)
        self.label10.setStyleSheet("border:none; background:transparent")

        # walk
        self.label12 = QLabel(self)
        pixmap = QPixmap(filename + 'walk1.png')
        self.label12.setPixmap(pixmap)
        self.label12.resize(pixmap.width(), pixmap.height())
        self.label12.setStyleSheet("border:none; background:transparent")
        self.label12.setVisible(False)

        # introduction
        self.label13 = QLabel(self)
        pixmap = QPixmap(filename + 'dest_icon.png')
        self.label13.setPixmap(pixmap)
        self.label13.resize(pixmap.width(), pixmap.height())
        self.label13.setStyleSheet("border:none; background:transparent")
        self.label13.setVisible(False)

        #error message
        self.label5 = QLabel(self)
        self.label5.setAlignment(QtCore.Qt.AlignCenter)
        self.label5.resize(298, 37)
        self.label5.move(171, 480)
        self.label5.setStyleSheet("border:none; background:transparent")
        self.label5.setVisible(False)

        self.button1 = QPushButton(self)  #RESET
        self.button1.setIcon(QIcon(filename + 'reset.png'))
        self.button1.setIconSize(QtCore.QSize(40, 40))  # 建立名字
        self.button1.setStyleSheet("border:none")
        self.button1.resize(40, 40)
        self.button1.move(10, 15)  # 移動位置
        self.button1.clicked.connect(self.button1Clicked)
        self.button1.setVisible(False)

        self.button2 = QPushButton(self)  #語音
        self.button2.setIcon(QIcon(filename + 'record.png'))
        self.button2.setIconSize(QtCore.QSize(85, 85))
        self.button2.resize(85, 85)
        self.button2.setStyleSheet("border:none")
        self.button2.move(460, 805)  # 移動位置
        self.button2.clicked.connect(self.button2Clicked)
        self.button2.setVisible(False)

        self.button3 = QPushButton(self)  #camera
        self.button3.setIcon(QIcon(filename + 'camera.png'))
        self.button3.setIconSize(QtCore.QSize(70, 70))
        self.button3.resize(70, 70)
        self.button3.setStyleSheet("border:none")
        self.button3.move(110, 820)  # 移動位置
        self.button3.clicked.connect(self.button3Clicked)
        self.button3.setVisible(False)

        self.button4 = QPushButton(self)  # START
        self.button4.setIcon(QIcon(filename + 'group_start.png'))
        self.button4.setIconSize(QtCore.QSize(100, 100))
        self.button4.resize(100, 100)
        self.button4.setStyleSheet("border:none")
        self.button4.move(270, 800)  # 移動位置
        self.button4.clicked.connect(self.button4Clicked)
        self.button4.setVisible(False)

        self.button5 = QPushButton(self)  # home
        self.button5.setIcon(QIcon(filename + 'home.png'))
        self.button5.setIconSize(QtCore.QSize(40, 40))  # 建立名字
        self.button5.setStyleSheet("border:none")
        self.button5.resize(40, 40)
        self.button5.move(590, 15)  # 移動位置
        self.button5.clicked.connect(self.button5Clicked)
        self.button5.setVisible(False)

        self.button6 = QPushButton(self)  # get start
        self.button6.setIcon(QIcon(filename + 'cover\\start button.png'))
        self.button6.setIconSize(QtCore.QSize(200, 76))  # 建立名字
        self.button6.setStyleSheet("border:none; background:transparent")
        self.button6.resize(200, 76)
        self.button6.move(220, 670)  # 移動位置
        self.button6.clicked.connect(self.button6Clicked)

        self.button7 = QPushButton(self)  # question
        self.button7.setIcon(QIcon(filename + 'cover\\question.png'))
        self.button7.setIconSize(QtCore.QSize(60, 60))  # 建立名字
        self.button7.setStyleSheet("border:none; background:transparent")
        self.button7.resize(60, 60)
        self.button7.move(80, 850)  # 移動位置
        self.button7.clicked.connect(self.button7Clicked)

        self.button8 = QPushButton(self)  # find
        self.button8.setIcon(QIcon(filename + 'cover\\find.png'))
        self.button8.setIconSize(QtCore.QSize(60, 60))  # 建立名字
        self.button8.setStyleSheet("border:none; background:transparent")
        self.button8.resize(60, 60)
        self.button8.move(500, 850)  # 移動位置
        self.button8.clicked.connect(self.button8Clicked)

        # introduction
        self.label11 = QLabel(self)
        self.label11.resize(394, 539)
        self.label11.setStyleSheet("border:none; background:transparent")
        self.label11.setVisible(False)

        self.button9 = QPushButton(self)  # close introduction
        self.button9.setIcon(QIcon(filename + 'cover\\x.png'))
        self.button9.setIconSize(QtCore.QSize(22, 23))  # 建立名字
        self.button9.setStyleSheet("border:none; background:transparent")
        self.button9.resize(22, 23)
        self.button9.move(475, 120)  # 移動位置
        self.button9.clicked.connect(self.button9Clicked)
        self.button9.setVisible(False)
Exemple #45
0
 def onSelect(self, text):
     self.task_number = int(text[-1])
     pixmap = QPixmap('formula{}.png'.format(self.task_number))
     self.label.setPixmap(pixmap)
     self.label.move((self.panelWidth - pixmap.width()) / 2, 50)
     self.update()
Exemple #46
0
    def initDevice(self, flag, num):
        metric_width = GetSystemMetrics(0)
        metric_height = GetSystemMetrics(1)  # 获取电脑分辨率
        self.width = metric_width  # 图片宽度
        self.height = metric_height  # 图片高度

        self.pic_x = 40
        self.pic_y = 200  # 图片起始点
        # 设置信息显示区域
        self.setWindowTitle("Cement Kiln")
        self.widget = QWidget()
        self.table = QTableWidget(0, 2)  # 以表格形式显示数据
        self.table.setMinimumHeight(100)
        self.messageView = QTabWidget()
        self.messageView.setMinimumHeight(100)

        # self.resize(self.width,self.height)

        self.table.horizontalHeader().setDefaultSectionSize(150)
        self.messageSplitter = QSplitter(Qt.Vertical)
        self.messageSplitter.addWidget(self.table)
        self.messageSplitter.addWidget(self.messageView)
        # self.messageSplitter.addWidget(self.functionList)
        self.mainSplitter = QSplitter(Qt.Horizontal)
        self.mainSplitter.addWidget(self.widget)
        self.mainSplitter.addWidget(self.messageSplitter)
        self.setCentralWidget(self.mainSplitter)

        self.table.setMaximumHeight(300)

        self.tab1 = QLabel()
        self.tab2 = QLabel()
        self.messageView.addTab(self.tab1, '温度')
        self.messageView.addTab(self.tab2, '压强')
        self.pic1 = QVBoxLayout(self.tab1)
        self.pic2 = QVBoxLayout(self.tab2)

        self.click_flag = 0  # 切换图片标志

        xft_dl = QPixmap('picture\\xft_dl.png')  # 旋风筒
        xft_zuo = QPixmap('picture\\xft_zuo.png')  # 旋风筒左管
        xft_you = QPixmap('picture\\xft_you.png')  # 旋风筒右管
        fjl = QPixmap('picture\\fjl.png')  # 分解炉
        blj = QPixmap('picture\\blj.png')  # 篦冷机
        fjl_yao = QPixmap('picture\\fjl_yao')  # 分解炉与窑之间的连接部件
        mfc = QPixmap('picture\\mfc.png')  # 煤粉仓
        gwfj = QPixmap('picture\\gwfj.png')  # 高温风机
        yao = QPixmap('picture\\yao.png')

        ratio = 0.3  # 图片放大倍数

        self.widget.autoFillBackground()

        number = int(num)

        self.xft = {}

        self.xft[0] = MyLabel()
        self.xft[0].setPixmap(
            xft_dl.scaled(xft_dl.width() * ratio,
                          xft_dl.height() * ratio))
        self.xft[0].setObjectName('%d级筒A' % 1)
        self.xft[0].changeindex.connect(self.change_pic)
        # print(self.xft[0].objectName())
        self.xft[number] = MyLabel()
        self.xft[number].setPixmap(
            xft_dl.scaled(xft_dl.width() * ratio,
                          xft_dl.height() * ratio))
        self.xft[number].setObjectName('%d级筒A' % number)
        self.xft[number].changeindex.connect(self.change_pic)

        for i in arange(1, number, 2):  # 不会取到number,奇数旋风筒为右管
            self.xft[i] = MyLabel()
            self.xft[i].setPixmap(
                xft_you.scaled(xft_you.width() * ratio,
                               xft_you.height() * ratio))
            self.xft[i].setObjectName('%d级筒A' % i)
            self.xft[i].changeindex.connect(self.change_pic)
        for i in arange(2, number, 2):  # 偶数旋风筒为左管
            self.xft[i] = MyLabel()
            self.xft[i].setPixmap(
                xft_zuo.scaled(xft_zuo.width() * ratio,
                               xft_zuo.height() * ratio))
            self.xft[i].setObjectName('%d级筒A' % i)
            self.xft[i].changeindex.connect(self.change_pic)

        if flag == 2:  # 双系列
            self.xft[number + 1] = MyLabel()
            self.xft[number + 1].setPixmap(
                xft_dl.scaled(xft_dl.width() * ratio,
                              xft_dl.height() * ratio))
            self.xft[number + 1].setObjectName('%d级筒B' % 1)
            self.xft[number + 1].changeindex.connect(self.change_pic)
            # print(self.xft[0].objectName())
            self.xft[2 * number + 1] = MyLabel()
            self.xft[2 * number + 1].setPixmap(
                xft_dl.scaled(xft_dl.width() * ratio,
                              xft_dl.height() * ratio))
            self.xft[2 * number + 1].setObjectName('%d级筒B' % number)
            self.xft[2 * number + 1].changeindex.connect(self.change_pic)

            for i in arange(number + 2, 2 * number + 1,
                            2):  # 不会取到2*number,奇数旋风筒为左管
                print(i)
                self.xft[i] = MyLabel()
                self.xft[i].setPixmap(
                    xft_zuo.scaled(xft_zuo.width() * ratio,
                                   xft_zuo.height() * ratio))
                self.xft[i].setObjectName('%d级筒B' % (i % (number + 1)))
                self.xft[i].changeindex.connect(self.change_pic)

            for i in arange(number + 3, 2 * number + 1, 2):  # 偶数旋风筒为右管
                print(i)
                self.xft[i] = MyLabel()
                self.xft[i].setPixmap(
                    xft_you.scaled(xft_you.width() * ratio,
                                   xft_you.height() * ratio))
                self.xft[i].setObjectName('%d级筒B' % (i % (number + 1)))
                self.xft[i].changeindex.connect(self.change_pic)

        self.lab_fjl = MyLabel()
        if number % 2 == 0:
            self.lab_fjl.setPixmap(
                fjl.scaled(xft_dl.width() * 5 * ratio,
                           xft_dl.height() * 3 * ratio))
        else:
            self.lab_fjl.setPixmap(
                fjl.scaled(xft_dl.width() * 7 * ratio,
                           xft_dl.height() * 3 * ratio))
        self.lab_fjl.setObjectName('分解炉')
        self.lab_fjl.changeindex.connect(self.change_pic)

        self.lab_yao = MyLabel()
        self.lab_yao.setPixmap(
            yao.scaled(xft_dl.width() * 9 * ratio,
                       yao.height() * ratio))
        self.lab_yao.setObjectName('窑')
        self.lab_yao.changeindex.connect(self.change_pic)

        self.lab_blj = MyLabel()
        self.lab_blj.setPixmap(
            blj.scaled(blj.width() * ratio,
                       blj.height() * ratio))
        self.lab_blj.setObjectName('篦冷机')
        self.lab_blj.changeindex.connect(self.change_pic)

        self.fjl_yao = MyLabel()
        self.fjl_yao.setPixmap(
            fjl_yao.scaled(xft_dl.width() * ratio,
                           fjl_yao.height() * ratio))
        self.fjl_yao.setObjectName('分解炉--窑')

        lay = QGridLayout()
        xft_row = 1  # 旋风筒所占行数
        xft_col = 2  # 旋风筒所占列数
        fjl_row = 3  # 分解炉所占行数
        fjl_col = 5  # 分解炉所占列数

        lay.addWidget(self.xft[0], 0, 0)
        for i in arange(1, number):
            lay.addWidget(self.xft[i], i - 1, 1, xft_row, xft_col)
        if number % 2 == 0:
            lay.addWidget(self.lab_fjl, number - 2, 2, fjl_row, fjl_col)  # 分解炉
            lay.addWidget(self.xft[number], number - 1, 2)
            lay.addWidget(self.fjl_yao, number - 2 + fjl_row,
                          (fjl_col - 1) / 2 + 2)  # 连接件
            lay.addWidget(self.lab_yao, number - 2 + fjl_row,
                          (fjl_col - 1) / 2 + 3, 2, 9)  # 窑
            lay.addWidget(self.lab_blj, number - 2 + fjl_row, 16, 2, 3)  # 篦冷机
        else:
            lay.addWidget(self.lab_fjl, number - 2, 1, fjl_row,
                          fjl_col + 2)  # 分解炉
            lay.addWidget(self.xft[number], number - 1, 1)
            lay.addWidget(self.fjl_yao, number - 2 + fjl_row,
                          (fjl_col - 1) / 2 + 2)  # 连接件
            lay.addWidget(self.lab_yao, number - 2 + fjl_row,
                          (fjl_col - 1) / 2 + 3, 2, 9)  # 窑
            lay.addWidget(self.lab_blj, number - 2 + fjl_row, 16, 2, 3)  # 篦冷机
        if flag == 2:
            lay.addWidget(self.xft[number + 1], 0, 10 - flag)
            for i in arange(number + 2, 2 * number + 1):
                # print(i)
                lay.addWidget(self.xft[i], (i - 2) % number, 8 - flag, xft_row,
                              xft_col)
            if number % 2 == 0:
                lay.addWidget(self.xft[number * 2 + 1], number - 1, 8 - flag)
            else:
                lay.addWidget(self.xft[number * 2 + 1], number - 1, 9 - flag)
        lay.setSpacing(0)
        lay.setAlignment(Qt.AlignLeft | Qt.AlignCenter)

        self.widget.setLayout(lay)

        self.initBtn()  # 初始化时间选择控件
Exemple #47
0
class RemMainWindow(QWidget):
    def __init__(self):
        super().__init__()
        rem_bk_pic_path = './source/pic/rem_bk.png'
        rem_ico_path = './source/pic/rem.png'
        self.pix = QPixmap(rem_bk_pic_path)
        self.resize(self.pix.width(), self.pix.height())
        self.pix = self.pix.scaled(int(self.pix.width()),
                                   int(self.pix.height()))
        self.setMask(self.pix.mask())
        screen = QDesktopWidget().screenGeometry()
        self.move(screen.width() - self.pix.width() * 2,
                  screen.height() - self.pix.height() * 2)
        self.setWindowFlags(Qt.FramelessWindowHint | Qt.WindowStaysOnTopHint)
        self.setAttribute(Qt.WA_TranslucentBackground)
        self.rem_icon = QIcon(QPixmap(rem_ico_path))
        self.setWindowIcon(self.rem_icon)
        self.m_DragPosition = None
        self.tool = ToolWindow(self.x() + self.width(), self.y())
        self.tool_enable = False
        self.monitor = Monitor()

    def paintEvent(self, event):
        paint = QPainter(self)
        paint.drawPixmap(0, 0, self.pix.width(), self.pix.height(), self.pix)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.m_drag = True
            self.m_DragPosition = event.globalPos() - self.pos()
            event.accept()
            self.setCursor(QCursor(Qt.OpenHandCursor))
            if self.tool_enable:
                self.tool.raise_()
        if event.button() == Qt.RightButton:
            if self.tool_enable == True:
                self.tool.close()
                self.tool_enable = False
            self.trayEvent()

    def mouseMoveEvent(self, event):
        if Qt.LeftButton and self.m_drag:
            self.move(event.globalPos() - self.m_DragPosition)
            self.tool.move(self.x() + self.width(), self.y())
            event.accept()

    def mouseReleaseEvent(self, event):
        self.m_drag = False
        self.setCursor(QCursor(Qt.ArrowCursor))

    def mouseDoubleClickEvent(self, event):
        if self.tool_enable == False:
            self.tool.show()
            self.tool_enable = True
        else:
            self.tool.close()
            self.tool_enable = False

    def closeEvent(self, event):
        if self.tool_enable == True:
            self.tool.close()

    def trayEvent(self):
        self.hide()
        self.mSysTrayIcon = QSystemTrayIcon(self)
        self.mSysTrayIcon.setIcon(self.rem_icon)
        self.mSysTrayIcon.setToolTip("追番小工具")
        self.mSysTrayIcon.activated.connect(self.onActivated)
        self.tray_menu = QMenu(QApplication.desktop())
        self.quitAction = QAction(u'退出', self, triggered=qApp.quit)
        self.tray_menu.addAction(self.quitAction)
        self.mSysTrayIcon.setContextMenu(self.tray_menu)
        self.mSysTrayIcon.show()

    def onActivated(self, reason):
        if reason == self.mSysTrayIcon.Trigger:
            self.show()
            self.mSysTrayIcon.hide()
Exemple #48
0
class PixmapKeyboard(QWidget):
    # signals
    noteOn = pyqtSignal(int)
    noteOff = pyqtSignal(int)
    notesOn = pyqtSignal()
    notesOff = pyqtSignal()

    def __init__(self, parent):
        QWidget.__init__(self, parent)

        self.fEnabledKeys = []
        self.fLastMouseNote = -1
        self.fStartOctave = 0
        self.fPcKeybOffset = 2
        self.fInitalizing = True

        self.fFont = self.font()
        self.fFont.setFamily("Monospace")
        self.fFont.setPixelSize(12)
        self.fFont.setBold(True)

        self.fPixmapNormal = QPixmap(":/bitmaps/kbd_normal.png")
        self.fPixmapDown = QPixmap(":/bitmaps/kbd_down-blue.png")
        self.fHighlightColor = kValidColors[0]

        self.fkPcKeyLayout = "qwerty"
        self.fkPcKeys = kPcKeysLayouts["qwerty"]
        self.fKey2RectMap = kMidiKey2RectMapHorizontal

        self.fWidth = self.fPixmapNormal.width()
        self.fHeight = self.fPixmapNormal.height()

        self.setCursor(Qt.PointingHandCursor)
        self.setStartOctave(0)
        self.setOctaves(6)

        self.loadSettings()

        self.fInitalizing = False

    def saveSettings(self):
        if self.fInitalizing:
            return

        settings = QSafeSettings("falkTX", "CarlaKeyboard")
        settings.setValue("PcKeyboardLayout", self.fkPcKeyLayout)
        settings.setValue("PcKeyboardOffset", self.fPcKeybOffset)
        settings.setValue("HighlightColor", self.fHighlightColor)
        del settings

    def loadSettings(self):
        settings = QSafeSettings("falkTX", "CarlaKeyboard")
        self.setPcKeyboardLayout(
            settings.value("PcKeyboardLayout", self.fkPcKeyLayout, str))
        self.setPcKeyboardOffset(
            settings.value("PcKeyboardOffset", self.fPcKeybOffset, int))
        self.setColor(
            settings.value("HighlightColor", self.fHighlightColor, str))
        del settings

    def allNotesOff(self, sendSignal=True):
        self.fEnabledKeys = []

        if sendSignal:
            self.notesOff.emit()

        self.update()

    def sendNoteOn(self, note, sendSignal=True):
        if 0 <= note <= 127 and note not in self.fEnabledKeys:
            self.fEnabledKeys.append(note)

            if sendSignal:
                self.noteOn.emit(note)

            self.update()

        if len(self.fEnabledKeys) == 1:
            self.notesOn.emit()

    def sendNoteOff(self, note, sendSignal=True):
        if 0 <= note <= 127 and note in self.fEnabledKeys:
            self.fEnabledKeys.remove(note)

            if sendSignal:
                self.noteOff.emit(note)

            self.update()

        if len(self.fEnabledKeys) == 0:
            self.notesOff.emit()

    def setColor(self, color):
        if color not in kValidColors:
            return

        if self.fHighlightColor == color:
            return

        self.fHighlightColor = color
        self.fPixmapDown.load(":/bitmaps/kbd_down-{}.png".format(
            color.lower()))
        self.saveSettings()

    def setPcKeyboardLayout(self, layout):
        if layout not in kPcKeysLayouts.keys():
            return

        if self.fkPcKeyLayout == layout:
            return

        self.fkPcKeyLayout = layout
        self.fkPcKeys = kPcKeysLayouts[layout]
        self.saveSettings()

    def setPcKeyboardOffset(self, offset):
        if offset < 0:
            offset = 0
        elif offset > 9:
            offset = 9

        if self.fPcKeybOffset == offset:
            return

        self.fPcKeybOffset = offset
        self.saveSettings()

    def setOctaves(self, octaves):
        if octaves < 1:
            octaves = 1
        elif octaves > 10:
            octaves = 10

        self.fOctaves = octaves

        self.setMinimumSize(self.fWidth * self.fOctaves, self.fHeight)
        self.setMaximumSize(self.fWidth * self.fOctaves, self.fHeight)

    def setStartOctave(self, octave):
        if octave < 0:
            octave = 0
        elif octave > 9:
            octave = 9

        if self.fStartOctave == octave:
            return

        self.fStartOctave = octave
        self.update()

    def handleMousePos(self, pos):
        if pos.x() < 0 or pos.x() > self.fOctaves * self.fWidth:
            return
        octave = int(pos.x() / self.fWidth)
        keyPos = QPointF(pos.x() % self.fWidth, pos.y())

        if self.fKey2RectMap[1].contains(keyPos):  # C#
            note = 1
        elif self.fKey2RectMap[3].contains(keyPos):  # D#
            note = 3
        elif self.fKey2RectMap[6].contains(keyPos):  # F#
            note = 6
        elif self.fKey2RectMap[8].contains(keyPos):  # G#
            note = 8
        elif self.fKey2RectMap[10].contains(keyPos):  # A#
            note = 10
        elif self.fKey2RectMap[0].contains(keyPos):  # C
            note = 0
        elif self.fKey2RectMap[2].contains(keyPos):  # D
            note = 2
        elif self.fKey2RectMap[4].contains(keyPos):  # E
            note = 4
        elif self.fKey2RectMap[5].contains(keyPos):  # F
            note = 5
        elif self.fKey2RectMap[7].contains(keyPos):  # G
            note = 7
        elif self.fKey2RectMap[9].contains(keyPos):  # A
            note = 9
        elif self.fKey2RectMap[11].contains(keyPos):  # B
            note = 11
        else:
            note = -1

        if note != -1:
            note += (self.fStartOctave + octave) * 12

            if self.fLastMouseNote != note:
                self.sendNoteOff(self.fLastMouseNote)
                self.sendNoteOn(note)

        elif self.fLastMouseNote != -1:
            self.sendNoteOff(self.fLastMouseNote)

        self.fLastMouseNote = note

    def showOptions(self, event):
        event.accept()
        menu = QMenu()

        menu.addAction("Note: restart carla to apply globally").setEnabled(
            False)
        menu.addSeparator()

        menuColor = QMenu("Highlight color", menu)
        menuLayout = QMenu("PC Keyboard layout", menu)
        actColors = []
        actLayouts = []

        for color in kValidColors:
            act = menuColor.addAction(color)
            act.setCheckable(True)
            if self.fHighlightColor == color:
                act.setChecked(True)
            actColors.append(act)

        for pcKeyLayout in kPcKeysLayouts.keys():
            act = menuLayout.addAction(pcKeyLayout)
            act.setCheckable(True)
            if self.fkPcKeyLayout == pcKeyLayout:
                act.setChecked(True)
            actLayouts.append(act)

        menu.addMenu(menuColor)
        menu.addMenu(menuLayout)
        menu.addSeparator()

        actOctaveUp = menu.addAction("PC Keyboard octave up")
        actOctaveDown = menu.addAction("PC Keyboard octave down")

        if self.fPcKeybOffset == 0:
            actOctaveDown.setEnabled(False)

        actSelected = menu.exec_(event.screenPos().toPoint())

        if not actSelected:
            return

        if actSelected in actColors:
            return self.setColor(actSelected.text())

        if actSelected in actLayouts:
            return self.setPcKeyboardLayout(actSelected.text())

        if actSelected == actOctaveUp:
            return self.setPcKeyboardOffset(self.fPcKeybOffset + 1)

        if actSelected == actOctaveDown:
            return self.setPcKeyboardOffset(self.fPcKeybOffset - 1)

    def minimumSizeHint(self):
        return QSize(self.fWidth, self.fHeight)

    def sizeHint(self):
        return QSize(self.fWidth * self.fOctaves, self.fHeight)

    def keyPressEvent(self, event):
        if not event.isAutoRepeat():
            try:
                qKey = str(event.key())
                index = self.fkPcKeys.index(qKey)
            except:
                pass
            else:
                self.sendNoteOn(index + (self.fPcKeybOffset * 12))

        QWidget.keyPressEvent(self, event)

    def keyReleaseEvent(self, event):
        if not event.isAutoRepeat():
            try:
                qKey = str(event.key())
                index = self.fkPcKeys.index(qKey)
            except:
                pass
            else:
                self.sendNoteOff(index + (self.fPcKeybOffset * 12))

        QWidget.keyReleaseEvent(self, event)

    def mousePressEvent(self, event):
        if event.button() == Qt.RightButton:
            self.showOptions(event)
        else:
            self.fLastMouseNote = -1
            self.handleMousePos(event.pos())
            self.setFocus()
        QWidget.mousePressEvent(self, event)

    def mouseMoveEvent(self, event):
        if event.button() != Qt.RightButton:
            self.handleMousePos(event.pos())
        QWidget.mouseMoveEvent(self, event)

    def mouseReleaseEvent(self, event):
        if self.fLastMouseNote != -1:
            self.sendNoteOff(self.fLastMouseNote)
            self.fLastMouseNote = -1
        QWidget.mouseReleaseEvent(self, event)

    def paintEvent(self, event):
        painter = QPainter(self)
        event.accept()

        # -------------------------------------------------------------
        # Paint clean keys (as background)

        for octave in range(self.fOctaves):
            target = QRectF(self.fWidth * octave, 0, self.fWidth, self.fHeight)
            source = QRectF(0, 0, self.fWidth, self.fHeight)
            painter.drawPixmap(target, self.fPixmapNormal, source)

        if not self.isEnabled():
            painter.setBrush(QColor(0, 0, 0, 150))
            painter.setPen(QColor(0, 0, 0, 150))
            painter.drawRect(0, 0, self.width(), self.height())
            return

        # -------------------------------------------------------------
        # Paint (white) pressed keys

        paintedWhite = False

        for note in self.fEnabledKeys:
            pos = self._getRectFromMidiNote(note)

            if self._isNoteBlack(note):
                continue

            if note < 12:
                octave = 0
            elif note < 24:
                octave = 1
            elif note < 36:
                octave = 2
            elif note < 48:
                octave = 3
            elif note < 60:
                octave = 4
            elif note < 72:
                octave = 5
            elif note < 84:
                octave = 6
            elif note < 96:
                octave = 7
            elif note < 108:
                octave = 8
            elif note < 120:
                octave = 9
            elif note < 132:
                octave = 10
            else:
                # cannot paint this note
                continue

            octave -= self.fStartOctave

            target = QRectF(pos.x() + (self.fWidth * octave), 0, pos.width(),
                            pos.height())
            source = QRectF(pos.x(), 0, pos.width(), pos.height())

            paintedWhite = True
            painter.drawPixmap(target, self.fPixmapDown, source)

        # -------------------------------------------------------------
        # Clear white keys border

        if paintedWhite:
            for octave in range(self.fOctaves):
                for note in kBlackNotes:
                    pos = self._getRectFromMidiNote(note)

                    target = QRectF(pos.x() + (self.fWidth * octave), 0,
                                    pos.width(), pos.height())
                    source = QRectF(pos.x(), 0, pos.width(), pos.height())

                    painter.drawPixmap(target, self.fPixmapNormal, source)

        # -------------------------------------------------------------
        # Paint (black) pressed keys

        for note in self.fEnabledKeys:
            pos = self._getRectFromMidiNote(note)

            if not self._isNoteBlack(note):
                continue

            if note < 12:
                octave = 0
            elif note < 24:
                octave = 1
            elif note < 36:
                octave = 2
            elif note < 48:
                octave = 3
            elif note < 60:
                octave = 4
            elif note < 72:
                octave = 5
            elif note < 84:
                octave = 6
            elif note < 96:
                octave = 7
            elif note < 108:
                octave = 8
            elif note < 120:
                octave = 9
            elif note < 132:
                octave = 10
            else:
                # cannot paint this note
                continue

            octave -= self.fStartOctave

            target = QRectF(pos.x() + (self.fWidth * octave), 0, pos.width(),
                            pos.height())
            source = QRectF(pos.x(), 0, pos.width(), pos.height())

            painter.drawPixmap(target, self.fPixmapDown, source)

        # Paint C-number note info
        painter.setFont(self.fFont)
        painter.setPen(Qt.black)

        for i in range(self.fOctaves):
            octave = self.fStartOctave + i - 1
            painter.drawText(i * 168 + (4 if octave == -1 else 3), 35, 20, 20,
                             Qt.AlignCenter, "C{}".format(octave))

    def _isNoteBlack(self, note):
        baseNote = note % 12
        return bool(baseNote in kBlackNotes)

    def _getRectFromMidiNote(self, note):
        baseNote = note % 12
        return self.fKey2RectMap[baseNote]
Exemple #49
0
class MyWindow(QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.setWindowTitle("Processamento Digital de Imagens - IFTM")
        self.icon = self.setWindowIcon(QIcon("icones/icon.jpg"))
        self.setGeometry(450, 150, 800, 600)
        self.initUI()
        self.listaFiltrosUsados = []

        self.show()

    def initUI(self):
        self.criarWidgets()
        self.gerarLayouts()

    def criarWidgets(self):
        # Criar a barra de menu
        self.barraMenu = self.menuBar()

        # Criar menus
        self.menuArquivo = self.barraMenu.addMenu("&Arquivo")
        self.menuTransformacao = self.barraMenu.addMenu("&Transformações")
        self.menuSobre = self.barraMenu.addMenu("So&bre")

        # Crias as actions
        self.opcaoAbrir = self.menuArquivo.addAction("A&brir")
        self.opcaoAbrir.triggered.connect(self.abrirImagem)
        self.opcaoAbrir.setShortcut("Ctrl+A")

        self.opcaoRecente = self.menuArquivo.addMenu("Abrir &Recente")
        self.abrirRecente = self.opcaoRecente.addAction("arquivos...")
        self.abrirRecente.setDisabled(True)

        self.opcaoSalvarComo = self.menuArquivo.addAction("&Salvar como")
        self.opcaoSalvarComo.triggered.connect(self.salvarImagemComo)
        self.opcaoSalvarComo.setShortcut("Ctrl+S")
        self.opcaoSalvarComo.setDisabled(True)

        self.menuArquivo.addSeparator()
        self.opcaoFechar = self.menuArquivo.addAction("F&echar")
        self.opcaoFechar.setShortcut("Ctrl+X")
        self.opcaoFechar.triggered.connect(self.close)

        self.criarSubmenus()

        self.opcaoSobre = self.menuSobre.addAction("S&obre o Aplicativo")
        self.opcaoSobre.triggered.connect(self.mostrarInformacoesSobre)
        self.opcaoInfoImagem = self.menuSobre.addAction(
            "&Informacões da Imagem")
        self.opcaoInfoImagem.triggered.connect(self.mostrarInformacoesSobre)
        self.opcaoInfoImagem.setVisible(False)

        # Criar barra de status
        self.barraStatus = self.statusBar()
        self.barraStatus.showMessage("Seja bem-vindo(a) ao meu aplicativo",
                                     3000)

        # Criando a barra de progresso
        self.barraProgresso = QProgressBar()

        # Timer
        self.timer = QTimer()
        # self.timer.setInterval(1000)

        # Criando Labels
        self.barraProgressoTexto = QLabel("Progresso da Transformação...")

        # Criando imagens
        self.imagemOriginal = QLabel()
        self.endImagemOriginal = ''
        self.endImagemResultado = ''

    def criarSubmenus(self):

        self.criarSubmenuAjustarNitidez()
        self.criarSubmenuConversao()
        self.criarSubmenuDecomporCanaisRGB()
        self.criarSubmenuDesfocar()
        self.criarSubmenuDeteccaoDeBordas()
        self.criarSubmenuInverterCores()
        self.criarSubmenuRealcarIntensidade()
        self.criarSubmenuMorfologicas()

        self.criarListasChecagemFiltros()

    def criarSubmenuAjustarNitidez(self):
        # Submenu
        self.submenuAjustarNitidez = self.menuTransformacao.addMenu(
            "Ajustar Nitide&z")
        self.submenuAjustarNitidez.setDisabled(True)

        # Actions do submenu
        self.criarActionFiltroSharpen()

    def criarSubmenuRealcarIntensidade(self):
        # Submenu
        self.submenuRealcarIntensidade = self.menuTransformacao.addMenu(
            "Real&çar Intensidade")
        self.submenuRealcarIntensidade.setDisabled(True)

        # Actions do submenu
        self.criarActionCorrecaoGama()
        self.criarActionTransformacaoLogaritmica()

    def criarSubmenuConversao(self):
        # Submenu
        self.submenuConversao = self.menuTransformacao.addMenu("Con&verter")
        self.submenuConversao.setDisabled(True)

        # Actions do submenu
        self.criarActionConverterParaEscalaCinza()
        self.criarActionConverterParaPretoBranco()

    def criarSubmenuDecomporCanaisRGB(self):
        # Submenu
        self.submenuDecomposicaoCanaisRGB = self.menuTransformacao.addMenu(
            "Decomposição &Canais RGB")
        self.submenuDecomposicaoCanaisRGB.setDisabled(True)

        # Actions do submenu
        self.criarActionDecomporCanalR()
        self.criarActionDecomporCanalG()
        self.criarActionDecomporCanalB()

    def criarSubmenuDesfocar(self):
        # Submenu
        self.submenuFiltrosDesfocar = self.menuTransformacao.addMenu(
            "Des&focar")
        self.submenuFiltrosDesfocar.setDisabled(True)

        # Criar novo submenu
        self.criarSubmenuFiltroGaussiano()
        # Actions do submenu
        self.criarActionFiltroMediana()

    def criarSubmenuDeteccaoDeBordas(self):
        # Submenu
        self.submenuFiltrosDeteccaoBordas = self.menuTransformacao.addMenu(
            "&Detectar Bordas")
        self.submenuFiltrosDeteccaoBordas.setDisabled(True)

        # Actions do submenu
        self.criarActionEdgeDetection()
        self.criarActionFiltroSobel()
        self.criarActionDeteccaoDeBordasDilatacao()
        self.criarActionDeteccaoDeBordasErosao()

    def criarSubmenuFiltroGaussiano(self):
        # Submenu
        self.submenuFiltroGaussiano = self.submenuFiltrosDesfocar.addMenu(
            "Filtro Ga&ussiano")
        self.submenuFiltroGaussiano.setDisabled(True)

        # Actions do submenu
        self.criarActionKernelGaussiano3x3()
        self.criarActionKernelGaussiano5x5()
        self.criarActionKernelGaussiano7x7()

    def criarSubmenuInverterCores(self):
        # Submenu
        self.submenuInverterCores = self.menuTransformacao.addMenu(
            "Inverter Cores")
        self.submenuInverterCores.setDisabled(True)

        # Actions do submenu
        self.criarActionInverterNegativo()

    def criarSubmenuMorfologicas(self):
        # Submenu
        self.submenuMorfologicas = self.menuTransformacao.addMenu(
            "&Morfológicas")
        self.submenuMorfologicas.setDisabled(True)

        # Actions do submenu
        self.criarActionFiltroAbertura()
        self.criarActionFiltroDilatacao()
        self.criarActionFiltroErosao()
        self.criarActionFiltroFechamento()

    def criarActionFiltroAbertura(self):
        self.filtroAbertura = self.submenuMorfologicas.addAction("&Abertura")
        self.filtroAbertura.setShortcut("Ctrl+Alt+A")
        self.filtroAbertura.setDisabled(True)
        self.filtroAbertura.setCheckable(True)
        self.filtroAbertura.setChecked(False)
        self.filtroAbertura.triggered.connect(lambda: self.transformarImagem(
            self.filtroAbertura, 'Abertura', '.pbm', 'ArgumentoVazio'))

    def criarActionConverterParaEscalaCinza(self):
        self.converterParaEscalaCinza = self.submenuConversao.addAction(
            "&Cinza")
        self.converterParaEscalaCinza.setShortcut("Ctrl+Alt+Z")
        self.converterParaEscalaCinza.setDisabled(True)
        self.converterParaEscalaCinza.setCheckable(True)
        self.converterParaEscalaCinza.setChecked(False)
        self.converterParaEscalaCinza.triggered.connect(
            lambda: self.transformarImagem(self.converterParaEscalaCinza,
                                           'ConverterEscalaDeCinza', '.pgm',
                                           'ArgumentoVazio'))

    def criarActionConverterParaPretoBranco(self):
        self.converterParaPretoBranco = self.submenuConversao.addAction(
            "Pre&to e Branco")
        self.converterParaPretoBranco.setShortcut("Ctrl+Shift+T")
        self.converterParaPretoBranco.setDisabled(True)
        self.converterParaPretoBranco.setCheckable(True)
        self.converterParaPretoBranco.setChecked(False)
        self.converterParaPretoBranco.triggered.connect(
            self.janelaValorLimitePretoBranco)

    def criarActionCorrecaoGama(self):
        self.correcaoGama = self.submenuRealcarIntensidade.addAction(
            "Correção &Gama")
        self.correcaoGama.setShortcut("Ctrl+Shift+G")
        self.correcaoGama.setDisabled(True)
        self.correcaoGama.setCheckable(True)
        self.correcaoGama.setChecked(False)
        self.correcaoGama.triggered.connect(self.janelaValorCorrecaoGama)

    def criarActionDecomporCanalR(self):
        self.decomporCanalR = self.submenuDecomposicaoCanaisRGB.addAction(
            "Vermelho")
        self.decomporCanalR.setShortcut("Ctrl+Alt+R")
        self.decomporCanalR.setCheckable(True)
        self.decomporCanalR.setChecked(False)
        self.decomporCanalR.triggered.connect(lambda: self.transformarImagem(
            self.decomporCanalR, 'CamadaR', '.ppm', 'ArgumentoVazio'))

    def criarActionDecomporCanalG(self):
        self.decomporCanalG = self.submenuDecomposicaoCanaisRGB.addAction(
            "Verde")
        self.decomporCanalG.setShortcut("Ctrl+Alt+G")
        self.decomporCanalG.setCheckable(True)
        self.decomporCanalG.setChecked(False)
        self.decomporCanalG.triggered.connect(lambda: self.transformarImagem(
            self.decomporCanalG, 'CamadaG', '.ppm', 'ArgumentoVazio'))

    def criarActionDecomporCanalB(self):
        self.decomporCanalB = self.submenuDecomposicaoCanaisRGB.addAction(
            "Azul")
        self.decomporCanalB.setShortcut("Ctrl+Alt+B")
        self.decomporCanalB.setCheckable(True)
        self.decomporCanalB.setChecked(False)
        self.decomporCanalB.triggered.connect(lambda: self.transformarImagem(
            self.decomporCanalB, 'CamadaB', '.ppm', 'ArgumentoVazio'))

    def criarActionEdgeDetection(self):
        self.deteccaoDeBordasFiltroFloresta = self.submenuFiltrosDeteccaoBordas.addAction(
            "Filtro &Floresta")
        self.deteccaoDeBordasFiltroFloresta.setShortcut("Ctrl+Alt+C")
        self.deteccaoDeBordasFiltroFloresta.setCheckable(True)
        self.deteccaoDeBordasFiltroFloresta.setChecked(False)
        self.deteccaoDeBordasFiltroFloresta.triggered.connect(
            lambda: self.transformarImagem(
                self.deteccaoDeBordasFiltroFloresta, 'EdgeDetection', self.
                extensaoImagemOriginal, 'ArgumentoVazio'))

    def criarActionDeteccaoDeBordasDilatacao(self):
        self.deteccaoDeBordasDilatacao = self.submenuFiltrosDeteccaoBordas.addAction(
            "Filtro Detecção com &Dilatação")
        self.deteccaoDeBordasDilatacao.setShortcut("Ctrl+Alt+I")
        self.deteccaoDeBordasDilatacao.setCheckable(True)
        self.deteccaoDeBordasDilatacao.setChecked(False)
        self.deteccaoDeBordasDilatacao.triggered.connect(
            lambda: self.transformarImagem(
                self.deteccaoDeBordasDilatacao, 'DeteccaoDeBordasDilatacao',
                self.extensaoImagemOriginal, 'ArgumentoVazio'))

    def criarActionDeteccaoDeBordasErosao(self):
        self.deteccaoDeBordasErosao = self.submenuFiltrosDeteccaoBordas.addAction(
            "Filtro Detecção com &Erosão")
        self.deteccaoDeBordasErosao.setShortcut("Ctrl+Alt+O")
        self.deteccaoDeBordasErosao.setCheckable(True)
        self.deteccaoDeBordasErosao.setChecked(False)
        self.deteccaoDeBordasErosao.triggered.connect(
            lambda: self.transformarImagem(
                self.deteccaoDeBordasErosao, 'DeteccaoDeBordasErosao', self.
                extensaoImagemOriginal, 'ArgumentoVazio'))

    def criarActionKernelGaussiano3x3(self):
        self.kernelGaussiano3x3 = self.submenuFiltroGaussiano.addAction(
            "Matriz 3x3")
        self.kernelGaussiano3x3.setShortcut("Ctrl+Alt+3")
        self.kernelGaussiano3x3.setCheckable(True)
        self.kernelGaussiano3x3.setChecked(False)
        self.kernelGaussiano3x3.triggered.connect(
            lambda: self.transformarImagem(
                self.kernelGaussiano3x3, 'Gaussiano3x3', self.
                extensaoImagemOriginal, 'ArgumentoVazio'))

    def criarActionKernelGaussiano5x5(self):
        self.kernelGaussiano5x5 = self.submenuFiltroGaussiano.addAction(
            "Matriz 5x5")
        self.kernelGaussiano5x5.setShortcut("Ctrl+Alt+5")
        self.kernelGaussiano5x5.setCheckable(True)
        self.kernelGaussiano5x5.setChecked(False)
        self.kernelGaussiano5x5.triggered.connect(
            lambda: self.transformarImagem(
                self.kernelGaussiano5x5, 'Gaussiano5x5', self.
                extensaoImagemOriginal, 'ArgumentoVazio'))

    def criarActionKernelGaussiano7x7(self):
        self.kernelGaussiano7x7 = self.submenuFiltroGaussiano.addAction(
            "Matriz 7x7")
        self.kernelGaussiano7x7.setShortcut("Ctrl+Alt+7")
        self.kernelGaussiano7x7.setCheckable(True)
        self.kernelGaussiano7x7.setChecked(False)
        self.kernelGaussiano7x7.triggered.connect(
            lambda: self.transformarImagem(
                self.kernelGaussiano7x7, 'Gaussiano7x7', self.
                extensaoImagemOriginal, 'ArgumentoVazio'))

    def criarActionFiltroDilatacao(self):
        self.filtroDilatacao = self.submenuMorfologicas.addAction("&Dilatação")
        self.filtroDilatacao.setShortcut("Ctrl+Alt+D")
        self.filtroDilatacao.setDisabled(True)
        self.filtroDilatacao.setCheckable(True)
        self.filtroDilatacao.setChecked(False)
        self.filtroDilatacao.triggered.connect(lambda: self.transformarImagem(
            self.filtroDilatacao, 'Dilatacao', self.extensaoImagemOriginal,
            'ArgumentoVazio'))

    def criarActionFiltroErosao(self):
        self.filtroErosao = self.submenuMorfologicas.addAction("&Erosão")
        self.filtroErosao.setShortcut("Ctrl+Alt+E")
        self.filtroErosao.setDisabled(True)
        self.filtroErosao.setCheckable(True)
        self.filtroErosao.setChecked(False)
        self.filtroErosao.triggered.connect(lambda: self.transformarImagem(
            self.filtroErosao, 'Erosao', self.extensaoImagemOriginal,
            'ArgumentoVazio'))

    def criarActionFiltroFechamento(self):
        self.filtroFechamento = self.submenuMorfologicas.addAction(
            "&Fechamento")
        self.filtroFechamento.setShortcut("Ctrl+Alt+F")
        self.filtroFechamento.setDisabled(True)
        self.filtroFechamento.setCheckable(True)
        self.filtroFechamento.setChecked(False)
        self.filtroFechamento.triggered.connect(lambda: self.transformarImagem(
            self.filtroFechamento, 'Fechamento', self.extensaoImagemOriginal,
            'ArgumentoVazio'))

    def criarActionFiltroMediana(self):
        self.filtroMediana = self.submenuFiltrosDesfocar.addAction(
            "Filtro &Mediana")
        self.filtroMediana.setShortcut("Ctrl+Shift+M")
        self.filtroMediana.setDisabled(True)
        self.filtroMediana.setCheckable(True)
        self.filtroMediana.setChecked(False)
        self.filtroMediana.triggered.connect(lambda: self.transformarImagem(
            self.filtroMediana, 'Mediana', self.extensaoImagemOriginal,
            'ArgumentoVazio'))

    def criarActionFiltroSharpen(self):
        self.filtroSharpen = self.submenuAjustarNitidez.addAction(
            "Filtro S&harpen")
        self.filtroSharpen.setShortcut("Ctrl+Shift+H")
        self.filtroSharpen.setDisabled(True)
        self.filtroSharpen.setCheckable(True)
        self.filtroSharpen.setChecked(False)
        self.filtroSharpen.triggered.connect(lambda: self.transformarImagem(
            self.filtroSharpen, 'Sharpen', self.extensaoImagemOriginal,
            'ArgumentoVazio'))

    def criarActionFiltroSobel(self):
        self.filtroSobel = self.submenuFiltrosDeteccaoBordas.addAction(
            "Filtro S&obel")
        self.filtroSobel.setShortcut("Ctrl+Shift+O")
        self.filtroSobel.setDisabled(True)
        self.filtroSobel.setCheckable(True)
        self.filtroSobel.setChecked(False)
        self.filtroSobel.triggered.connect(self.janelaValorLimiteSobel)

    def criarActionInverterNegativo(self):
        self.filtroNegativo = self.submenuInverterCores.addAction("&Negativo")
        self.filtroNegativo.setShortcut("Ctrl+Shift+N")
        self.filtroNegativo.setDisabled(True)
        self.filtroNegativo.setCheckable(True)
        self.filtroNegativo.setChecked(False)
        self.filtroNegativo.triggered.connect(lambda: self.transformarImagem(
            self.filtroNegativo, 'Negativo', self.extensaoImagemOriginal,
            'ArgumentoVazio'))

    def criarActionTransformacaoLogaritmica(self):
        self.transformacaoLogaritmica = self.submenuRealcarIntensidade.addAction(
            "Transformação &Logarítmica")
        self.transformacaoLogaritmica.setShortcut("Ctrl+Shift+L")
        self.transformacaoLogaritmica.setDisabled(True)
        self.transformacaoLogaritmica.setCheckable(True)
        self.transformacaoLogaritmica.setChecked(False)
        self.transformacaoLogaritmica.triggered.connect(
            lambda: self.transformarImagem(
                self.transformacaoLogaritmica, 'TransformacaoLogaritmica', self
                .extensaoImagemOriginal, 'ArgumentoVazio'))

    def criarListasChecagemFiltros(self):
        self.listaFiltrosImgColoridaCinza = [
            self.submenuAjustarNitidez, self.filtroSharpen,
            self.submenuRealcarIntensidade, self.correcaoGama,
            self.transformacaoLogaritmica, self.submenuConversao,
            self.converterParaEscalaCinza, self.converterParaPretoBranco,
            self.submenuFiltrosDesfocar, self.submenuFiltroGaussiano,
            self.kernelGaussiano3x3, self.kernelGaussiano5x5,
            self.kernelGaussiano7x7, self.filtroMediana,
            self.submenuInverterCores, self.filtroNegativo,
            self.submenuFiltrosDeteccaoBordas,
            self.deteccaoDeBordasFiltroFloresta, self.filtroSobel,
            self.submenuDecomposicaoCanaisRGB, self.decomporCanalR,
            self.decomporCanalG, self.decomporCanalB
        ]

        self.listaFiltrosImgPretoBranco = [
            self.submenuFiltrosDeteccaoBordas,
            self.deteccaoDeBordasFiltroFloresta,
            self.deteccaoDeBordasDilatacao, self.deteccaoDeBordasErosao,
            self.submenuMorfologicas, self.filtroAbertura,
            self.filtroDilatacao, self.filtroErosao, self.filtroFechamento
        ]

    def gerarLayouts(self):
        # Criando janela
        self.janelaAreaVisualizacao = QWidget(self)
        self.setCentralWidget(self.janelaAreaVisualizacao)

        # Criando os layouts
        self.layoutPrincipal = QVBoxLayout()
        self.layoutTopo = QVBoxLayout()
        self.layoutRodape = QHBoxLayout()

        # Adicionando os widgets
        self.layoutTopo.addWidget(self.imagemOriginal)
        self.layoutRodape.addWidget(self.barraProgressoTexto)
        self.layoutRodape.addWidget(self.barraProgresso)

        # Adicionando layouts filhos na janela principal
        self.layoutPrincipal.addLayout(self.layoutTopo, 80)
        self.layoutPrincipal.addLayout(self.layoutRodape, 20)

        self.janelaAreaVisualizacao.setLayout(self.layoutPrincipal)

    def abrirImagem(self):
        global imagemResultado

        ocultarDiretorioImgResultado()

        global porcentagemProgresso
        arquivoImagem, _ = QFileDialog.getOpenFileName(
            self,
            caption="Abrir Imagem",
            directory=QtCore.QDir.currentPath(),
            filter='Imagens(*.ppm; *.pgm; *.pbm)',
            initialFilter='Imagens(*.ppm; *.pgm; *.pbm)')

        if arquivoImagem:
            excluirCopiaImgTransformada()
            self.removerChecagemFiltrosUsados()
            porcentagemProgresso = 0
            self.barraProgresso.setValue(porcentagemProgresso)
            self.endImagemOriginal = arquivoImagem
            self.pixmapImagem = QPixmap(self.endImagemOriginal)
            self.extensaoImagemOriginal = os.path.splitext(
                os.path.basename(arquivoImagem))[1]
            self.exibirImagem()
            self.alterarVisibilidadeMenus()

    def removerChecagemFiltrosUsados(self):
        for filtro in self.listaFiltrosUsados:
            filtro.setChecked(False)

        self.listaFiltrosUsados.clear()

    def alterarVisibilidadeMenus(self):
        global extensaoImagemResultado

        self.opcaoInfoImagem.setVisible(True)
        self.opcaoSalvarComo.setDisabled(False)

        if self.extensaoImagemOriginal == '.ppm':
            if not self.listaFiltrosUsados:
                for filtro in self.listaFiltrosImgColoridaCinza:
                    filtro.setDisabled(False)

            self.submenuMorfologicas.setDisabled(True)
            self.filtroAbertura.setDisabled(True)
            self.filtroDilatacao.setDisabled(True)
            self.deteccaoDeBordasDilatacao.setDisabled(True)
            self.deteccaoDeBordasErosao.setDisabled(True)

        elif self.extensaoImagemOriginal == '.pgm':
            for filtro in self.listaFiltrosImgColoridaCinza:
                filtro.setDisabled(False)
            self.submenuDecomposicaoCanaisRGB.setDisabled(True)
            self.decomporCanalR.setDisabled(True)
            self.decomporCanalG.setDisabled(True)
            self.decomporCanalB.setDisabled(True)
            self.converterParaEscalaCinza.setDisabled(True)
            self.submenuMorfologicas.setDisabled(True)
            self.filtroAbertura.setDisabled(True)
            self.filtroDilatacao.setDisabled(True)
            self.deteccaoDeBordasDilatacao.setDisabled(True)
            self.deteccaoDeBordasErosao.setDisabled(True)

        elif self.extensaoImagemOriginal == '.pbm':
            for filtro in self.listaFiltrosImgColoridaCinza:
                filtro.setDisabled(True)

            for filtro in self.listaFiltrosImgPretoBranco:
                filtro.setDisabled(False)

    def janelaValorCorrecaoGama(self):
        self.janelaValorFatorGama = JanelaValorGama()
        self.janelaValorFatorGama.enviarValor.clicked.connect(
            self.pegarValorSliderGama)

    def pegarValorSliderGama(self):
        valorFatorGama = str(self.janelaValorFatorGama.valorSlider)
        self.janelaValorFatorGama.close()
        self.transformarImagem(self.correcaoGama, 'CorrecaoGama',
                               self.extensaoImagemOriginal, valorFatorGama)

    def janelaValorLimiteSobel(self):
        self.janelaValorLimiteSobel = JanelaValorLimiteSobel()
        self.janelaValorLimiteSobel.enviarValor.clicked.connect(
            self.pegarValorLimiteSobel)

    def pegarValorLimiteSobel(self):
        valorLimiteSobel = str(self.janelaValorLimiteSobel.valorSlider)
        self.janelaValorLimiteSobel.close()
        self.transformarImagem(self.filtroSobel, 'Sobel',
                               self.extensaoImagemOriginal, valorLimiteSobel)

    def janelaValorLimitePretoBranco(self):
        self.janelaValorLimitePretoBranco = JanelaValorLimitePretoBranco()
        self.janelaValorLimitePretoBranco.enviarValor.clicked.connect(
            self.pegarValorLimitePretoBranco)

    def pegarValorLimitePretoBranco(self):
        valorLimitePretoBranco = str(
            self.janelaValorLimitePretoBranco.valorSlider)
        self.janelaValorLimitePretoBranco.close()
        self.transformarImagem(self.converterParaPretoBranco,
                               'ConverterImagemBinaria', '.pbm',
                               valorLimitePretoBranco)

    def mostrarInformacoesSobre(self):

        self.opcaoEscolhida = self.sender().text()
        self.caixaMensagem = QMessageBox()
        self.caixaMensagem.setIcon(QMessageBox.Information)

        if self.opcaoEscolhida == "S&obre o Aplicativo":
            self.caixaMensagem.setWindowTitle("Sobre o Aplicativo")
            self.caixaMensagem.setText("Desenvolvido por Victor Rodrigues")
            self.caixaMensagem.setInformativeText(
                "Ipiaçu-MG, 01 de Agosto de 2020")
            self.descricao = 'Este aplicativo tem como princípio a realização de  transformações em imagens com extensão pgm, ppm e pbm e foi elaborado para o trabalho final da disciplina de Processamento Digital de Imagens no Curso Superior em Análise e Desenvolvimento de Sistemas do Instituto Federal de Educação, Ciência e Tecnologia do Triângulo Mineiro - IFTM'

            self.caixaMensagem.setDetailedText(self.descricao)
            self.caixaMensagem.exec_()

        if self.opcaoEscolhida == "&Informacões da Imagem":
            if self.endImagemOriginal != '':
                self.caixaMensagem.setWindowTitle("Informações da Imagem")

                self.extrairInfoImagem()

                self.caixaMensagem.setText("Arquivo: " + self.nomeimagem + "\n" + "Tipo: " + self.tipoimagem +
                                           "Comentário: " + self.comentarioimagem + "Largura: " + self.larguraimagem \
                                           + "\n" + "Altura: " + self.alturaimagem)

                self.caixaMensagem.exec_()

    def salvarImagemComo(self):
        global extensaoImagemResultado
        try:
            if self.endImagemOriginal != '':
                imagemSalvaComo, tipos = QFileDialog.getSaveFileName(
                    self,
                    caption='Salvar como',
                    directory=QtCore.QDir.currentPath(),
                    filter='Imagens(*.ppm; *.pgm; *.pbm)',
                    initialFilter='Imagens(*.ppm; *.pgm; *.pbm)')
                if imagemSalvaComo:
                    self.parts = imagemSalvaComo.rpartition('/')
                    self.endereco = self.parts[0]
                    if self.endImagemResultado != '':
                        os.renames(
                            self.endImagemResultado,
                            self.endereco + '/' + os.path.splitext(
                                os.path.basename(imagemSalvaComo))[0] +
                            extensaoImagemResultado)
                    else:
                        os.renames(
                            self.endImagemOriginal,
                            self.endereco + '/' + os.path.splitext(
                                os.path.basename(imagemSalvaComo))[0] +
                            self.extensaoImagemOriginal)
        except:
            pass

    def extrairInfoImagem(self):
        try:
            self.parts = self.endImagemOriginal.rpartition('/')
            self.nomeimagem = self.parts[2]
            self.leituraimagem = open(self.endImagemOriginal, "r+")
            self.tipoimagem = self.leituraimagem.readline()
            self.comentarioimagem = self.leituraimagem.readline()
            self.dimensoesimagem = self.leituraimagem.readline()
            self.dimensoesimagem = self.dimensoesimagem.split()
            self.larguraimagem = self.dimensoesimagem[0]
            self.alturaimagem = self.dimensoesimagem[1]
        except:
            pass

    def transformarImagem(self, filtro, script, extensao, valorArgumento3):

        global porcentagemProgresso
        global imagemResultado
        global extensaoImagemResultado

        porcentagemProgresso = 0
        self.barraProgresso.setValue(porcentagemProgresso)
        self.filtroUsado = ''

        if os.path.exists(imagemResultado + "Copia" + extensaoImagemResultado):
            self.imagemEntrada = imagemResultado + "Copia" + extensaoImagemResultado
        else:
            self.imagemEntrada = self.endImagemOriginal

        try:
            if self.extensaoImagemOriginal == '.ppm':
                self.script = 'filtrosDeTransformacao/colorida/' + script + '.py'
                extensaoImagemResultado = extensao
                self.filtroUsado = filtro

            elif self.extensaoImagemOriginal == '.pgm':
                self.script = 'filtrosDeTransformacao/escalaCinza/' + script + '.py'
                extensaoImagemResultado = extensao
                self.filtroUsado = filtro

            elif self.extensaoImagemOriginal == '.pbm':
                self.script = 'filtrosDeTransformacao/pretoBranco/' + script + '.py'
                extensaoImagemResultado = extensao
                self.filtroUsado = filtro

            self.argumentos = 'python ' + self.script + ' \"' + self.imagemEntrada + '\" ' + \
                              imagemResultado + extensaoImagemResultado + ' \" ' + valorArgumento3
            self.executarTransformacao = subprocess.run(self.argumentos,
                                                        shell=True)

            while porcentagemProgresso < 100:
                if self.executarTransformacao is not None:
                    porcentagemProgresso += 0.001
                    self.barraProgresso.setValue(int(porcentagemProgresso))
                else:
                    break

            self.endImagemResultado = imagemResultado + extensaoImagemResultado
            self.pixmapImagem = QPixmap(self.endImagemResultado)
            shutil.copyfile(
                self.endImagemResultado,
                imagemResultado + "Copia" + extensaoImagemResultado)
            self.exibirImagem()
            self.listaFiltrosUsados.append(self.filtroUsado)
            self.extensaoImagemOriginal = extensaoImagemResultado
            self.alterarVisibilidadeMenus()

            self.barraStatus.showMessage(
                "Aplicação " + self.filtroEscolhido.replace("&", "") +
                " finalizada", 5000)

        except:
            pass

    def exibirImagem(self):
        if self.pixmapImagem.width() > int(GetSystemMetrics(0) / 2) or \
                self.pixmapImagem.height() > int(GetSystemMetrics(1) / 2):
            self.pixmapImagem = self.pixmapImagem.scaled(
                int(GetSystemMetrics(0) / 2), int(GetSystemMetrics(1) / 2),
                QtCore.Qt.KeepAspectRatio, QtCore.Qt.SmoothTransformation)

        self.imagemOriginal.setPixmap(self.pixmapImagem)
        self.imagemOriginal.setAlignment(QtCore.Qt.AlignCenter)

    def closeEvent(self, event):
        global listaFiltrosUsados
        excluirCopiaImgTransformada()
Exemple #50
0
class ScatterPlotItem(pg.PlotItem):
    """ScatterPlotItem.

    Implemented based on pyqtgraph.ScatterPlotItem.
    """
    @staticmethod
    def createSymbols():
        _names = [
            'o', 's', 't', 't1', 't2', 't3', 'd', '+', 'x', 'p', 'h', 'star',
            'arrow_up', 'arrow_right', 'arrow_down', 'arrow_left'
        ]
        symbols = OrderedDict([(name, QPainterPath()) for name in _names])
        symbols['o'].addEllipse(QRectF(-0.5, -0.5, 1., 1.))
        symbols['s'].addRect(QRectF(-0.5, -0.5, 1., 1.))
        _coords = {
            't': [(-0.5, -0.5), (0, 0.5), (0.5, -0.5)],
            't1': [(-0.5, 0.5), (0, -0.5), (0.5, 0.5)],
            't2': [(-0.5, -0.5), (-0.5, 0.5), (0.5, 0)],
            't3': [(0.5, 0.5), (0.5, -0.5), (-0.5, 0)],
            'd': [(0., -0.5), (-0.4, 0.), (0, 0.5), (0.4, 0)],
            '+': [(-0.5, -0.05), (-0.5, 0.05), (-0.05, 0.05), (-0.05, 0.5),
                  (0.05, 0.5), (0.05, 0.05), (0.5, 0.05), (0.5, -0.05),
                  (0.05, -0.05), (0.05, -0.5), (-0.05, -0.5), (-0.05, -0.05)],
            'p': [(0, -0.5), (-0.4755, -0.1545), (-0.2939, 0.4045),
                  (0.2939, 0.4045), (0.4755, -0.1545)],
            'h': [(0.433, 0.25), (0., 0.5), (-0.433, 0.25), (-0.433, -0.25),
                  (0, -0.5), (0.433, -0.25)],
            'star': [(0, -0.5), (-0.1123, -0.1545), (-0.4755, -0.1545),
                     (-0.1816, 0.059), (-0.2939, 0.4045), (0, 0.1910),
                     (0.2939, 0.4045), (0.1816, 0.059), (0.4755, -0.1545),
                     (0.1123, -0.1545)],
            'arrow_down': [(-0.125, 0.125), (0, 0), (0.125, 0.125),
                           (0.05, 0.125), (0.05, 0.5), (-0.05, 0.5),
                           (-0.05, 0.125)]
        }

        for k, c in _coords.items():
            symbols[k].moveTo(*c[0])
            for x, y in c[1:]:
                symbols[k].lineTo(x, y)
            symbols[k].closeSubpath()

        del _coords

        tr = QTransform()
        tr.rotate(45)
        symbols['x'] = tr.map(symbols['+'])
        tr.rotate(45)
        symbols['arrow_right'] = tr.map(symbols['arrow_down'])
        symbols['arrow_up'] = tr.map(symbols['arrow_right'])
        symbols['arrow_left'] = tr.map(symbols['arrow_up'])
        return symbols

    _symbol_map = createSymbols.__func__()

    def __init__(self,
                 x=None,
                 y=None,
                 *,
                 symbol='o',
                 size=8,
                 pen=None,
                 brush=None,
                 name=None,
                 parent=None):
        """Initialization."""
        super().__init__(name=name, parent=parent)

        self._x = None
        self._y = None

        self._bounds = [None, None]

        if pen is None and brush is None:
            self._pen = FColor.mkPen(None)
            self._brush = FColor.mkBrush('b')
        else:
            self._pen = FColor.mkPen(None) if pen is None else pen
            self._brush = FColor.mkBrush(None) if brush is None else brush

        self._size = size

        self._symbol_path = self._symbol_map[symbol]
        self._symbol_fragment = None
        self._symbol_width = None
        self._buildFragment()

        self.setData(x, y)

    def updateGraph(self):
        """Override."""
        self.prepareGeometryChange()
        self.informViewBoundsChanged()
        self._bounds = [None, None]

    def setData(self, x, y):
        """Override."""
        self._parseInputData(x, y)
        self.updateGraph()

    def data(self):
        """Override."""
        return self._x, self._y

    def implements(self, interface=None):
        ints = ['plotData']
        if interface is None:
            return ints
        return interface in ints

    def dataBounds(self, ax, frac=1.0, orthoRange=None):
        if frac >= 1.0 and orthoRange is None and self._bounds[ax] is not None:
            return self._bounds[ax]

        if len(self._y) == 0:
            return None, None

        x, y = self.transformedData()
        if ax == 0:
            d = x
            d2 = y
        elif ax == 1:
            d = y
            d2 = x

        if orthoRange is not None:
            mask = (d2 >= orthoRange[0]) * (d2 <= orthoRange[1])
            d = d[mask]
            d2 = d2[mask]

            if d.size == 0:
                return None, None

        if frac >= 1.0:
            self._bounds[ax] = (np.nanmin(d), np.nanmax(d))
            return self._bounds[ax]
        elif frac <= 0.0:
            raise Exception(
                "Value for parameter 'frac' must be > 0. (got %s)" % str(frac))
        else:
            mask = np.isfinite(d)
            d = d[mask]
            return np.percentile(d, [50 * (1 - frac), 50 * (1 + frac)])

    def pixelPadding(self):
        return 0.7072 * self._symbol_width

    def boundingRect(self):
        """Override."""
        xmn, xmx = self.dataBounds(ax=0)
        ymn, ymx = self.dataBounds(ax=1)
        if xmn is None or xmx is None:
            xmn = 0
            xmx = 0
        if ymn is None or ymx is None:
            ymn = 0
            ymx = 0

        px = py = 0.0
        pad = self.pixelPadding()
        if pad > 0:
            # determine length of pixel in local x, y directions
            px, py = self.pixelVectors()
            try:
                px = 0 if px is None else px.length()
            except OverflowError:
                px = 0
            try:
                py = 0 if py is None else py.length()
            except OverflowError:
                py = 0

            # return bounds expanded by pixel size
            px *= pad
            py *= pad
        return QRectF(xmn - px, ymn - py, 2 * px + xmx - xmn,
                      2 * py + ymx - ymn)

    def viewTransformChanged(self):
        # FIXME: I am not sure whether this is needed
        self.prepareGeometryChange()
        self._bounds = [None, None]

    def mapPointsToDevice(self, pts):
        tr = self.deviceTransform()
        if tr is None:
            return None

        pts = fn.transformCoordinates(tr, pts)
        pts -= 0.5 * self._symbol_width
        # prevent sluggish GUI and possibly Qt segmentation fault.
        pts = np.clip(pts, -2**30, 2**30)

        return pts

    def getViewMask(self, pts):
        vb = self.getViewBox()
        if vb is None:
            return None

        rect = vb.mapRectToDevice(vb.boundingRect())
        w = 0.5 * self._symbol_width

        mask = ((pts[0] + w > rect.left()) & (pts[0] - w < rect.right()) &
                (pts[1] + w > rect.top()) & (pts[1] - w < rect.bottom()))

        return mask

    def paint(self, p, *args):
        """Override."""
        p.resetTransform()

        x, y = self.transformedData()

        pts = np.vstack([x, y])
        pts = self.mapPointsToDevice(pts)
        if pts is None:
            return

        masked_pts = pts[:, self.getViewMask(pts)]
        width = self._symbol_width
        source_rect = QRectF(self._symbol_fragment.rect())
        for px, py in zip(masked_pts[0, :], masked_pts[1, :]):
            p.drawPixmap(QRectF(px, py, width, width), self._symbol_fragment,
                         source_rect)

    def drawSample(self, p):
        """Override."""
        p.translate(10, 10)
        self.drawSymbol(p)

    def drawSymbol(self, p):
        p.scale(self._size, self._size)
        p.setPen(self._pen)
        p.setBrush(self._brush)
        p.drawPath(self._symbol_path)

    def _buildFragment(self):
        pen = self._pen
        size = int(self._size + max(np.ceil(pen.widthF()), 1))
        image = QImage(size, size, QImage.Format_ARGB32)
        image.fill(0)
        p = QPainter(image)
        try:
            # default is QPainter.TextAntialiasing
            p.setRenderHint(QPainter.Antialiasing)
            center = 0.5 * size
            p.translate(center, center)
            self.drawSymbol(p)
        finally:
            p.end()

        self._symbol_fragment = QPixmap(image)
        self._symbol_width = self._symbol_fragment.width()
Exemple #51
0
class Overlay(QWidget):

    def __init__(self, parent, binpath):
        super().__init__(parent)
        sizePolicy = QSizePolicy()
        sizePolicy.setHorizontalPolicy(QSizePolicy.Maximum)
        sizePolicy.setVerticalPolicy(QSizePolicy.Maximum)
        #self.setSizePolicy(sizePolicy)
        self.setMouseTracking(True)

        self.on_selection = False
        self.selected = False
        self.c = Communicate()

        self.start_position = QPoint(0,0)
        self.last_position = QPoint(0,0)

        image = (
            b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
            b"\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
            b"\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00"
            b"\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00"
            b"\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00"
            b"\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00"
            b"\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
            b"\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")
        im = QImage(image, 8,8, QImage.Format_RGB16)
        im = im.scaled(64,64)
        self.crop = QPixmap()
        self.crop.convertFromImage(im)

    def insideSelection(self, point):
        width = self.last_position.x() - self.start_position.x()
        height = self.last_position.y() - self.start_position.y()

        return (    point.x() > self.start_position.x() and point.x() < self.start_position.x() + width and
                    point.y() > self.start_position.y() and point.y() < self.start_position.y() + height    )

    def mouseMoveEvent(self, event):

        if self.on_selection:
            self.last_position = event.pos()
            self.update()

    def mousePressEvent(self, QMouseEvent):

        if not self.insideSelection(QMouseEvent.pos()):
            self.on_selection = True
            self.selected = True
            self.start_position = QMouseEvent.pos()
            self.last_position = QMouseEvent.pos()
            self.update()

    def mouseDoubleClickEvent(self, QMouseEvent):
        if self.insideSelection(QMouseEvent.pos()):
            width = self.last_position.x() - self.start_position.x()
            height = self.last_position.y() - self.start_position.y()
            self.c.cropImage.emit(self.start_position.x(), self.start_position.y(), width,height)

    def mouseReleaseEvent(self, QMouseEvent):
        self.on_selection = False
        self.update()

    def enterEvent(self, event):
        return super().enterEvent(event)

    def leaveEvent(self, event):
        return super().enterEvent(event)

    def paintEvent(self, e):
        qp = QPainter()
        qp.begin(self)
        #self.drawWidget(qp)
        if self.selected:
            qp.setCompositionMode(QPainter.CompositionMode_HardLight)
            qp.setBrush(QColor(0, 0, 0, 128))
            qp.drawRect(0,0, self.width(), self.height())
            qp.setCompositionMode(QPainter.CompositionMode_Overlay)
            qp.setBrush(QColor(255, 255, 255, 255))

            width = self.last_position.x() - self.start_position.x()
            height = self.last_position.y()-self.start_position.y()

            qp.drawRect(self.start_position.x(), self.start_position.y(), width, height)
            qp.setCompositionMode(QPainter.CompositionMode_SourceOver)

            image_w = min([abs(width), abs(height), self.crop.width()]) #self.crop.width()
            image_h = image_w #self.crop.height()
            qp.drawPixmap(self.start_position.x() + width/2 - image_w/2, self.start_position.y() + height/2 - image_h/2, image_w, image_h, self.crop)

        qp.end()
Exemple #52
0
 def __init__(self, parent=None):
     super(ThemePage, self).__init__(parent)
     self.parent = parent
     self.setObjectName('settingsthemepage')
     mainLayout = QVBoxLayout()
     mainLayout.setSpacing(10)
     pen = QPen(
         QColor('#4D5355' if self.parent.theme == 'dark' else '#B9B9B9'))
     pen.setWidth(2)
     theme_light = QPixmap(':/images/theme-light.png', 'PNG')
     painter = QPainter(theme_light)
     painter.setPen(pen)
     painter.setBrush(Qt.NoBrush)
     painter.drawRect(0, 0, theme_light.width(), theme_light.height())
     theme_dark = QPixmap(':/images/theme-dark.png', 'PNG')
     painter = QPainter(theme_dark)
     painter.setPen(pen)
     painter.setBrush(Qt.NoBrush)
     painter.drawRect(0, 0, theme_dark.width(), theme_dark.height())
     self.lightRadio = QRadioButton(self)
     self.lightRadio.setIcon(QIcon(theme_light))
     self.lightRadio.setIconSize(QSize(165, 121))
     self.lightRadio.setCursor(Qt.PointingHandCursor)
     self.lightRadio.clicked.connect(self.switchTheme)
     self.lightRadio.setChecked(self.parent.theme == 'light')
     self.darkRadio = QRadioButton(self)
     self.darkRadio.setIcon(QIcon(theme_dark))
     self.darkRadio.setIconSize(QSize(165, 121))
     self.darkRadio.setCursor(Qt.PointingHandCursor)
     self.darkRadio.clicked.connect(self.switchTheme)
     self.darkRadio.setChecked(self.parent.theme == 'dark')
     themeLayout = QGridLayout()
     themeLayout.setColumnStretch(0, 1)
     themeLayout.addWidget(self.lightRadio, 0, 1)
     themeLayout.addWidget(self.darkRadio, 0, 3)
     themeLayout.addWidget(QLabel('Light', self), 1, 1, Qt.AlignHCenter)
     themeLayout.setColumnStretch(2, 1)
     themeLayout.addWidget(QLabel('Dark', self), 1, 3, Qt.AlignHCenter)
     themeLayout.setColumnStretch(4, 1)
     themeGroup = QGroupBox('Theme')
     themeGroup.setLayout(themeLayout)
     mainLayout.addWidget(themeGroup)
     index_leftRadio = QRadioButton('Clips on left')
     index_leftRadio.setToolTip('Display Clip Index on the left hand side')
     index_leftRadio.setCursor(Qt.PointingHandCursor)
     index_leftRadio.setChecked(self.parent.parent.indexLayout == 'left')
     index_rightRadio = QRadioButton('Clips on right')
     index_rightRadio.setToolTip(
         'Display Clip Index on the right hand side')
     index_rightRadio.setCursor(Qt.PointingHandCursor)
     index_rightRadio.setChecked(self.parent.parent.indexLayout == 'right')
     index_buttonGroup = QButtonGroup(self)
     index_buttonGroup.addButton(index_leftRadio, 1)
     index_buttonGroup.addButton(index_rightRadio, 2)
     # noinspection PyUnresolvedReferences
     index_buttonGroup.buttonClicked[int].connect(
         self.parent.parent.setClipIndexLayout)
     indexLayout = QHBoxLayout()
     indexLayout.addWidget(index_leftRadio)
     indexLayout.addWidget(index_rightRadio)
     layoutGroup = QGroupBox('Layout')
     layoutGroup.setLayout(indexLayout)
     mainLayout.addWidget(layoutGroup)
     toolbar_labels = self.parent.settings.value('toolbarLabels',
                                                 'beside',
                                                 type=str)
     toolbar_notextRadio = QRadioButton('No text (buttons only)', self)
     toolbar_notextRadio.setToolTip('No text (buttons only)')
     toolbar_notextRadio.setCursor(Qt.PointingHandCursor)
     toolbar_notextRadio.setChecked(toolbar_labels == 'none')
     toolbar_underRadio = QRadioButton('Text under buttons', self)
     toolbar_underRadio.setToolTip('Text under buttons')
     toolbar_underRadio.setCursor(Qt.PointingHandCursor)
     toolbar_underRadio.setChecked(toolbar_labels == 'under')
     toolbar_besideRadio = QRadioButton('Text beside buttons', self)
     toolbar_besideRadio.setToolTip('Text beside buttons')
     toolbar_besideRadio.setCursor(Qt.PointingHandCursor)
     toolbar_besideRadio.setChecked(toolbar_labels == 'beside')
     toolbar_buttonGroup = QButtonGroup(self)
     toolbar_buttonGroup.addButton(toolbar_besideRadio, 1)
     toolbar_buttonGroup.addButton(toolbar_underRadio, 2)
     toolbar_buttonGroup.addButton(toolbar_notextRadio, 3)
     # noinspection PyUnresolvedReferences
     toolbar_buttonGroup.buttonClicked[int].connect(self.setLabelStyle)
     toolbarLayout = QGridLayout()
     toolbarLayout.addWidget(toolbar_besideRadio, 0, 0)
     toolbarLayout.addWidget(toolbar_underRadio, 0, 1)
     toolbarLayout.addWidget(toolbar_notextRadio, 1, 0)
     toolbarGroup = QGroupBox('Toolbar')
     toolbarGroup.setLayout(toolbarLayout)
     mainLayout.addWidget(toolbarGroup)
     nativeDialogsCheckbox = QCheckBox('Use native dialogs', self)
     nativeDialogsCheckbox.setToolTip('Use native file dialogs')
     nativeDialogsCheckbox.setCursor(Qt.PointingHandCursor)
     nativeDialogsCheckbox.setChecked(self.parent.parent.nativeDialogs)
     nativeDialogsCheckbox.stateChanged.connect(self.setNativeDialogs)
     nativeDialogsLabel = QLabel(
         '''
         <b>ON:</b> use native dialog widgets as provided by your operating system
         <br/>
         <b>OFF:</b> use a generic file open & save dialog widget provided by the Qt toolkit
         <br/><br/>
         <b>NOTE:</b> native dialogs should always be used if working
     ''', self)
     nativeDialogsLabel.setObjectName('nativedialogslabel')
     nativeDialogsLabel.setTextFormat(Qt.RichText)
     nativeDialogsLabel.setWordWrap(True)
     advancedLayout = QVBoxLayout()
     advancedLayout.addWidget(nativeDialogsCheckbox)
     advancedLayout.addWidget(nativeDialogsLabel)
     advancedGroup = QGroupBox('Advanced')
     advancedGroup.setLayout(advancedLayout)
     mainLayout.addWidget(advancedGroup)
     mainLayout.addStretch(1)
     self.setLayout(mainLayout)
Exemple #53
0
class RackListWidget(QListWidget):
    def __init__(self, parent):
        QListWidget.__init__(self, parent)
        self.host = None
        self.fParent = None

        if False:
            # kdevelop likes this :)
            from carla_backend import CarlaHostMeta
            self.host = host = CarlaHostNull()

        exts = gCarla.utils.get_supported_file_extensions()

        self.fSupportedExtensions = tuple(("." + i) for i in exts)
        self.fLastSelectedItem    = None
        self.fWasLastDragValid    = False

        self.fPixmapL     = QPixmap(":/bitmaps/rack_interior_left.png")
        self.fPixmapR     = QPixmap(":/bitmaps/rack_interior_right.png")
        self.fPixmapWidth = self.fPixmapL.width()

        self.setMinimumWidth(RackListItem.kMinimumWidth)
        self.setSelectionMode(QAbstractItemView.SingleSelection)
        self.setSortingEnabled(False)

        self.setDragEnabled(True)
        self.setDragDropMode(QAbstractItemView.DropOnly)
        self.setDropIndicatorShown(True)
        self.viewport().setAcceptDrops(True)

        self.setFrameShape(QFrame.NoFrame)
        self.setFrameShadow(QFrame.Plain)

    # --------------------------------------------------------------------------------------------------------

    def createItem(self, pluginId):
        return RackListItem(self, pluginId)

    def getPluginCount(self):
        return self.fParent.getPluginCount()

    def setHostAndParent(self, host, parent):
        self.host = host
        self.fParent = parent

    # --------------------------------------------------------------------------------------------------------

    def customClearSelection(self):
        self.setCurrentRow(-1)
        self.clearSelection()
        self.clearFocus()

    def isDragUrlValid(self, filename):
        if os.path.isdir(filename):
            #if os.path.exists(os.path.join(filename, "manifest.ttl")):
                #return True
            if MACOS and filename.lower().endswith(".vst"):
                return True

        elif os.path.isfile(filename):
            if filename.lower().endswith(self.fSupportedExtensions):
                return True

        return False

    # --------------------------------------------------------------------------------------------------------

    def dragEnterEvent(self, event):
        urls = event.mimeData().urls()

        for url in urls:
            if self.isDragUrlValid(url.toLocalFile()):
                self.fWasLastDragValid = True
                event.acceptProposedAction()
                return

        self.fWasLastDragValid = False
        QListWidget.dragEnterEvent(self, event)

    def dragMoveEvent(self, event):
        if not self.fWasLastDragValid:
            QListWidget.dragMoveEvent(self, event)
            return

        event.acceptProposedAction()

        tryItem = self.itemAt(event.pos())

        if tryItem is not None:
            self.setCurrentRow(tryItem.getPluginId())
        else:
            self.setCurrentRow(-1)

    def dragLeaveEvent(self, event):
        self.fWasLastDragValid = False
        QListWidget.dragLeaveEvent(self, event)

    # --------------------------------------------------------------------------------------------------------

    # FIXME: this needs some attention

    # if dropping project file over 1 plugin, load it in rack or patchbay
    # if dropping regular files over 1 plugin, keep replacing plugins

    def dropEvent(self, event):
        event.acceptProposedAction()

        urls = event.mimeData().urls()

        if len(urls) == 0:
            return

        tryItem = self.itemAt(event.pos())

        if tryItem is not None:
            pluginId = tryItem.getPluginId()
        else:
            pluginId = -1

        for url in urls:
            if pluginId >= 0:
                self.host.replace_plugin(pluginId)
                pluginId += 1

                if pluginId > self.host.get_current_plugin_count():
                    pluginId = -1

            filename = url.toLocalFile()

            if not self.host.load_file(filename):
                CustomMessageBox(self, QMessageBox.Critical, self.tr("Error"),
                                 self.tr("Failed to load file"),
                                 self.host.get_last_error(), QMessageBox.Ok, QMessageBox.Ok)

        if tryItem is not None:
            self.host.replace_plugin(self.host.get_max_plugin_number())
            #tryItem.widget.setActive(True, True, True)

    # --------------------------------------------------------------------------------------------------------

    def mousePressEvent(self, event):
        if self.itemAt(event.pos()) is None and self.currentRow() != -1:
            event.accept()
            self.customClearSelection()
            return

        QListWidget.mousePressEvent(self, event)

    def paintEvent(self, event):
        painter = QPainter(self.viewport())
        painter.drawTiledPixmap(0, 0, self.fPixmapWidth, self.height(), self.fPixmapL)
        painter.drawTiledPixmap(self.width()-self.fPixmapWidth, 0, self.fPixmapWidth, self.height(), self.fPixmapR)
        QListWidget.paintEvent(self, event)

    # --------------------------------------------------------------------------------------------------------

    def selectionChanged(self, selected, deselected):
        for index in deselected.indexes():
            item = self.itemFromIndex(index)
            if item is not None:
                item.setSelected(False)

        for index in selected.indexes():
            item = self.itemFromIndex(index)
            if item is not None:
                item.setSelected(True)

        QListWidget.selectionChanged(self, selected, deselected)
class ImageBox(QWidget):
    def __init__(self):
        super(ImageBox, self).__init__()
        self.controlPress = False
        self.img = None
        self.scaledImg = None
        self.point = QPoint(0, 0)
        self.startPos = None
        self.endPos = None
        self.leftClick = False
        self.scale = 0.5
        self.rotateAngle = 0
        self.setWindowTitle("ImageBox")
        # 控件开始捕获键盘,只有控件开始捕获键盘,控件的键盘事件才能收到消息
        self.grabKeyboard()
        LogUtil.d('ImageBox size {}'.format(self.size()))
        # self.setContentsMargins(2, 2, 2, 2)
        # self.setStyleSheet("border:2px solid #f00")

    def setImage(self, imgPath):
        """
        open image file
        :param imgPath: image file path
        :return:
        """
        self.controlPress = False
        self.scale = 0.5
        self.rotateAngle = 0
        self.img = QPixmap(imgPath)
        ow = self.img.width()
        oh = self.img.height()
        boxWidth = self.size().width()
        boxHeight = self.size().height()
        self.scaledImg = self.img.scaled(boxWidth * 2, boxHeight * 2,
                                         Qt.KeepAspectRatio,
                                         Qt.SmoothTransformation)
        scaledWidth = self.scaledImg.width()
        scaledHeight = self.scaledImg.height()
        self.point = QPoint(boxWidth, boxHeight)
        LogUtil.d(
            'setImage image size ({}, {}) box size {} scaledImg size ({}, {})'.
            format(ow, oh, self.size(), scaledWidth, scaledHeight))
        self.update()

    def zoomIn(self):
        if self.scale < PicturePreviewDialog.MAX_SCALE:
            self.scale += 0.2
            self.point = self.point * (self.scale - 0.2) / self.scale
            self.adjustSize()
            self.update()
            LogUtil.d('zoomIn box size {}', self.size())

    def zoomOut(self):
        if self.scale > PicturePreviewDialog.MIN_SCALE:
            self.scale -= 0.1
            self.point = self.point * (self.scale + 0.1) / self.scale
            self.adjustSize()
            self.update()
            LogUtil.d('zoomOut box size {}', self.size())

    def rotateLeft(self):
        self.rotateAngle -= 90
        self.update()

    def rotateRight(self):
        self.rotateAngle += 90
        self.update()

    def paintEvent(self, e):
        """
        receive paint events
        :param e: QPaintEvent
        :return:
        """
        if self.scaledImg:
            painter = QPainter()
            painter.begin(self)
            painter.translate(self.size().width() / 2,
                              self.size().height() / 2)
            painter.rotate(self.rotateAngle)
            painter.translate(-self.size().width() / 2,
                              -self.size().height() / 2)
            painter.scale(self.scale, self.scale)
            painter.translate(-self.scaledImg.width() / 2,
                              -self.scaledImg.height() / 2)
            painter.drawPixmap(self.point, self.scaledImg)
            painter.end()

    def mouseMoveEvent(self, e):
        """
        mouse move events for the widget
        :param e: QMouseEvent
        :return:
        """
        if self.leftClick:
            self.endPos = e.pos() - self.startPos
            self.point = self.point + self.endPos
            self.startPos = e.pos()
            self.repaint()

    def mousePressEvent(self, e):
        """
        mouse press events for the widget
        :param e: QMouseEvent
        :return:
        """
        if e.button() == Qt.LeftButton:
            self.leftClick = True
            self.startPos = e.pos()

    def mouseReleaseEvent(self, e):
        """
        mouse release events for the widget
        :param e: QMouseEvent
        :return:
        """
        if e.button() == Qt.LeftButton:
            self.leftClick = False

    def keyPressEvent(self, e: QKeyEvent):
        LogUtil.d('keyPressEvent', e.key())
        if e.key() == Qt.Key_Control:
            LogUtil.d('Control press')
            self.controlPress = True

    def keyReleaseEvent(self, e: QKeyEvent):
        LogUtil.d('keyReleaseEvent', e.key())
        if e.key() == Qt.Key_Control:
            LogUtil.d('Control release')
            self.controlPress = False

    def wheelEvent(self, e: QtGui.QWheelEvent):
        if self.controlPress:
            # if event.delta() > 0:  # 滚轮上滚,PyQt4
            # This function has been deprecated, use pixelDelta() or angleDelta() instead.
            angle = e.angleDelta() / 8  # 返回QPoint对象,为滚轮转过的数值,单位为1/8度
            LogUtil.d('wheelEvent', e.pos(), e.x(), e.y())
            angleX = angle.x()  # 水平滚过的距离(此处用不上)
            angleY = angle.y()  # 竖直滚过的距离
            step = 0.005
            if self.scale > 1.5:
                step = 0.01
            if angleY > 0:  # 滚轮上滚
                if self.scale < PicturePreviewDialog.MAX_SCALE:
                    self.scale += step
                    self.point = self.point * (self.scale - step) / self.scale
                    self.update()  # 重绘
            elif angleY < 0:  # 滚轮下滚
                if self.scale > PicturePreviewDialog.MIN_SCALE:
                    self.scale -= step
                    self.point = self.point * (self.scale + step) / self.scale
                    self.update()
        LogUtil.d('wheelEvent', e.pos(), e.x(), e.y())
Exemple #55
0
class MandelbrotWidget(QWidget):
    def __init__(self, parent=None):
        super(MandelbrotWidget, self).__init__(parent)

        self.thread = RenderThread()
        self.pixmap = QPixmap()
        self.pixmapOffset = QPoint()
        self.lastDragPos = QPoint()

        self.centerX = DefaultCenterX
        self.centerY = DefaultCenterY
        self.pixmapScale = DefaultScale
        self.curScale = DefaultScale

        self.thread.renderedImage.connect(self.updatePixmap)

        self.setWindowTitle("Mandelbrot")
        self.setCursor(Qt.CrossCursor)
        self.resize(550, 400)

    def paintEvent(self, event):
        painter = QPainter(self)
        painter.fillRect(self.rect(), Qt.black)

        if self.pixmap.isNull():
            painter.setPen(Qt.white)
            painter.drawText(self.rect(), Qt.AlignCenter,
                    "Rendering initial image, please wait...")
            return

        if self.curScale == self.pixmapScale:
            painter.drawPixmap(self.pixmapOffset, self.pixmap)
        else:
            scaleFactor = self.pixmapScale / self.curScale
            newWidth = int(self.pixmap.width() * scaleFactor)
            newHeight = int(self.pixmap.height() * scaleFactor)
            newX = self.pixmapOffset.x() + (self.pixmap.width() - newWidth) / 2
            newY = self.pixmapOffset.y() + (self.pixmap.height() - newHeight) / 2

            painter.save()
            painter.translate(newX, newY)
            painter.scale(scaleFactor, scaleFactor)
            exposed, _ = painter.matrix().inverted()
            exposed = exposed.mapRect(self.rect()).adjusted(-1, -1, 1, 1)
            painter.drawPixmap(exposed, self.pixmap, exposed)
            painter.restore()

        text = "Use mouse wheel or the '+' and '-' keys to zoom. Press and " \
                "hold left mouse button to scroll."
        metrics = painter.fontMetrics()
        textWidth = metrics.width(text)

        painter.setPen(Qt.NoPen)
        painter.setBrush(QColor(0, 0, 0, 127))
        painter.drawRect((self.width() - textWidth) / 2 - 5, 0, textWidth + 10,
                metrics.lineSpacing() + 5)
        painter.setPen(Qt.white)
        painter.drawText((self.width() - textWidth) / 2,
                metrics.leading() + metrics.ascent(), text)

    def resizeEvent(self, event):
        self.thread.render(self.centerX, self.centerY, self.curScale,
                self.size())

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Plus:
            self.zoom(ZoomInFactor)
        elif event.key() == Qt.Key_Minus:
            self.zoom(ZoomOutFactor)
        elif event.key() == Qt.Key_Left:
            self.scroll(-ScrollStep, 0)
        elif event.key() == Qt.Key_Right:
            self.scroll(+ScrollStep, 0)
        elif event.key() == Qt.Key_Down:
            self.scroll(0, -ScrollStep)
        elif event.key() == Qt.Key_Up:
            self.scroll(0, +ScrollStep)
        else:
            super(MandelbrotWidget, self).keyPressEvent(event)

    def wheelEvent(self, event):
        numDegrees = event.angleDelta().y() / 8
        numSteps = numDegrees / 15.0
        self.zoom(pow(ZoomInFactor, numSteps))

    def mousePressEvent(self, event):
        if event.buttons() == Qt.LeftButton:
            self.lastDragPos = QPoint(event.pos())

    def mouseMoveEvent(self, event):
        if event.buttons() & Qt.LeftButton:
            self.pixmapOffset += event.pos() - self.lastDragPos
            self.lastDragPos = QPoint(event.pos())
            self.update()

    def mouseReleaseEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.pixmapOffset += event.pos() - self.lastDragPos
            self.lastDragPos = QPoint()

            deltaX = (self.width() - self.pixmap.width()) / 2 - self.pixmapOffset.x()
            deltaY = (self.height() - self.pixmap.height()) / 2 - self.pixmapOffset.y()
            self.scroll(deltaX, deltaY)

    def updatePixmap(self, image, scaleFactor):
        if not self.lastDragPos.isNull():
            return

        self.pixmap = QPixmap.fromImage(image)
        self.pixmapOffset = QPoint()
        self.lastDragPosition = QPoint()
        self.pixmapScale = scaleFactor
        self.update()

    def zoom(self, zoomFactor):
        self.curScale *= zoomFactor
        self.update()
        self.thread.render(self.centerX, self.centerY, self.curScale,
                self.size())

    def scroll(self, deltaX, deltaY):
        self.centerX += deltaX * self.curScale
        self.centerY += deltaY * self.curScale
        self.update()
        self.thread.render(self.centerX, self.centerY, self.curScale,
                self.size())
Exemple #56
0
    def processUI(self):
        ### remove title bar
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint|QtCore.Qt.WindowStaysOnBottomHint)

        ### background image and Fixed Size
        back_label = QLabel(self)
        back = QPixmap('.\\img\\33_back.png')
        back_label.setPixmap(back)
        self.setFixedSize(back.width(),back.height())
        
        ### close Button
        self.close_Btn = QPushButton('',self)
        self.close_Btn.setIcon(QIcon('.\\img\\close_Btn.png'))
        self.close_Btn.setFixedSize(20,20)
        self.close_Btn.setIconSize(QtCore.QSize(30,30))
        self.close_Btn.move(back.width()-40,20)
        self.close_Btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))

        
        ### GIF set
        self.moviee = QLabel(self)
        self.movie = QtGui.QMovie(".\\img\\Processing.gif")
        self.moviee.setMovie(self.movie)
        self.moviee.setGeometry(50,28,320,150)
        self.movie.start()     

        ### Pause Button
        self.P_btn = QPushButton('',self)
        self.P_btn.setIcon(QIcon('.\\img\\Pause.png'))
        self.P_btn.setIconSize(QtCore.QSize(170,90))
        self.P_btn.setFixedSize(150,70)
        self.P_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.P_btn.move(420,60)

        ### Continue Button
        self.C_btn = QPushButton('',self)
        self.C_btn.setIcon(QIcon('.\\img\\Continue.png'))
        self.C_btn.setIconSize(QtCore.QSize(170,90))
        self.C_btn.setFixedSize(150,70)
        self.C_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.C_btn.move(420,60)

        ### Cancel Button
        self.Can_btn = QPushButton('',self)
        self.Can_btn.setIcon(QIcon('.\\img\\Cancel.png'))
        self.Can_btn.setIconSize(QtCore.QSize(170,90))
        self.Can_btn.setFixedSize(150,70)
        self.Can_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.Can_btn.move(600,60)

        ### Start Button

        self.S_btn = QPushButton('',self)
        self.S_btn.setIcon(QIcon('.\\img\\Start.png'))
        self.S_btn.setIconSize(QtCore.QSize(170,90))
        self.S_btn.setFixedSize(150,70)
        self.S_btn.setCursor(QtGui.QCursor(QtCore.Qt.PointingHandCursor))
        self.S_btn.move(600,60)

        ### hide btn P & S
        self.C_btn.setVisible(False)
        self.S_btn.setVisible(False)

        ### Table Widget
        self.tableWidget = QTableWidget(self)
        self.tableWidget.setFixedSize(760, 370)
        self.tableWidget.move(30, 200)
        self.tableWidget.setColumnCount(3)
        self.tableWidget.setColumnWidth(0, self.tableWidget.width()/5.5)
        self.tableWidget.setColumnWidth(1, self.tableWidget.width()/2.5)
        self.tableWidget.setColumnWidth(2, self.tableWidget.width()/2.5)

        ### Table Widget Label Warning, Notice set
        self.warn = QLabel(self)
        self.warn_img = QPixmap('.\\img\\Warning.png')
        self.Notice = QLabel(self)
        self.Notice_img = QPixmap('.\\img\\Notice.png') 

        ### Btn Clicked
        self.P_btn.clicked.connect(self.P_btn_clicked)
        self.C_btn.clicked.connect(self.C_btn_clicked)
        self.Can_btn.clicked.connect(self.Can_btn_clicked)
        self.S_btn.clicked.connect(self.S_btn_clicked)
        self.close_Btn.clicked.connect(self.close_Btn_clicked)

        self.show()

        ### core thread
        self.gipThread = get_ip_thread(self)
        self.gipThread.gipEvent.connect(self.gipThreadEventHandler)
        self.gipThreadStart()

        self.gregThread = get_registry_thread(self)
        self.gregThread.gregEvent.connect(self.gregThreadEventHandler)
        self.gregThreadStart()

        self.gprocThread = get_proc_thread(self)
        self.gprocThread.gprocEvent.connect(self.gprocThreadEventHandler)
        self.gprocThreadStart()

        self.gfileThread = get_file_thread(self)
        self.gfileThread.gfileEvent.connect(self.gfileThreadEventHandler)
        self.gfileThreadStart()

        ### report thread
        self.reportThread = send_report_thread(self)
        self.reportThread.countEvent.connect(self.reportThreadEventHandler)
        self.reportThreadStart()
Exemple #57
0
class AnimeIndexWindow(QWidget):

    def __init__(self):
        super().__init__()
        anime_bk_pic_path = './source/pic/anime_bk.png'
        search_1_pic_path = './source/pic/next.png'
        search_2_pic_path = './source/pic/next_1.png'
        search_3_pic_path = './source/pic/next_2.png'
        hgzy_font_path = './source/font/HGZYT_CNKI.TTF'
        rem_ico_path = './source/pic/rem.png'
        self.pix = QPixmap(anime_bk_pic_path)
        self.resize(self.pix.width(),self.pix.height())
        self.pix = self.pix.scaled(int(self.pix.width()), int(self.pix.height()))
        self.setMask(self.pix.mask())
        screen = QDesktopWidget().screenGeometry()
        self.move((screen.width() - self.pix.width()) / 2, (screen.height() - self.pix.height()) / 2)
        self.setWindowFlags(Qt.FramelessWindowHint)  # | QtCore.Qt.WindowStaysOnTopHint
        self.setAttribute(Qt.WA_TranslucentBackground) # 窗口透明抗锯齿
        rem_icon = QIcon(QPixmap(rem_ico_path))
        self.setWindowIcon(rem_icon)
        self.m_DragPosition = None
        fontId = QFontDatabase.addApplicationFont(hgzy_font_path)
        fontName = QFontDatabase.applicationFontFamilies(fontId)[0]
        self.animelist = QDListWidget(self)
        self.animelist.setObjectName('AnimeListWidget')
        self.animelist.setGeometry(17,280,self.pix.width()-34,self.pix.height()-280-50)
        self.animelist.setStyleSheet('#AnimeListWidget{background:transparent;}')
        self.animelist.setFont(QFont(fontName,15,QFont.Light))
        self.animelist.setIconSize(QSize(100,100))
        self.InitData()
        ver = Version()
        self.version = QDLabel(self, ver.cur_link)
        self.version.setObjectName('VersionLabel')
        self.version.setGeometry(15, self.pix.height() - 75, 600, 100)
        self.version.setText('当前数据库版本号:' + ver.cur_version)
        if ver.judge_version():
            self.version.setToolTip('数据库为最新版本,无需更新')
        else:
            self.version.setToolTip('数据库版本已过期,请自行下载新数据库.(双击获取下载链接)')
        self.version.setFont(QFont(fontName,10,QFont.Light))
        self.search = QPushButton(self)
        self.search.setObjectName('Search')
        self.search.setStyleSheet("#Search{border-image: url(%s)}"
                                  "#Search:hover{border-image: url(%s)}" 
                                  "#Search:pressed{border-image: url(%s)}"
                                  % (search_1_pic_path,search_2_pic_path,search_3_pic_path))
        self.search.setGeometry(self.pix.width()-self.search.width(),self.pix.height()-self.search.height()-10
                                ,self.search.width()-20,self.search.height())
        self.choose = Choose(self.x()+self.width(),self.y()+self.height())
        self.choose_show = False
        self.choose_info = {}
        self.search.clicked.connect(self.SearchBt)
        self.detail = Detail(self.x(),self.y())
        self.detail_show = False
        self.animelist.itemDoubleClicked.connect(self.DetailBt)
        self.animelist.installEventFilter(self)
        self.rightclick = Rightclick()
        self.animeshow = False

    def paintEvent(self, event):
        paint = QPainter(self)
        paint.drawPixmap(0,0,self.pix.width(),self.pix.height(),self.pix)

    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.m_drag = True
            self.m_DragPosition = event.globalPos() - self.pos()
            if self.choose_show == True:
                self.choose.raise_()
            if self.detail_show == True:
                self.detail.raise_()
            event.accept()
        elif event.button() == Qt.RightButton:
            if self.detail_show == True:
                self.detail.close()
                self.detail_show = False
            if self.choose_show == True:
                self.choose.close()
                self.choose_show = False
            self.hide()
            self.animeshow = False
            event.accept()

    def mouseMoveEvent(self, event):
        if Qt.LeftButton and self.m_drag:
            self.move(event.globalPos() - self.m_DragPosition)
            self.choose.move(self.x() + self.width(), self.y()+self.height()-self.choose.pix.height())
            self.detail.move(self.x()-self.detail.pix.width(),self.y())
            event.accept()

    def mouseReleaseEvent(self, event):
        self.m_drag = False

    def closeEvent(self, event):
        self.detail.close()
        self.detail_show = False
        self.choose.close()
        self.choose_show = False
        self.animeshow = False

    def InitData(self):
        dbsql = AnimeData()
        self.infos = dbsql.SqliteInfoSelect()
        self.animelist.clear()
        if self.infos:
            for info in self.infos:
                self.animelist.addItem(QListWidgetItem(QIcon('./source/pic/bili.png'), info[0]))

    def ChooseData(self):
        self.choose_info = {}
        title = self.choose.titletext.text()
        if title != '':
            self.choose_info['title'] = title
        order = self.choose.ordertext.text()
        if order != '':
            self.choose_info['order'] = int(order)
        index_show = ''
        index_season = self.choose.animecombo_season.currentText()
        index_year = self.choose.timetext.text()
        if index_year != '':
            index_show += index_year + '年'
        if index_season != '不筛选':
            index_show += index_season
        if index_show != '':
            self.choose_info['index_show'] = index_show
        novip = self.choose.animevip.checkState()
        if novip == 1:
            self.choose_info['vip'] = 1
        elif novip == 2:
            self.choose_info['vip'] = 0
        finish = self.choose.animefinish.checkState()
        if finish == 1:
            self.choose_info['finish'] = 0
        elif finish == 2:
            self.choose_info['finish'] = 1
        tags = []
        for i in range(3):
            tag = self.choose.animetags[i].currentText()
            if tag != '不筛选':
                tags.append(tag)
        if tags != []:
            self.choose_info['tag'] = tags

    def ShowData(self):
        dbsql = AnimeData()
        self.infos = dbsql.SqliteInfoSearch(self.choose_info)
        self.animelist.clear()
        if self.infos:
            for info in self.infos:
                self.animelist.addItem(QListWidgetItem(QIcon('./source/pic/bili.png'), info[0]))
        else:
            self.InitData()

    def SearchBt(self):
        if self.choose_show == False:
            self.choose.show()
            self.choose_show = True
        else:
            self.choose.close()
            self.ChooseData()
            self.ShowData()
            self.choose_show = False

    def GetDetail(self,title):
        dbsql = AnimeData()
        infos = dbsql.SqliteInfoSearch({'title':title})
        resinfo = []
        if infos:
            for info in infos:
                resinfo.append(info[0])
                resinfo.append(info[1])
                resinfo.append(info[2])
                resinfo.append(info[3])
                resinfo.append(info[4])
                resinfo.append(info[5])
                resinfo.append(info[6])
                resinfo.append(info[7])
        return resinfo

    def DelDetail(self):
        self.detail.animetitle.setParent(None)
        self.detail.animeintro.setParent(None)
        self.detail.animetags.setParent(None)
        self.detail.animeorder.setParent(None)
        self.detail.animeindexshow.setParent(None)
        self.detail.animeindexshowtext.setParent(None)
        self.detail.animetagstext.setParent(None)
        self.detail.animeordertext.setParent(None)
        self.detail.animetitletext.setParent(None)
        self.detail.animetagstext.setParent(None)
        self.detail.pic_label.setParent(None)

    def DetailBt(self):
        if self.detail_show == False:
            info = self.GetDetail(self.animelist.currentItem().text())
            self.animelist.index = self.animelist.currentIndex()
            self.detail.setInfo(info)
            self.detail.show()
            self.detail_show = True
        elif self.detail_show == True and self.animelist.index != self.animelist.currentIndex():
            self.detail.close()
            self.DelDetail()
            info = self.GetDetail(self.animelist.currentItem().text())
            self.animelist.index = self.animelist.currentIndex()
            self.detail.setInfo(info)
            self.detail.show()
        else:
            self.detail.close()
            self.DelDetail()
            self.animelist.index = -1
            self.detail_show = False
Exemple #58
0
class TIFgrabGUI(QMainWindow):
    def __init__(self, capcard_full, capcard_short, parent=None):
        super(TIFgrabGUI, self).__init__(parent)

        self.cleanup_side_captures()

        # set up GUI from designer-made layout
        self.ui = Ui_TIFgrabMW()
        self.ui.setupUi(self)

        # Temporarily? hard code the device definition
        self.sys_device = "/dev/video0"
        target_cam_serialnum = capcard_short[self.sys_device]
        target_cam_label = capcard_full[self.sys_device]

        print("Targeting camera device ", self.sys_device)
        print("Labeling as ", target_cam_label)

        self.picframe_width = self.ui.ThumbnailView.frameGeometry().width()
        self.picframe_height = self.ui.ThumbnailView.frameGeometry().height()

        #for device_name in QCamera.availableDevices():
        #    print("Looking at", device_name)
        #    if (device_name == target_cam_dev):
        #self.camera_device = device_name
        #        self.camera_device = target_cam_dev.encode('utf-8')
        self.camera_device = self.sys_device.encode('utf-8')
        self.camera_label = target_cam_label
        self.ui.Sourcename_Disp.setText(self.camera_label)
        self.cam1 = QCamera(self.camera_device)

        #        self.cam1_info = QCameraInfo(self.cam1)
        #        self.cam1_nonhuman_name = self.cam1_info.deviceName()
        #        print("Description= ",self.cam1_info.description())
        #        print("Nonhuman= ", self.cam1_info.deviceName())

        self.cam1_capture = QCameraImageCapture(self.cam1)
        print("Still image capture from device %s, capture card %s)" %
              (self.camera_device, self.camera_label))

        self.cam1.setCaptureMode(QCamera.CaptureStillImage)
        self.cam1_capture.setCaptureDestination(
            QCameraImageCapture.CaptureToBuffer)

        #### Assign a startup image ####
        # print('Displaying startup image')
        #self.tifimage = QPixmap('/home/scotty/src/GrabDev/tasman_island_lighthouse.tif', 'tif')
        self.tifimage = QPixmap('./tasman_island_lighthouse.tif', 'tif')
        self.thumb = self.tifimage.scaled(self.picframe_width,
                                          self.picframe_height,
                                          Qt.KeepAspectRatio)
        self.ui.ThumbnailView.setScaledContents(True)
        self.ui.ThumbnailView.setPixmap(self.thumb)

        # Set event handlers
        self.ui.grabButton.clicked.connect(self.on_grab_button)
        self.ui.TimerRadio.toggled.connect(self.on_timerradio_button)
        self.ui.quitButton.clicked.connect(self.on_quit_button)
        self.cam1_capture.imageCaptured.connect(self.on_image_captured)

        self.ui.FilenameDisp.setText("No image captured")
        self.cam1.start()

    def on_grab_button(self):
        self.cam1.searchAndLock()
        self.capture_time = systime()
        self.capture_name = "./" + self.camera_label + "_" + self.capture_time + ".tif"
        self.cam1_capture.capture()
        self.cam1.unlock()

    def on_image_captured(self, id, captured_image):
        # The image to be displayed on screen
        self.captured2pixmap = QPixmap()
        success = self.captured2pixmap.convertFromImage(captured_image)

        self.list_pic_stats()

        self.thumb_scaled = self.captured2pixmap.scaled(
            self.picframe_width, self.picframe_height, Qt.KeepAspectRatio)
        self.ui.ThumbnailView.setScaledContents(True)
        self.ui.ThumbnailView.setSizePolicy(QSizePolicy.Ignored,
                                            QSizePolicy.Ignored)
        self.ui.FilenameDisp.setText(self.capture_name)
        self.ui.ThumbnailView.setPixmap(self.thumb_scaled)

        # The image to be saved to file as TIF
        # First confirm that the destination folder exists, create if it doesn't.
        self.manage_daily_folder()
        self.capture_fullpath = self.outdirname + "/" + self.capture_name
        outimage = QPixmap()
        outimage.convertFromImage(captured_image)
        outfile = QFile(self.capture_fullpath)
        outfile.open(QIODevice.WriteOnly)
        outimage.save(outfile, "TIFF")
        outfile.close()

    def list_pic_stats(self):

        sizestr = ("Size: %d X %d") % (self.captured2pixmap.width(),
                                       self.captured2pixmap.height())
        depthstr = ("Depth:%s ") % (self.captured2pixmap.depth())
        bmapstr = ("Is Bitmap?:%s") % (self.captured2pixmap.isQBitmap())
        alphastr = ("Has alpha?:%s") % (self.captured2pixmap.hasAlphaChannel())
        self.ui.PicStats.setPlainText(self.sys_device)
        self.ui.PicStats.appendPlainText(sizestr)
        self.ui.PicStats.appendPlainText(depthstr)

    def on_timerradio_button(self):
        if self.ui.TimerRadio.isChecked():
            self.ui.grabButton.setEnabled(False)
            self.add_timer_groupbox()
        if not self.ui.TimerRadio.isChecked():
            if self.timergb:
                self.timergb.grab_timer.stop()
                self.ui.grabButton.setEnabled(True)
                self.timergb.deleteLater()
                self.timergb = None

    def add_timer_groupbox(self):

        self.timergb = TimerGB(75, 100)
        self.timergb.grab_timeout.connect(self.on_grab_button)
        self.timergb.gb_closed.connect(self.on_timergb_closed)
        self.timergb.show()

    def on_timergb_closed(self):
        if self.ui.TimerRadio.isChecked():
            if self.timergb:
                #     self.grab_timer.stop()
                self.timergb.deleteLater()
                self.timergb = None
                self.ui.TimerRadio.setChecked(False)
                self.ui.grabButton.setEnabled(True)

    def cleanup_side_captures(self):
        # Remove jpgs saved by QCameraImageCapture in default location
        defaultlocation = "/home/jason/Pictures"
        print("Removing all jpgs from ", defaultlocation)
        fullpath = ("%s/*.jpg") % (defaultlocation)
        for filename in glob(fullpath):
            print("Removing ", filename)
            os.remove(filename)

    def on_quit_button(self):
        self.cam1.stop()
        try:
            if self.timergb:
                self.timergb.deleteLater()
                self.timergb = None
        except:
            pass

        self.cleanup_side_captures()

        QCoreApplication.exit()

    def sigint_handler(*args):
        try:
            if self.timergb:
                self.timergb.deleteLater()
                self.timergb = None
        except:
            pass
        sys.stderr.write('\r')
        QApplication.quit()

    def do_init(ini_filename):
        cf = ConfigParser()
        cf.read(ini_filename)

    def manage_daily_folder(self):
        # Tests for existence of folder to hold the date's captures.
        # If folder doesn't exist, creates it.
        today = sysdate()

        self.outdirname = "/data/capture_" + today
        if not os.path.exists(self.outdirname):
            os.makedirs(self.outdirname)
class QtVideoMockup(AbstractVideoDevice):

    def __init__(self, name):
        AbstractVideoDevice.__init__(self, name)
        self.force_update = None
        self.image_type = None
        self.image = None

    def init(self):
        current_path = os.path.dirname(os.path.abspath(__file__)).split(os.sep)
        current_path = os.path.join(*current_path[1:-2])

        default_image_path = "/" + current_path + "/test/fakeimg.jpg"
        image_path = self.getProperty("file_name", default_image_path)

        self.image = QPixmap(image_path)
        self.image_dimensions = (self.image.width(), self.image.height())
        self.painter = QPainter(self.image)

        custom_pen = QPen(Qt.SolidLine)
        custom_pen.setColor(Qt.black)
        custom_pen.setWidth(1)
        self.painter.setPen(custom_pen)

        custom_brush = QBrush(Qt.SolidPattern)
        custom_brush.setColor(Qt.lightGray)
        self.painter.setBrush(custom_brush)

        self.setIsReady(True)
        AbstractVideoDevice.init(self)

    def get_new_image(self):
        self.painter.drawRect(self.image.width() - 75, self.image.height() - 30, 70, 20)
        self.painter.drawText(
            self.image.width() - 70, self.image.height() - 15, time.strftime("%H:%M:%S")
        )
        self.emit("imageReceived", self.image)

    def save_snapshot(self, filename, image_type="PNG"):
        qimage = QImage(self.image)
        qimage.save(filename, image_type)

    def get_snapshot(self, bw=None, return_as_array=None):
        qimage = QImage(self.image)
        if return_as_array:
            qimage = qimage.convertToFormat(4)
            ptr = qimage.bits()
            ptr.setsize(qimage.byteCount())

            image_array = np.array(ptr).reshape(qimage.height(), qimage.width(), 4)
            if bw:
                return np.dot(image_array[..., :3], [0.299, 0.587, 0.144])
            else:
                return image_array
        else:
            if bw:
                return qimage.convertToFormat(QImage.Format_Mono)
            else:
                return qimage

    def get_contrast(self):
        return 34

    def set_contrast(self, contrast_value):
        return

    def get_brightness(self):
        return 54

    def set_brightness(self, brightness_value):
        return

    def get_gain(self):
        return 32

    def set_gain(self, gain_value):
        return

    def get_gamma(self):
        return 22

    def set_gamma(self, gamma_value):
        return

    def get_exposure_time(self):
        return 0.23

    def get_video_live(self):
        return True

    def get_raw_image_size(self):
        return list(self.image_dimensions)
Exemple #60
0
    def __init__(self):
        super(App, self).__init__()

        config = GetConfig()

        self.ui = Ui_mainWindow()
        self.QtWidgets = QtWidgets
        self.QtGui = QtGui

        self.ui.setupUi(self)

        self.ui.tabWidget.setCurrentIndex(0)

        self.show()

        logo = QPixmap(config.logo)
        self.ui.logoView.setPixmap(logo)
        self.ui.logoView.resize(logo.width(), logo.height())

        home_img = QPixmap(config.img)
        self.ui.imageView.setPixmap(home_img)
        self.ui.imageView.resize(350, 220)

        self.setWindowTitle(' ')
        self.left = config.left
        self.top = config.top
        self.resize(QtCore.QSize(config.width, config.height))
        self.height = config.height

        self.ui.HeaderMenu.setText("OpenFOAM")

        self.ui.appsFullscreen.clicked.connect(self.apps_fullscreen)
        self.ui.appsFullscreen_back.clicked.connect(self.apps_fullscreen_back)
        self.ui.appsFullscreen_back.hide()

        self.ui.openfoamButton.clicked.connect(self.openfoam_clicked)
        self.ui.patoButton.clicked.connect(self.pato_clicked)
        self.ui.pumaButton.clicked.connect(self.puma_clicked)
        self.ui.oplrButton.clicked.connect(self.dplr_clicked)

        # OpenFOAM BUTTONS
        self.ui.documentationButton.clicked.connect(self.documentation_clicked)
        self.ui.installButton.clicked.connect(self.install_clicked)
        self.ui.testButton.clicked.connect(self.test_clicked)
        self.ui.runButton.clicked.connect(self.run_clicked)

        self.ui.installListView.hide()
        self.ui.startInstallButton.hide()

        self.selectedMenu = 'openfoam'
        self.documentation_clicked()

        self.ui.openfoamButton.setStyleSheet("""
                   QPushButton:active{ background-color: #c1c1c1; }
               """)
        self.ui.documentationButton.setStyleSheet("""
                   QPushButton:active{ background-color: #c1c1c1; }
               """)
        self.ui.appsGroupBox.setStyleSheet("""
                   QPushButton:focus{ background-color: #c1c1c1; }
                   QPushButton:hover{ background-color: white; }
               """)
        self.ui.appsOpenfoamQframe.setStyleSheet("""
                   QPushButton:focus{ background-color: #a1a1a1; }
                   QPushButton:hover{ background-color: white; }
               """)