Exemplo n.º 1
0
    def open_file(self):
        path, _ = QFileDialog.getOpenFileName(
            self, "Open file", "",
            "PNG image files (*.png); JPEG image files (*jpg); All files (*.*)"
        )

        if path:
            pixmap = QPixmap()
            pixmap.load(path)

            iw = pixmap.width()
            ih = pixmap.height()
            cw, ch = CANVAS_DIMENSIONS

            if iw / cw < ih / ch:
                pixmap = pixmap.scaledToWidth(cw)
                hoff = (pixmap.height() - ch) // 2
                pixmap = pixmap.copy(
                    QRect(QPoint(0, hoff), QPoint(cw,
                                                  pixmap.height() - hoff)))

            elif iw / cw > ih / ch:
                pixmap = pixmap.scaledToHeight(ch)
                woff = (pixmap.width() - cw) // 2
                pixmap = pixmap.copy(
                    QRect(QPoint(woff, 0), QPoint(pixmap.width() - woff, ch)))

            self.canvas.setPixmap(pixmap)
Exemplo n.º 2
0
        def ret():
            files = os.listdir("./Images/roi")
            start = time.time()
            if type == "orb":
                f = self.orb
            elif type == "sift":
                f = self.sift
            elif type == "surf":
                f = self.surf
            res = 99999999
            name = None
            for i in files:
                img = cv2.imread("./Images/roi/" + i)
                #img = utils.hand2(img)
                # cv2.imwrite("pipei.jpg", img)
                # img = cv2.imread("pipei.jpg")

                res_ = f(img)
                res_ = res_ if res_ is not None else 9999999
                name = name if res_ > res else i
                res = res if res_ > res else res_
            if name is not None:
                stop = time.time()
                runtime = stop - start
                ret = QPixmap()
                ret.load('./Images/' + name)
                self.ui.label_2.setPixmap(ret)
                self.ui.label_2.setScaledContents(True)
                rname = re.sub(r'[0-9].*$', "", name)
                if rname in self.kv.keys():
                    rname = self.kv[rname]
                # QMessageBox.about(self, "掌纹主人的名字为:", rname)
                QMessageBox.about(
                    self, "输出", "掌纹主人的名字为: " + rname + '\n耗时:' +
                    '{0:.2f}'.format(runtime) + '秒')
class QToolWindowDropTarget(QWidget):
    def __init__(self, imagePath, areaReference):
        super().__init__(None)
        self.pixmap = QPixmap()
        self.areaReference = areaReference

        self.setWindowFlags(QtCore.Qt.Tool | QtCore.Qt.FramelessWindowHint
                            | QtCore.Qt.WindowStaysOnTopHint)
        self.setAttribute(QtCore.Qt.WA_TranslucentBackground)
        self.setAttribute(QtCore.Qt.WA_ShowWithoutActivating)

        if QtCore.QFile.exists(imagePath):
            self.pixmap.load(imagePath)
        else:
            qWarning(imagePath + " not found.")
        self.setFixedSize(self.pixmap.size())

    def __del__(self):
        if self.pixmap:
            del self.pixmap

    def target(self):
        return self.areaReference

    def paintEvent(self, paintEvent):
        painter = QPainter(self)
        painter.drawPixmap(0, 0, self.pixmap)
Exemplo n.º 4
0
 def initializeWithRowID(self, rowid, deckname):
     self.current_rowid = rowid
     self.deckname = deckname
     
     self.clearDrawView()
     pixmap = QPixmap()
     self.imageView.setPixmap(pixmap)
     
     result = self.dbAdapter.selectDeckItem(rowid)
     self.dataset = result
     
     svgsavepath = path.join(self.deckpath, result["svg_filename"])
     self.svg_filename = result["svg_filename"]
     self.freehandDrawWidget.loadView(svgsavepath)
     self.nameLine.setText(result["name"])
     self.wordLine.setText(result["word"])
     self.phoneticalLine.setText(result["phonetical"])
     self.translationLine.setText(result["translation"])
     
     if 'image' in result and result['image']:
         pixmap = QPixmap()
         pixmap.load(path.join(self.deckpath, result['image']))
         pixmap = pixmap.scaled(QSize(600, 300), Qt.KeepAspectRatio)
         self.imageView.setPixmap(pixmap)
         self.imageView.show()
     
     self.audioListWidget.initAudioListWidget(self.dbAdapter, self.deckpath, self.current_rowid)
     self.audioListWidget.getAudioFromDB(self.current_rowid)
Exemplo n.º 5
0
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 600, 400)
        self.setWindowTitle('Вторая программа')

        self.btn = QPushButton('111', self)
        self.btn.move(120, 340)
        self.btn.clicked.connect(self.run)

        self.file_name = QLineEdit(self)
        self.file_name.move(140, 20)
        print("test")
        print("test2")
        self.pixmap = QPixmap()
        self.image = QLabel(self)
        self.image.move(1280, 260)
        self.image.resize(250, 250)
        self.image.setPixmap(self.pixmap)

    def run(self):
        self.pixmap.load(self.file_name.text())
        self.image.setPixmap(self.pixmap)
Exemplo n.º 6
0
    def open_file(self):
        """
        Open image file for editing, scaling the smaller dimension and cropping the remainder.
        :return:
        """
        path, _ = QFileDialog.getOpenFileName(
            self, "Open file", "",
            "PNG image files (*.png); JPEG image files (*jpg); All files (*.*)"
        )

        if path:
            pixmap = QPixmap()
            pixmap.load(path)

            # We need to crop down to the size of our canvas. Get the size of the loaded image.
            iw = pixmap.width()
            ih = pixmap.height()

            # Get the size of the space we're filling.
            cw, ch = CANVAS_DIMENSIONS

            if iw / cw < ih / ch:  # The height is relatively bigger than the width.
                pixmap = pixmap.scaledToWidth(cw)
                hoff = (pixmap.height() - ch) // 2
                pixmap = pixmap.copy(
                    QRect(QPoint(0, hoff), QPoint(cw,
                                                  pixmap.height() - hoff)))

            elif iw / cw > ih / ch:  # The height is relatively bigger than the width.
                pixmap = pixmap.scaledToHeight(ch)
                woff = (pixmap.width() - cw) // 2
                pixmap = pixmap.copy(
                    QRect(QPoint(woff, 0), QPoint(pixmap.width() - woff, ch)))
            self.imagefilePath = path  # for the opened sketch files
            self.ui.Canvas.setPixmap(pixmap)
Exemplo n.º 7
0
    def clearance(self, fn, args):
        if fn == 'select':
            self.selectImg(args[0], args[1], args[2], args[3], args[4],
                           args[5], args[6], args[7])
            self.alphaChanger(args[8], args[9], args[10])
        elif fn == 'add':
            self.addImg(args[0], args[1], args[2], args[3], args[4], args[5],
                        args[6])
        elif fn == 'delete':
            self.deleteImg(args[0])
        elif fn == 'search':
            file_path = self.findImg()[0]
            if len(file_path) > 0:
                args[0].setText(file_path)

                pixmap = QPixmap()
                pixmap.load(file_path)
                fit_pixmap = pixmap.scaled(args[1].size(), Qt.KeepAspectRatio,
                                           Qt.FastTransformation)
                args[1].setPixmap(fit_pixmap)

                rvfile_path = file_path[::-1]
                file = rvfile_path.split('.')[1]
                file = file.split('/')[0]
                args[2].setText(file[::-1])
        elif fn == 'paint':
            self.myPalette(args[0])
        elif fn == 'slider':
            self.alphaChanger(args[0], args[1], args[2])
Exemplo n.º 8
0
    def generate_preview(self):

        if self.doc:
            try:
                self.preview.clear()
                page = self.ui.spinPreview.value()
                doc_hash = hashlib.md5(self.doc.path).hexdigest()
                tmp_pdf_file = os.path.abspath(
                    os.path.join('./tmp',
                                 doc_hash + '-{}'.format(page) + '.pdf'))
                tmp_img_file = os.path.abspath(
                    os.path.join('./tmp',
                                 doc_hash + '-{}'.format(page) + '.png'))
                if not os.path.exists(tmp_pdf_file):
                    shutil.copy(self.doc.path, tmp_pdf_file)
                if not os.path.exists(tmp_img_file):
                    img = Image(filename=tmp_pdf_file + '[{}]'.format(page))
                    img.save(filename=tmp_img_file)
                pixmap = QPixmap()
                pixmap.load(tmp_img_file)
                self.preview.addPixmap(pixmap)
                self.generated_preview_files.add(tmp_pdf_file)
                self.generated_preview_files.add(tmp_img_file)
            except Exception as ex:
                QMessageBox.warning(
                    self, 'Error!',
                    'Could not generate preview: {}'.format(ex.message))
Exemplo n.º 9
0
 def initPeople():
     self.peopleList = []
     image = QPixmap()
     image.load("1.png")
     image2 = QPixmap()
     image2.load("2.png")
     r = self.peopleRadius * self.sizePerPoint
     for i in range(len(people_list)):
         p = people_list[i]
         label = QLabel(self)
         px = (p[1] - self.peopleRadius) * self.sizePerPoint + self.paintX0
         py = (p[0] - self.peopleRadius) * self.sizePerPoint + self.paintY0
         label.setGeometry(px, py, self.sizePerPoint * self.peopleRadius * 2,
                           self.sizePerPoint * self.peopleRadius * 2)
         if i < bound:
             label.setPixmap(image2)
             pType = 0
         else:
             label.setPixmap(image)
             pType = 1
         label.setScaledContents(True)
         path = QPolygonF()
         path << QPointF(px + r, py + r)
         self.peopleList.append([label, path, pType])
     self.arriveList = []
Exemplo n.º 10
0
class Hand:
    def __init__(self):
        self.userHands = {
            'rock': 'image/rock.png',
            'paper': 'image/paper.png',
            'scissors': 'image/scissors.png'
        }
        self.pcHands = {
            'rock': 'image/reversedRock.png',
            'paper': 'image/reversedPaper.png',
            'scissors': 'image/reversedScissors.png'
        }
        self.userHand = QPixmap()
        self.pcHand = QPixmap()

    def randomPcHand(self):
        return random.choice(list(self.pcHands.keys()))

    def getPcHand(self, currentPcHand):
        self.pcHand.load(self.pcHands[currentPcHand])
        self.pcHand = self.pcHand.scaled(250, 250)
        return self.pcHand

    def getUserHand(self, hand):
        self.userHand.load(self.userHands[hand])
        self.userHand = self.userHand.scaled(250, 250)
        return self.userHand
Exemplo n.º 11
0
class Photo(QWidget):
    def __init__(self, parent=None, photo=None, acc=None):
        QWidget.__init__(self, parent)
        self.acc = acc

        if photo == None:
            self.pixmap = QPixmap()
            self.pixmap.load('./src/sheep_icon.png')
            labelImg = QLabel()
            myPixmap = self.pixmap.scaled(150, 150, Qt.KeepAspectRatio,
                                          Qt.FastTransformation)
            labelImg.setPixmap(myPixmap)
        else:
            self.pixmap = QPixmap()
            self.pixmap.loadFromData(photo.content)
            labelImg = QLabel()
            myPixmap = self.pixmap.scaled(150, 150, Qt.KeepAspectRatio,
                                          Qt.FastTransformation)
            labelImg.setPixmap(myPixmap)

        layout = QHBoxLayout()
        layout.addWidget(labelImg)
        layout.addWidget(QLabel(acc.name))
        layout.addWidget(QLabel(acc.last_name))

        self.setLayout(layout)

    def mouseDoubleClickEvent(self, QMouseEvent):
        ChangeAvatar(self, self.acc.session, self.acc.token)
Exemplo n.º 12
0
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setGeometry(100, 100, 1000, 900)
        self.setWindowTitle('15_2')

        self.btn = QPushButton('Вывести картинку', self)
        self.btn.move(20, 20)
        self.btn.clicked.connect(self.run)

        self.file_name = QLineEdit(self)
        self.file_name.move(150, 20)

        self.pixmap = QPixmap()
        self.image = QLabel(self)
        self.image.move(80, 60)
        self.image.resize(950, 750)
        self.image.setPixmap(self.pixmap)

    def run(self):
        self.pixmap.load(self.file_name.text())
        self.image.setPixmap(self.pixmap)

        self.image.resize(self.pixmap.width(), self.pixmap.height())
Exemplo n.º 13
0
    def updateDataLayout(self):

        user_path = '../user_image/'

        if self.login_start == True:
            user_name = self.user_image_name + '.png'
        else:
            user_name = "Not_LOGIN" + '.png'

        pixmap = QPixmap()
        pixmap.load(user_path + user_name)
        pixmap_resize = pixmap.scaled(self.size().width() / 16 * 9 / 3,
                                      self.size().width() / 16 * 9 / 3,
                                      Qt.KeepAspectRatio)

        self.user_widget.setPixmap(pixmap_resize)

        item_path = '../item_image/'
        if self.cell_clicked == True:
            item_name = self.item_image_name + '.jpg'
        else:
            item_name = "Not_LOGIN" + '.png'

        pixmap = QPixmap()
        pixmap.load(item_path + item_name)
        pixmap_resize = pixmap.scaled(self.size().width() / 16 * 9 / 3,
                                      self.size().width() / 16 * 9 / 3,
                                      Qt.KeepAspectRatio)

        self.item_widget.setPixmap(pixmap_resize)
Exemplo n.º 14
0
    def setSrc(self, src):
        src = str(src)
        if 'http' in src or 'https' in src:
            cacheList = os.listdir(cacheFolder)

            name = makeMd5(src)
            localSrc = cacheFolder + '/' + name
            if name in cacheList:
                self.setSrc(localSrc)
                self.src = localSrc
                return

            self.loadImg(src, name)
        else:
            self.src = src
            pix = QPixmap(src)
            pix.load(src)
            pix = pix.scaled(self.width, self.height)
            # mask需要与pix是相同大小。
            if self.pixMask:
                mask = QPixmap(self.pixMask)
                mask = mask.scaled(self.width, self.height)
                pix.setMask(mask.createHeuristicMask())

            self.setPixmap(pix)
Exemplo n.º 15
0
    async def loadImg(self, src, name):
        try:
            async with aiohttp.ClientSession() as session:
                async with session.get(src, headers=headers,
                                       timeout=60) as response:
                    if response.status == 200:
                        image_content = await response.read()
                    else:
                        raise aiohttp.ClientError()
        except Exception as e:
            print(e)
            return

        width = self.width
        height = self.height

        pic = QPixmap()
        pic.loadFromData(image_content)
        localSrc = cacheFolder + '/' + name
        pic.save(localSrc, 'jpg')
        pic = pic.scaled(width, height)

        self.src = localSrc

        # 上遮罩。
        if self.pixMask:
            mask = QPixmap()
            mask.load(self.pixMask)
            mask = mask.scaled(width, height)

            pic.setMask(mask.createHeuristicMask())

        self.setPixmap(pic)
Exemplo n.º 16
0
class LabelWithOkCancelIcon(QWidget):
    """
    Displays small icon with ok/cancel icon and a text to the right.
    """
    def __init__(self, parent: QWidget = None):
        super(LabelWithOkCancelIcon, self).__init__(parent)
        self.layout = QHBoxLayout()
        self.layout.setSpacing(2)
        self.layout.setContentsMargins(2, 2, 2, 2)
        self.setLayout(self.layout)
        self.icon_label = QLabel(self)
        self.label = QLabel(self)
        self.layout.addWidget(self.icon_label)
        self.layout.addWidget(self.label)
        self.layout.addStretch()
        self.pixmap = QPixmap()
        self._ok_status = False

    def set_ok_status(self, ok_status: bool):
        self._ok_status = ok_status
        if ok_status:
            self.pixmap.load('img/ok_icon.png')
        else:
            self.pixmap.load('img/cancel_icon.png')
        self.icon_label.setPixmap(self.pixmap.scaled(32, 32))

    def ok_status(self) -> bool:
        return self._ok_status

    def set_text(self, text: str):
        self.label.setText(text)

    def text(self) -> str:
        return str(self.label.text())
Exemplo n.º 17
0
class gameWidget(QWidget):
	#classe de l'aire d'affichage
	qp = None # Q painter
	brush = None # Q brush
	background_pm = None # pixmap pour le background
	game = None

	def __init__(self, parent, game):
		super().__init__(parent)

		self.qp = QPainter()
		self.game = game

		self.background_pm = QPixmap()
		self.background_pm.load(IMAGEPATH_BACKGROUND)
		#self.background_pm = QPixmap()
		#self.brush = QBrush(Qt.SolidPattern)
	
		self.setGeometry(0, 0, 100, 100)
		#self.resize(WINDOW_WIDTH, WINDOW_HEIGHT)
		self.resize(GAME_AREA_WIDTH, GAME_AREA_HEIGHT)
		self.move(300, 300)
		self.show()

	def paintEvent(self, event):
		self.qp.begin(self)
		#self.qp.setBrush(self.brush)
		#afficher le background
		#self.qp.drawRect(0, 0, 10000, 10000)
		self.qp.drawPixmap(0,0, GAME_AREA_WIDTH, GAME_AREA_HEIGHT,self.background_pm)
		#afficher les objets
		for objet in self.game.objectsList:
			objet.draw(self.qp)
		# ___
		self.qp.end()
Exemplo n.º 18
0
class Example(QWidget):

    def __init__(self):
        super().__init__()
        self.cars = ['car2.png', 'car3.png', 'car4.png']
        self.current = 'car2.png'
        self.initUI()

    def initUI(self):
        self.setGeometry(300, 300, 300, 300)
        self.setWindowTitle('Машинка')

        self.pixmap = QPixmap(self.cars[0])

        self.lbl = QLabel(self)
        self.lbl.setPixmap(self.pixmap)

        self.show()

    def mouseMoveEvent(self, event):
        if (event.x() in range(0, 250) and event.y() in range(0, 250)):
            self.lbl.move(event.x(), event.y())

    def keyPressEvent(self, event):
        if event.key() == Qt.Key_Space:
            tmp = copy.copy(self.cars)
            tmp.remove(self.current)
            self.current = random.choice(tmp)
            self.pixmap.load(self.current)
            self.lbl.setPixmap(self.pixmap)
Exemplo n.º 19
0
class MainWindow(QMainWindow, Form):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        # 이미지 띄우기
        # QPixmap 객체
        self.pixmap = QPixmap()
        self.pixmap.load('1.jpg')

        # 이미지를 추가할 라벨
        self.pixmap = self.pixmap.scaled(371, 371)
        self.label_pic.setPixmap(self.pixmap)  # 이미지 세팅

        # QSliter  추가
        self.dial_test.setNotchesVisible(True)
        self.dial_test.valueChanged.connect(self.value_changed)

        # QSlider 데이터를 표시할 라벨
        self.textEdit_2.setStyleSheet("border-radius: 5px;"
                                      "border: 1px solid gray;"
                                      "background-color: #ffffff")

    # 슬라이드 시그널 valueChanged 연결 함수
    def value_changed(self, value):
        self.textEdit_2.setText(str(value) + "시")
        self.textEdit_2.setAlignment(Qt.AlignRight | Qt.AlignVCenter)
        self.textEdit_2.setReadOnly(True)
Exemplo n.º 20
0
    def __init__(self, parent=None):
        super(MainWindow, self).__init__(parent)  #inherit Ui_MainWindow
        self.setupUi(self)  #Build UI

        #"self.pushButton" funciton is in the UI.Ui_MainWindow
        #Cuz Ui_MainWindow is already inherited, implement self.pushButton
        # You have to check your button objectname
        self.pushButton.clicked.connect(self.clicked)

        self.lineEdit.setText('Hi')  #put text in lineEdit when start
        self.pushButton_2.clicked.connect(
            self.button2Clicked)  # You have to check your button objectname
        self.setWindowTitle('This is our test!!')  # MainWindow Title
        self.setWindowIcon(
            QtGui.QIcon(
                'C://Users//craig//PycharmProjects//Stock_Predict//venv//picture//icon.png'
            ))  # Set Window Icon

        image = QPixmap()  # Pixmap
        image.load(
            'C://Users//craig//PycharmProjects//Stock_Predict//venv//picture//superpan.png'
        )  #load image
        image = image.scaled(self.width(), self.height())  #scale the image

        palette = QPalette()  # Palette
        palette.setBrush(self.backgroundRole(),
                         QtGui.QColor(200, 200, 100))  #bg img setting
        self.setPalette(palette)  #Apply the setting
Exemplo n.º 21
0
class WindowClass(QMainWindow, form_class):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

        self.btn_loadFromFile.clicked.connect(self.loadFromFile)
        self.btn_loadFromWeb.clicked.connect(self.loadFromWeb)
        self.btn_save.clicked.connect(self.save)

    def loadFromFile(self):
        #QPixmap 객체 생성-> 이미지 파일을 객체에 load->label을 이용해 하면 표시
        self.qpixmapvar = QPixmap()
        self.qpixmapvar.load("check.jpg")
        self.qpixmapvar = self.qpixmapvar.scaledToWidth(600)
        self.label_pixmap.setPixmap(self.qpixmapvar)

    def loadFromWeb(self):
        urlString = "http://photo.hankooki.com/newsphoto/v001/2018/12/06/eyoree20181206143240_B_01_C_1.jpg"
        imageFromWeb = urllib.request.urlopen(urlString).read()

        self.qpixmapvar2 = QPixmap()
        self.qpixmapvar2.loadFromData(imageFromWeb)
        #self.qpixmapvar2 = self.qpixmapvar2.scaledToWidth(500)
        self.label_pixmap.setPixmap(self.qpixmapvar2)

    def save(self):
        self.qpixmapSaveVar = self.label_pixmap.pixmap()
        self.qpixmapSaveVar.save("Penguin.jpg")
Exemplo n.º 22
0
    def __init__(self, parent):
        super().__init__(parent)

        self.setWindowTitle("RHD2000 On-Chip Filters")

        image = QPixmap()
        image.load(":/images/help_diagram_chip_filters.png", "PNG")
        imageLabel = QLabel()
        imageLabel.setPixmap(image)

        label1 = QLabel(
            "Each amplifier on an RHD2000 chip has a pass band defined by analog circuitry "
            "that includes a high-pass filter and a low-pass filter.  The lower end of the pass "
            "band has a first-order high-pass characteristic.  The upper end of the pass "
            "band is set by a third-order Butterworth low-pass filter.")
        label1.setWordWrap(True)

        label2 = QLabel(
            "Each RHD2000 includes an on-chip module that performs digital signal processing "
            "(DSP) to implement an additional first-order high-pass filter on each digitized amplifier "
            "waveform.   This feature is used to remove the residual DC offset voltages associated "
            "with the analog amplifiers.")
        label2.setWordWrap(True)

        label3 = QLabel(
            "The diagram below shows a simplified functional diagram of one channel in an "
            "RHD2000 chip.  For more information, consult the <b>RHD2000 series digital "
            "physiology interface chip datasheet</b>, "
            "which can be found on the Downloads page of the Intan Technologies website."
        )
        label3.setWordWrap(True)

        label4 = QLabel(
            "The general recommendation for best linearity is to set the DSP cutoff frequency to "
            "the desired low-frequency cutoff and to set the amplifier lower bandwidth 2x to 10x "
            "lower than this frequency.  Note that the DSP cutoff frequency has a limited frequency "
            "resolution (stepping in powers of two), so if a precise value of low-frequency cutoff "
            "is required, the amplifier lower bandwidth could be used to define this and the DSP "
            "cutoff frequency set 2x to 10x below this point.  If both the DSP cutoff frequency and "
            "the amplifier lower bandwidth are set to the same (or similar) frequencies, the actual "
            "3-dB cutoff frequency will be higher than either frequency due to the combined effect of "
            "the two filters.")
        label4.setWordWrap(True)

        label5 = QLabel(
            "For a detailed mathematical description of all three on-chip filters, visit the "
            "Downloads page on the Intan Technologies website and consult the document <b>FAQ: "
            "RHD2000 amplifier filter characteristics</b>.")
        label5.setWordWrap(True)

        mainLayout = QVBoxLayout()
        mainLayout.addWidget(label1)
        mainLayout.addWidget(label2)
        mainLayout.addWidget(label3)
        mainLayout.addWidget(imageLabel)
        mainLayout.addWidget(label4)
        mainLayout.addWidget(label5)

        self.setLayout(mainLayout)
Exemplo n.º 23
0
 def set_labels(self):
     logger.debug("set_labels:begin")
     titlePix = QPixmap()
     titlePix.load('icons/titleIcon.png')
     self.headIcon.setPixmap(titlePix.scaled(40, 40))
     self.headTitle.setText("Wins百宝箱")
     self.topSpace.setText("")
     logger.debug("set_labels:end")
Exemplo n.º 24
0
 def return_img_path(self, path: str):
     icon = QPixmap()
     icon.load(path)
     label = QLabel()
     label.setAlignment(Qt.AlignCenter)
     label.setPixmap(icon)
     label.setStyleSheet("background-color: #CECECE;")
     return label
Exemplo n.º 25
0
 def set_image_detail(self, face):
     pixmap = QPixmap()
     if face.thumbnail.width > 0:
         pixmap.loadFromData(face.thumbnail.data)
     else:
         pixmap.load('avatar.png')
     self.detail_face = face
     self.image_detail.setPixmap(pixmap)
Exemplo n.º 26
0
 def set_qrcode(self, qrcode_path):
     if os.path.exists(qrcode_path):
         pix = QPixmap()
         pix.load(qrcode_path)
         item = QGraphicsPixmapItem(pix)
         scene = QGraphicsScene()
         scene.addItem(item)
         self.qrcode_viewer.setScene(scene)
Exemplo n.º 27
0
    def load_current_image(self):
        self.update_states()

        file_name = self.get_current_image_file_name()

        pixmap = QPixmap()
        pixmap.load(file_name)
        self.label_image.setPixmap(pixmap)
    def getIcons(self):

        arrowLeft = QPixmap()
        arrowRight = QPixmap()
        arrowLeft.load(self.imgPath + 'arrow_left.png')
        arrowRight.load(self.imgPath + 'arrow_right.png')
        self.iconArrLeft = QIcon(arrowLeft)
        self.iconArrRight = QIcon(arrowRight)
Exemplo n.º 29
0
class MyDialog(QDialog):
    def __init__(self):
        super().__init__()
        self.ui = Ui_Dialog()
        self.ui.setupUi(self)
        self.pixmap = QPixmap()
        self.pixmap.load('game_map.png')
        self.item = QGraphicsPixmapItem(self.pixmap)
        self.scene = QGraphicsScene()
        self.scene.addItem(self.item)
        self.ui.graphicsView.setScene(self.scene)
        self.ui.pushButton.clicked.connect(self.startanimation)
        self.path = QPainterPath()
        self.path.moveTo(30,30)
        self.path.cubicTo(30,30,80,180,180,170)
        self.ui.label.pos = QPointF(20,20)
        self.pos1 = [0,0]
        self.pos2 = [0,0]

    def mousePressEvent(self, event):
        if event.buttons() & QtCore.Qt.LeftButton:
            self.pos1[0] = event.x()
            self.pos1[1] = event.y()

    def mouseReleaseEvent(self, event):
        self.pos2[0] = event.x()
        self.pos2[1] = event.y()
        self.update()

    def paintEvent(self, event):
        width = self.pos2[0] - self.pos1[0]
        height = self.pos2[1] - self.pos1[1]
        rect = QRect(self.pos1[0],self.pos1[1],width,height)
        qp = QPainter()
        qp.begin(self)
        pen = QPen(Qt.red,3)
        pen.setStyle(Qt.DotLine)
        qp.setPen(pen)
        qp.drawArc(rect,0,360*16)
        qp.end()



    # def paintEvent(self,e):
    #     qp = QPainter()
    #     qp.begin(self)
    #     qp.drawPath(self.path)
    #     qp.end()

    def startanimation(self):
        self.anim = QPropertyAnimation(self.ui.label, b'pos')
        self.anim.setDuration(4000)
        self.anim.setStartValue(QPointF(20,20))
        pos = [n/80 for n in range(0,50)]
        for i in pos:
            self.anim.setKeyValueAt(i,self.path.pointAtPercent(i))
            self.anim.setEndValue(QPointF(160,150))
        self.anim.start()
Exemplo n.º 30
0
 def paintEvent(self, QPaintEvent):
     super().paintEvent(QPaintEvent)
     painter = QPainter(self)
     pix = QPixmap()
     pix.load(config.LEFT_ICON)
     painter.translate(50, 50)  # 让图片的中心作为旋转的中心
     painter.rotate(90)  # 顺时针旋转90度
     painter.translate(-50, -50)  # 使原点复原
     painter.drawPixmap(0, 0, 100, 100, pix)
Exemplo n.º 31
0
 def add_image_to_gui(self, isgood, face):
     pixmap = QPixmap()
     if face.thumbnail.width > 0:
         pixmap.loadFromData(face.thumbnail.data)
     else:
         pixmap.load('avatar.png')
     image_item = QtWidgets.QListWidgetItem(QIcon(pixmap), face.name)
     listwidget = self.good_images if isgood else self.bad_images
     listwidget.addItem(image_item)
Exemplo n.º 32
0
    def paperCliked(self, event):
        pixmap = QPixmap()
        pixmap.load("res/checked.png")
        self.ui.check_paper.setPixmap(pixmap)

        pixmap.load("res/unchecked.png")
        self.ui.check_maze.setPixmap(pixmap)

        self.settings["game_type"] = 1
Exemplo n.º 33
0
class MyWidget(QMainWindow):
    def __init__(self):
        super().__init__()
        uic.loadUi('untitled.ui', self)
        self.x0 = 0
        self.y0 = 0
        self.x = 0
        self.y = 0

        self.pixmap = QPixmap()
        self.cutButton.clicked.connect(self.run)
        self.imButton.clicked.connect(self.open_file)

    def open_file(self):
        try:
            W = self.imageframe.width()
            H = self.imageframe.height()
            self.pixmap.load(self.lineEdit.text())
            self.imageframe.setPixmap(
                self.pixmap.scaled(W, H, Qt.KeepAspectRatio))
            maxsize = (W, H)
            image = self.lineEdit.text()
            im = Image.open(image)
            tn_image = im.thumbnail(maxsize, PIL.Image.ANTIALIAS)
            im.save("temp.jpg")
        except Exception:
            pass

    def run(self):

        PhotoShop(self.x0, self.y0, self.x, self.y, "temp.jpg")
        '''
        W =self.imageframe.width()
        H = self.imageframe.height()
        self.pixmap.load(self.lineEdit.text())
        self.imageframe.setPixmap(self.pixmap.scaled(W,H, Qt.KeepAspectRatio))
        maxsize = (W, H)
        image = self.lineEdit.text()
        im = Image.open(image)
        tn_image = im.thumbnail(maxsize, PIL.Image.ANTIALIAS)
        im.save("temp.jpg")
      
        bytes = QByteArray()
        buffer = QBuffer()
        buffer.open(QIODevice.WriteOnly)
        self.pixmap.save(buffer, "PNG")'''

    def mousePressEvent(self, event):
        self.x0 = event.x()
        self.y0 = event.y()

    def mouseReleaseEvent(self, event):

        self.x = event.x()
        self.y = event.y()
        self.coord.setText("Координаты:{}, {},{},{}".format(
            self.x0, self.y0, self.x, self.y))
Exemplo n.º 34
0
    def textClicked(self, event):
        pixmap = QPixmap()
        pixmap.load("res/checked.png")
        self.ui.check_text.setPixmap(pixmap)

        pixmap.load("res/unchecked.png")
        self.ui.check_pic.setPixmap(pixmap)

        self.settings["pic_detect"] = 1
        self.settings["text_detect"] = 1
Exemplo n.º 35
0
 def itemSelectionChanged(self):
     if not self.pauseUpdate:
         selected = self.fileTreeWidget.selectedItems()
         if len(selected) < 1:
             self.previewLabel.clear()
         else:
             image = QPixmap()
             imagePath = selected[0].text(4) + "/" + selected[0].text(0)
             image.load(imagePath)
             widgetWidth = self.previewLabel.width()
             self.previewLabel.setPixmap(image.scaledToWidth(widgetWidth))
Exemplo n.º 36
0
 def __setImagePixmapToIamgeLabel(self,img,bytesblag=True):
     """
     设置预览图片,强行定义其大小为768,432
     """
     pixmap = QPixmap()
     if bytesblag == True:
         pixmap.loadFromData(img)
     else:
         pixmap.load(img)
     pixmap = pixmap.scaled(768,432)
     self.image_label.setPixmap(pixmap)
     self.image_label.setScaledContents(True)
Exemplo n.º 37
0
def _load_icon(filename, backgroundColor, width, height):
    foreground = QPixmap()
    foreground.load(filename)
    pixmap = QPixmap(foreground.size())
    pixmap.fill(backgroundColor)

    painter = QPainter()
    painter.begin(pixmap)
    painter.drawPixmap(QPointF(0, 0), foreground)
    painter.end()

    pixmap = pixmap.scaled(QSize(width, height), Qt.KeepAspectRatio, Qt.SmoothTransformation)
    return pixmap
Exemplo n.º 38
0
    def data(self, index, role):

#
        if role == Qt.BackgroundColorRole and (index.column() == self.ColumnID.Fix or index.column() == self.ColumnID.FixIcon):
            row = index.row()
            value = self._elements[row]
            if value.isFixed:
                color=QColor(Qt.red)

                color.setAlphaF(0.5)
                return color

        if role == Qt.DisplayRole and index.column() == self.ColumnID.Text:
            row = index.row()
            value = self._elements[row]
            return value.density

        if role == Qt.DisplayRole and index.column() == self.ColumnID.Fix:
            row = index.row()
            value = self._elements[row]

            return value.fixvalue

        if role == Qt.DecorationRole and index.column() == self.ColumnID.Color:
            row = index.row()
            value = self._elements[row]
            pixmap = QPixmap(_NPIXELS, _NPIXELS)
            pixmap.fill(value.color)
            icon = QIcon(pixmap)
            return icon

        if role == Qt.DecorationRole and index.column() == self.ColumnID.FixIcon:
            row = index.row()
            value = self._elements[row]

            pixmap = QPixmap(_NPIXELS,_NPIXELS)

            if value.isFixed:
                iconpath=os.path.join(os.path.split(__file__)[0],
                                      'icons/lock-edit-icon-32.png')
            else:
                iconpath=os.path.join(os.path.split(__file__)[0],
                                      'icons/lock_open-32.png')
            pixmap.load(iconpath)
            icon = QIcon(pixmap)

            return icon



        return super(BoxListModel,self).data(index, role)
Exemplo n.º 39
0
 def store_file(self, id, file):
     id = id.replace('/', '_')
     directory = ApplicationData.get('images')
     filename = os.path.join(directory, id + '.png')
     if filename == os.path.normpath(file):
         return self.iconmap.get(id, None)
     makedirs(directory)
     pixmap = QPixmap()
     if file is not None and pixmap.load(file):
         if pixmap.size().width() > self.max_size or pixmap.size().height() > self.max_size:
             pixmap = pixmap.scaled(self.max_size, self.max_size, Qt.KeepAspectRatio, Qt.SmoothTransformation)
         buffer = QBuffer()
         pixmap.save(buffer, 'png')
         data = str(buffer.data())
         with open(filename, 'wb') as f:
             f.write(data)
         icon = QIcon(pixmap)
         icon.filename = filename
         icon.content = data
         icon.content_type = 'image/png'
     else:
         unlink(filename)
         icon = None
     self.iconmap[id] = icon
     return icon
Exemplo n.º 40
0
 def set_labels(self):
     """
         全部的标签组件。
     """
     p = QPixmap()
     p.load('icons/unlogin.png')
     p2 = QPixmap()
     p2.load('icons/titleIcon.png')
     # 头部装饰start。
     self.lbe_pic.setObjectName("headpic")
     self.lbe_pic.setPixmap(p.scaled(40, 40))
     self.header_hr.setObjectName('Headerhr')
     self.header_hr.setText("推荐")
     self.header_icon.setObjectName('HIcon')
     self.header_icon.setPixmap(p2.scaled(50, 50))
     self.header_text.setObjectName('HText')
     self.header_text.setText(" Music")
Exemplo n.º 41
0
    def refreshInfo(self):
        #setup avata
        pixmap = QPixmap()
        pixmap.load("res/avata_mask")
        pixmap.scaled(115, 115)
        self.ui.lb_avata.setMask(pixmap.mask())
        pixmap.load(self.settings["avata"])
        self.ui.lb_avata.setPixmap(pixmap)

#        self.ui.lb_avata2.setMask(pixmap.mask())
#        pixmap.load(self.settings["avata"])
#        self.ui.lb_avata2.setPixmap(pixmap)


        #setup the name
        self.ui.lb_welcomname.setText(self.settings["name"])
        self.ui.lb_nick.setText(self.settings["name"])
    def __init__(self, module):
        QPushButton.__init__(self)
        self.module = module
        self.setParent(module)
        eyeOn = QPixmap()
        eyeOff = QPixmap()

        eyeOn.load('%s/%s' % (module.mainWindow.imgPath, 'eye_on.png'))
        eyeOff.load('%s/%s' % (module.mainWindow.imgPath, 'eye_off.png'))
        self.iconEyeOn = QIcon(eyeOn)
        self.iconEyeOff = QIcon(eyeOff)

        self.mainWindow = module.mainWindow
        self.setFixedSize(30, 20)
        self.clicked.connect(self.showGB)
        self.setCheckable(True)
        self.showGB()
    def getIcons(self):

        arrow_left = QPixmap()
        arrow_right = QPixmap()
        arrow_left.load(self.path_img + 'arrow_left.png')
        arrow_right.load(self.path_img + 'arrow_right.png')
        self.icon_arrow_left = QIcon(arrow_left)
        self.icon_arrow_right = QIcon(arrow_right)
        icon_math = QPixmap()
        icon_math.load(self.path_img + 'xy2.png')
        icon_math_on = QPixmap()
        icon_math_on.load(self.path_img + 'xy2_on.png')
        self.icon_vcursor = QIcon(icon_math)
        self.icon_vcursor_on = QIcon(icon_math_on)
        icon_fit = QPixmap()
        icon_fit.load(self.path_img + 'infini.png')
        self.icon_fit = QIcon(icon_fit)
Exemplo n.º 44
0
 def __init__(self, parent=None, size=16):
     super(SearchIcon, self).__init__(parent)
     self.setFocusPolicy(Qt.NoFocus)
     self.setVisible(True)
     self.setMinimumSize(size+2, size+2)
     pixmap = QPixmap()
     if pixmap.load(Resources.get("icons/search.svg")):
         self.icon = pixmap.scaled(size, size, Qt.KeepAspectRatio, Qt.SmoothTransformation)
     else:
         self.icon = None
Exemplo n.º 45
0
    def findIconHelper(self, size = int, themeName = str, iconName = str):
        pixmap = QPixmap()

        if iconName == '' or self.themeName == '':
            return pixmap

        if themeName == '':
            themeName = self.themeName

        if themeName == self.themeName:
            index = self.themeIndex
        else:
            index = self.readThemeIndex(themeName)

        
        subDirs = filter(lambda x:x[0] == str(size), index.dirList)
        
        for iconDir in self.iconDirs:
            if path.exists(path.join(iconDir, themeName)):
                for theme in subDirs:
                    fileName = path.join(iconDir, themeName, theme[1],
                            '%s.png' % str(iconName))
        
                    logging.debug('Looking for : %s' % fileName)
                    if path.exists(fileName):
                        pixmap.load(fileName)
                        logging.debug('Icon: %s found in theme %s' % \
                                (iconName, themeName))
                        return pixmap

        for iconDir in self.extraIcons:
            fileName = path.join(iconDir, '%s.png' % str(iconName))
        
            if path.exists(fileName):
                pixmap.load(fileName)
                logging.debug('Icon: %s found in %s' % (iconName, iconDir))
                return pixmap

        if len(self._themes) > 0:
            self._themes.pop(0)
            if not len(self._themes) == 0 and pixmap.isNull():
                pixmap = self.findIconHelper(size, self._themes[0], iconName)
        return pixmap
Exemplo n.º 46
0
    def __init__(self, data, **kwargs):
        super(LinkWidget, self).__init__(**kwargs)
        self.setupUi(self)
        filename, links = data

        self.groupBox.setTitle(path.split(filename)[1])

        pixmap = QPixmap()
        pixmap.load(filename)
        self.pixmap = pixmap.scaled(120, 120, Qt.KeepAspectRatio)
        self.label_picture.setPixmap(self.pixmap)

        self.lineEdit_sharelink.setText(links['sharelink'])
        self.lineEdit_hotlink.setText(links['hotlink'])
        self.lineEdit_deletelink.setText(links['delete_url'])
        self.lineEdit_preview.setText(links['thumbnail'])

        self.lineEdit_sharelink.setCursorPosition(0)
        self.lineEdit_hotlink.setCursorPosition(0)
        self.lineEdit_deletelink.setCursorPosition(0)
        self.lineEdit_preview.setCursorPosition(0)
Exemplo n.º 47
0
    def findIconHelper(self, size = int, themeName = str, iconName = str):
        pixmap = QPixmap()

        if iconName == '' or self.themeName == '':
            return pixmap

        if themeName == '':
            themeName = self.themeName

        if themeName == self.themeName:
            index = self.themeIndex
        else:
            index = self.readThemeIndex(themeName)

        
        subDirs = filter(lambda x:x[0] == str(size), index.dirList)
        
        for iconDir in self.iconDirs:
            if path.exists(path.join(iconDir, themeName)):
                for theme in subDirs:
                    fileName = path.join(iconDir, themeName, theme[1],
                            '%s.png' % str(iconName))
                    fileName_svg = path.join(iconDir, themeName, theme[1],
                            '%s.svg' % str(iconName))
                    logging.debug('Looking for : %s' % fileName)
                    if path.exists(fileName):
                        pixmap.load(fileName)
                        logging.debug('Icon: %s found in theme %s' % \
                                (iconName, themeName))
                        return pixmap
                    elif path.exists(fileName_svg):
                        pixmap.load(fileName_svg)
                        logging.debug('Icon: %s found in %s' % (iconName, iconDir))
                        return pixmap

        for iconDir in self.extraIcons:
            fileName = path.join(iconDir, '%s.png' % str(iconName))
            fileName_svg = path.join(iconDir, '{}.svg'.format(str(iconName)))
            if path.exists(fileName):
                pixmap.load(fileName)
                #print "pixmap ->{}".format(fileName)
                logging.debug('Icon: %s found in %s' % (iconName, iconDir))
                return pixmap
            elif path.exists(fileName_svg):
                    image=QImage(size, size, QImage.Format_RGB32)
                    reader=QImageReader(fileName)
                    reader.read(image)
                    pixmap.convertFromImage(image)
                    logging.debug('Icon: %s found in %s' % (iconName, iconDir))
                    #print "pixmap ->{}".format(fileName)
                    return pixmap

        if len(self._themes) > 0:
            self._themes.pop(0)
            if not len(self._themes) == 0 and pixmap.isNull():
                pixmap = self.findIconHelper(size, self._themes[0], iconName)
        return pixmap
Exemplo n.º 48
0
    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()
Exemplo n.º 49
0
 def __init__(self, parent=None, size=16):
     super(ClearButton, self).__init__(parent)
     self.setCursor(Qt.ArrowCursor)
     self.setFocusPolicy(Qt.NoFocus)
     self.setToolTip(u"Clear")
     self.setVisible(False)
     self.setMinimumSize(size+2, size+2)
     pixmap = QPixmap()
     if pixmap.load(Resources.get("icons/delete.svg")):
         self.icon = pixmap.scaled(size, size, Qt.KeepAspectRatio, Qt.SmoothTransformation)
         # Use QImage because QPainter using a QPixmap does not support CompositionMode_Multiply -Dan
         image = self.icon.toImage()
         painter = QPainter(image)
         painter.setRenderHint(QPainter.Antialiasing, True)
         painter.setCompositionMode(QPainter.CompositionMode_Multiply)
         painter.drawPixmap(0, 0, self.icon)
         painter.end()
         self.icon_pressed = QPixmap(image)
     else:
         self.icon = self.icon_pressed = None
Exemplo n.º 50
0
    def addBackgroundImage(self):
        lastDirectory = self.mw.welcome.getLastAccessedDirectory()

        """File dialog that request an existing file. For opening an image."""
        filename = QFileDialog.getOpenFileName(self,
                                               self.tr("Open Image"),
                                               lastDirectory,
                                               self.tr("Image files (*.jpg; *.jpeg; *.png)"))[0]
        if filename:
            try:
                px = QPixmap()
                valid = px.load(filename)
                del px
                if valid:
                    shutil.copy(filename, writablePath("resources/backgrounds"))
                    return os.path.basename(filename)
                else:
                    QMessageBox.warning(self, self.tr("Error"),
                                        self.tr("Unable to load selected file"))
            except Exception as e:
                QMessageBox.warning(self, self.tr("Error"),
                                    self.tr("Unable to add selected image:\n{}").format(str(e)))
        return None
Exemplo n.º 51
0
class RenderArea(QWidget):
    points = QPolygon([
        QPoint(10, 80),
        QPoint(20, 10),
        QPoint(80, 30),
        QPoint(90, 70)
    ])

    Line, Points, Polyline, Polygon, Rect, RoundedRect, Ellipse, Arc, Chord, \
            Pie, Path, Text, Pixmap = range(13)

    def __init__(self, parent=None):
        super(RenderArea, self).__init__(parent)

        self.pen = QPen()
        self.brush = QBrush()
        self.pixmap = QPixmap()

        self.shape = RenderArea.Polygon
        self.antialiased = False
        self.transformed = False
        self.pixmap.load(':/images/qt-logo.png')

        self.setBackgroundRole(QPalette.Base)
        self.setAutoFillBackground(True)

    def minimumSizeHint(self):
        return QSize(100, 100)

    def sizeHint(self):
        return QSize(400, 200)

    def setShape(self, shape):
        self.shape = shape
        self.update()

    def setPen(self, pen):
        self.pen = pen
        self.update()

    def setBrush(self, brush):
        self.brush = brush
        self.update()

    def setAntialiased(self, antialiased):
        self.antialiased = antialiased
        self.update()

    def setTransformed(self, transformed):
        self.transformed = transformed
        self.update()

    def paintEvent(self, event):
        rect = QRect(10, 20, 80, 60)

        path = QPainterPath()
        path.moveTo(20, 80)
        path.lineTo(20, 30)
        path.cubicTo(80, 0, 50, 50, 80, 80)

        startAngle = 30 * 16
        arcLength = 120 * 16

        painter = QPainter(self)
        painter.setPen(self.pen)
        painter.setBrush(self.brush)
        if self.antialiased:
            painter.setRenderHint(QPainter.Antialiasing)

        for x in range(0, self.width(), 100):
            for y in range(0, self.height(), 100):
                painter.save()
                painter.translate(x, y)
                if self.transformed:
                    painter.translate(50, 50)
                    painter.rotate(60.0)
                    painter.scale(0.6, 0.9)
                    painter.translate(-50, -50)

                if self.shape == RenderArea.Line:
                    painter.drawLine(rect.bottomLeft(), rect.topRight())
                elif self.shape == RenderArea.Points:
                    painter.drawPoints(RenderArea.points)
                elif self.shape == RenderArea.Polyline:
                    painter.drawPolyline(RenderArea.points)
                elif self.shape == RenderArea.Polygon:
                    painter.drawPolygon(RenderArea.points)
                elif self.shape == RenderArea.Rect:
                    painter.drawRect(rect)
                elif self.shape == RenderArea.RoundedRect:
                    painter.drawRoundedRect(rect, 25, 25, Qt.RelativeSize)
                elif self.shape == RenderArea.Ellipse:
                    painter.drawEllipse(rect)
                elif self.shape == RenderArea.Arc:
                    painter.drawArc(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Chord:
                    painter.drawChord(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Pie:
                    painter.drawPie(rect, startAngle, arcLength)
                elif self.shape == RenderArea.Path:
                    painter.drawPath(path)
                elif self.shape == RenderArea.Text:
                    painter.drawText(rect, Qt.AlignCenter,
                            "PyQt by\nRiverbank Computing")
                elif self.shape == RenderArea.Pixmap:
                    painter.drawPixmap(10, 10, self.pixmap)

                painter.restore()

        painter.setPen(self.palette().dark().color())
        painter.setBrush(Qt.NoBrush)
        painter.drawRect(QRect(0, 0, self.width() - 1, self.height() - 1))
Exemplo n.º 52
0
class Planet_BuildItemWidget(QFrame):

    # bitem, optional quantity for shipyard
    requestBuildItem = pyqtSignal(XNPlanetBuildingItem, int)
    # downgrade a building
    requestDowngradeItem = pyqtSignal(XNPlanetBuildingItem)

    def __init__(self, parent: QWidget):
        super(Planet_BuildItemWidget, self).__init__(parent)
        # data members
        self._bitem = XNPlanetBuildingItem()
        self._pix = QPixmap()
        self._pix_met = QPixmap(':/i/s_metall.png')
        self._pix_cry = QPixmap(':/i/s_kristall.png')
        self._pix_deit = QPixmap(':/i/s_deuterium.png')
        self._pix_energy = QPixmap(':/i/s_energy.png')
        # setup frame
        self.setFrameShape(QFrame.StyledPanel)
        self.setFrameShadow(QFrame.Raised)
        # font
        font = self.font()
        font.setWeight(QFont.Bold)
        # layout
        self._layout = QHBoxLayout()
        self._layout_v = QVBoxLayout()
        self.setLayout(self._layout)
        # label with building image
        self._lbl_pix = QLabel(self)
        # labels for name and level
        self._layout_nl = QHBoxLayout()
        self._lbl_name = QLabel(self)
        self._lbl_name.setFont(font)
        self._lbl_lvl = QLabel(self)
        # labels for time
        self._layout_buildtime = QHBoxLayout()
        self._lbl_time = QLabel(self.tr('Time:'), self)
        self._lbl_timestr = QLabel(self)
        # labels for price
        self._layout_price1 = QHBoxLayout()
        self._layout_price2 = QHBoxLayout()
        self._layout_price3 = QHBoxLayout()
        self._layout_price4 = QHBoxLayout()
        self._lbl_price_met_ico = QLabel(self)
        self._lbl_price_met_ico.setPixmap(self._pix_met)
        self._lbl_price_met = QLabel()
        self._lbl_price_cry_ico = QLabel()
        self._lbl_price_cry_ico.setPixmap(self._pix_cry)
        self._lbl_price_cry = QLabel()
        self._lbl_price_deit_ico = QLabel()
        self._lbl_price_deit_ico.setPixmap(self._pix_deit)
        self._lbl_price_deit = QLabel()
        self._lbl_price_energy_ico = QLabel()
        self._lbl_price_energy_ico.setPixmap(self._pix_energy)
        self._lbl_price_energy = QLabel()
        # buttons
        # upgrade
        self._layout_buttons = QHBoxLayout()
        self._btn_upgrade = QPushButton(self.tr('Upgrade'), self)
        self._btn_upgrade.setIcon(QIcon(':/i/build.png'))
        self._btn_upgrade.setMaximumHeight(25)
        self._btn_upgrade.clicked.connect(self.on_upgrade_clicked)
        # downgrade, hidden by default
        self._btn_downgrade = QPushButton('', self)
        self._btn_downgrade.setIcon(QIcon(':/i/arrow_down_red_16.png'))
        self._btn_downgrade.setMaximumHeight(25)
        self._btn_downgrade.clicked.connect(self.on_downgrade_clicked)
        self._btn_downgrade.setToolTip(self.tr('Dismantle'))
        self._btn_downgrade.hide()
        # line edit for quantity for shipyard items, hidden by default
        self._lineedit_quantity = QLineEdit(self)
        self._lineedit_quantity.setMaximumWidth(50)
        self._lineedit_quantity.hide()
        # construct layout
        # name, level
        self._layout_nl.addWidget(self._lbl_name)
        self._layout_nl.addWidget(self._lbl_lvl)
        self._layout_nl.addStretch()
        self._layout_v.addLayout(self._layout_nl)
        # build time
        self._layout_buildtime.addWidget(self._lbl_time)
        self._layout_buildtime.addWidget(self._lbl_timestr)
        self._layout_buildtime.addStretch()
        self._layout_v.addLayout(self._layout_buildtime)
        # price met
        self._layout_price1.addWidget(self._lbl_price_met_ico)
        self._layout_price1.addWidget(self._lbl_price_met)
        self._layout_price1.addStretch()
        # price cry
        self._layout_price2.addWidget(self._lbl_price_cry_ico)
        self._layout_price2.addWidget(self._lbl_price_cry)
        self._layout_price2.addStretch()
        # price deit
        self._layout_price3.addWidget(self._lbl_price_deit_ico)
        self._layout_price3.addWidget(self._lbl_price_deit)
        self._layout_price3.addStretch()
        # price energy
        self._layout_price4.addWidget(self._lbl_price_energy_ico)
        self._layout_price4.addWidget(self._lbl_price_energy)
        self._layout_price4.addStretch()
        self._layout_v.addLayout(self._layout_price1)
        self._layout_v.addLayout(self._layout_price2)
        self._layout_v.addLayout(self._layout_price3)
        self._layout_v.addLayout(self._layout_price4)
        # buttons
        self._layout_buttons.addWidget(self._btn_upgrade)
        self._layout_buttons.addWidget(self._btn_downgrade)
        self._layout_buttons.addWidget(self._lineedit_quantity)
        self._layout_buttons.addStretch()
        self._layout_v.addLayout(self._layout_buttons)
        #
        self._layout.addWidget(self._lbl_pix, 0, Qt.AlignTop | Qt.AlignHCenter)
        self._layout.addLayout(self._layout_v)

    def set_building_item(self,
                          bitem: XNPlanetBuildingItem,
                          res_cur: XNResourceBundle,
                          energy_cur: int):
        self._bitem = bitem
        # load pixmap
        pix_fn = 'ui/i/building_{0}.gif'.format(bitem.gid)
        if not self._pix.load(pix_fn):
            logger.warn('Failed to load pixmap from: [{0}]'.format(pix_fn))
        else:
            self._lbl_pix.setPixmap(self._pix.scaled(80, 80))
            # self._lbl_pix.setPixmap(self._pix)
        # name, level
        self._lbl_name.setText(bitem.name)
        if self._bitem.is_shipyard_item:
            # shipyard items use quantity instead of level
            self._lbl_lvl.setText(str(bitem.quantity))
        else:
            self._lbl_lvl.setText(str(bitem.level))
        # time
        if bitem.seconds_total != -1:
            self._lbl_timestr.setText(time_seconds_to_str(bitem.seconds_total))
        else:
            self._lbl_timestr.setText('-')
        # colors
        color_enough = '#008800'
        color_notenough = '#AA0000'
        enough_met = True
        enough_cry = True
        enough_deit = True
        enough_energy = True
        # price met
        if bitem.cost_met > 0:
            setstr = number_format(bitem.cost_met)
            color = color_enough
            if res_cur.met < bitem.cost_met:
                setstr += ' (-{0})'.format(number_format(
                        int(bitem.cost_met - res_cur.met)))
                color = color_notenough
                enough_met = False
            self._lbl_price_met.setText('<font color="{0}">{1}</font>'.format(
                    color, setstr))
            self._lbl_price_met_ico.show()
            self._lbl_price_met.show()
        else:
            self._lbl_price_met_ico.hide()
            self._lbl_price_met.hide()
        # price cry
        if bitem.cost_cry > 0:
            setstr = number_format(bitem.cost_cry)
            color = color_enough
            if res_cur.cry < bitem.cost_cry:
                setstr += ' (-{0})'.format(number_format(
                        int(bitem.cost_cry - res_cur.cry)))
                color = color_notenough
                enough_cry = False
            self._lbl_price_cry.setText('<font color="{0}">{1}</font>'.format(
                    color, setstr))
            self._lbl_price_cry_ico.show()
            self._lbl_price_cry.show()
        else:
            self._lbl_price_cry_ico.hide()
            self._lbl_price_cry.hide()
        # price deit
        if bitem.cost_deit > 0:
            setstr = number_format(bitem.cost_deit)
            color = color_enough
            if res_cur.deit < bitem.cost_deit:
                setstr += ' (-{0})'.format(number_format(
                        int(bitem.cost_deit - res_cur.deit)))
                color = color_notenough
                enough_deit = False
            self._lbl_price_deit.setText('<font color="{0}">{1}</font>'.format(
                    color, setstr))
            self._lbl_price_deit_ico.show()
            self._lbl_price_deit.show()
        else:
            self._lbl_price_deit_ico.hide()
            self._lbl_price_deit.hide()
        # price energy
        if bitem.cost_energy > 0:
            setstr = number_format(bitem.cost_energy)
            color = color_enough
            if energy_cur < bitem.cost_energy:
                setstr += ' (-{0})'.format(number_format(
                        int(bitem.cost_energy - energy_cur)))
                color = color_notenough
                enough_energy = False
            self._lbl_price_energy.setText(
                '<font color="{0}">{1}</font>'.format(color, setstr))
            self._lbl_price_energy_ico.show()
            self._lbl_price_energy.show()
        else:
            self._lbl_price_energy_ico.hide()
            self._lbl_price_energy.hide()
        #
        # enable or disable buttons
        if enough_met and enough_cry and enough_deit and \
                enough_energy and (self._bitem.seconds_total > 0):
            self._btn_upgrade.setEnabled(True)
        else:
            self._btn_upgrade.setEnabled(False)
            # logger.debug('Disabling build {0}: {1} {2} {3} {4} {5}'.format(
            #        self._bitem.name, enough_met, enough_cry, enough_deit,
            #        enough_energy, self._bitem.seconds_total))
        if self._bitem.is_building_item:
            if self._bitem.level > 0:
                self._btn_downgrade.setEnabled(True)
            else:  # nothing to downgrade
                self._btn_downgrade.setEnabled(False)
        # set button text
        if self._bitem.is_shipyard_item:
            self._btn_upgrade.setText(self.tr('Build'))
            # calculate maximum available to build
            counts = [0, 0, 0, 0]
            # check metal cost
            if self._bitem.cost_met > 0:
                counts[0] = int(res_cur.met // self._bitem.cost_met)
            # check crystal cost
            if self._bitem.cost_cry > 0:
                counts[1] = int(res_cur.cry // self._bitem.cost_cry)
            # check deit cost
            if self._bitem.cost_deit > 0:
                counts[2] = int(res_cur.deit // self._bitem.cost_deit)
            # check energy
            if self._bitem.cost_energy > 0:
                counts[3] = int(energy_cur // self._bitem.cost_energy)
            maxb = 0
            for cnt in counts:  # find first count, which is > 0
                if cnt > 0:
                    maxb = cnt
                    break
            for cnt in counts:  # find minimum count, which is > 0
                if cnt > 0:
                    if cnt < maxb:
                        maxb = cnt
            # set tip
            self._lineedit_quantity.setPlaceholderText(str(maxb))
        elif self._bitem.is_research_item or self._bitem.is_researchfleet_item:
            self._btn_upgrade.setText(self.tr('Research'))
        # show/hide additional buttons
        if self._bitem.is_building_item:
            self._btn_upgrade.show()
            self._btn_downgrade.show()
            self._lineedit_quantity.hide()
        elif self._bitem.is_shipyard_item:
            self._btn_upgrade.show()
            self._btn_downgrade.hide()
            self._lineedit_quantity.show()
        elif self._bitem.is_research_item or self._bitem.is_researchfleet_item:
            self._btn_upgrade.show()
            self._btn_downgrade.hide()
            self._lineedit_quantity.hide()

    @pyqtSlot()
    def on_upgrade_clicked(self):
        if not self._bitem.is_shipyard_item:
            # all buildings and researches, quantity is ignored (send 1)
            self.requestBuildItem.emit(self._bitem, 1)
        else:
            # shipyard build item case, read also quantity
            qtext = self._lineedit_quantity.text()
            qint = -1
            try:
                qint = int(qtext)
            except ValueError:
                pass
            if qint < 1:  # invalid format
                QMessageBox.warning(self,
                        self.tr('Invalid format!'),
                        self.tr('Please input positive integer value!'))
                return
            # clear lineedit text
            self._lineedit_quantity.setText('')
            # emit with qint as quantity
            self.requestBuildItem.emit(self._bitem, qint)

    @pyqtSlot()
    def on_downgrade_clicked(self):
        self.requestDowngradeItem.emit(self._bitem)
Exemplo n.º 53
0
class PixmapDial(QDial):
    # enum CustomPaintMode
    CUSTOM_PAINT_MODE_NULL        = 0 # default (NOTE: only this mode has label gradient)
    CUSTOM_PAINT_MODE_CARLA_WET   = 1 # color blue-green gradient (reserved #3)
    CUSTOM_PAINT_MODE_CARLA_VOL   = 2 # color blue (reserved #3)
    CUSTOM_PAINT_MODE_CARLA_L     = 3 # color yellow (reserved #4)
    CUSTOM_PAINT_MODE_CARLA_R     = 4 # color yellow (reserved #4)
    CUSTOM_PAINT_MODE_CARLA_PAN   = 5 # color yellow (reserved #3)
    CUSTOM_PAINT_MODE_COLOR       = 6 # color, selectable (reserved #3)
    CUSTOM_PAINT_MODE_ZITA        = 7 # custom zita knob (reserved #6)
    CUSTOM_PAINT_MODE_NO_GRADIENT = 8 # skip label gradient

    # enum Orientation
    HORIZONTAL = 0
    VERTICAL   = 1

    HOVER_MIN = 0
    HOVER_MAX = 9

    MODE_DEFAULT = 0
    MODE_LINEAR = 1

    # signals
    realValueChanged = pyqtSignal(float)

    def __init__(self, parent, index=0):
        QDial.__init__(self, parent)

        self.fDialMode = self.MODE_LINEAR

        self.fMinimum   = 0.0
        self.fMaximum   = 1.0
        self.fRealValue = 0.0
        self.fPrecision = 10000
        self.fIsInteger = False

        self.fIsHovered = False
        self.fIsPressed = False
        self.fHoverStep = self.HOVER_MIN

        self.fLastDragPos = None
        self.fLastDragValue = 0.0

        self.fIndex     = index
        self.fPixmap    = QPixmap(":/bitmaps/dial_01d.png")
        self.fPixmapNum = "01"

        if self.fPixmap.width() > self.fPixmap.height():
            self.fPixmapOrientation = self.HORIZONTAL
        else:
            self.fPixmapOrientation = self.VERTICAL

        self.fLabel     = ""
        self.fLabelPos  = QPointF(0.0, 0.0)
        self.fLabelFont = QFont(self.font())
        self.fLabelFont.setPixelSize(8)
        self.fLabelWidth  = 0
        self.fLabelHeight = 0

        if self.palette().window().color().lightness() > 100:
            # Light background
            c = self.palette().dark().color()
            self.fLabelGradientColor1 = c
            self.fLabelGradientColor2 = QColor(c.red(), c.green(), c.blue(), 0)
            self.fLabelGradientColorT = [self.palette().buttonText().color(), self.palette().mid().color()]
        else:
            # Dark background
            self.fLabelGradientColor1 = QColor(0, 0, 0, 255)
            self.fLabelGradientColor2 = QColor(0, 0, 0, 0)
            self.fLabelGradientColorT = [Qt.white, Qt.darkGray]

        self.fLabelGradient = QLinearGradient(0, 0, 0, 1)
        self.fLabelGradient.setColorAt(0.0, self.fLabelGradientColor1)
        self.fLabelGradient.setColorAt(0.6, self.fLabelGradientColor1)
        self.fLabelGradient.setColorAt(1.0, self.fLabelGradientColor2)

        self.fLabelGradientRect = QRectF(0.0, 0.0, 0.0, 0.0)

        self.fCustomPaintMode  = self.CUSTOM_PAINT_MODE_NULL
        self.fCustomPaintColor = QColor(0xff, 0xff, 0xff)

        self.updateSizes()

        # Fake internal value, custom precision
        QDial.setMinimum(self, 0)
        QDial.setMaximum(self, self.fPrecision)
        QDial.setValue(self, 0)

        self.valueChanged.connect(self.slot_valueChanged)

    def getIndex(self):
        return self.fIndex

    def getBaseSize(self):
        return self.fPixmapBaseSize

    def forceWhiteLabelGradientText(self):
        self.fLabelGradientColor1 = QColor(0, 0, 0, 255)
        self.fLabelGradientColor2 = QColor(0, 0, 0, 0)
        self.fLabelGradientColorT = [Qt.white, Qt.darkGray]

    def setLabelColor(self, enabled, disabled):
        self.fLabelGradientColor1 = QColor(0, 0, 0, 255)
        self.fLabelGradientColor2 = QColor(0, 0, 0, 0)
        self.fLabelGradientColorT = [enabled, disabled]

    def updateSizes(self):
        self.fPixmapWidth  = self.fPixmap.width()
        self.fPixmapHeight = self.fPixmap.height()

        if self.fPixmapWidth < 1:
            self.fPixmapWidth = 1

        if self.fPixmapHeight < 1:
            self.fPixmapHeight = 1

        if self.fPixmapOrientation == self.HORIZONTAL:
            self.fPixmapBaseSize    = self.fPixmapHeight
            self.fPixmapLayersCount = self.fPixmapWidth / self.fPixmapHeight
        else:
            self.fPixmapBaseSize    = self.fPixmapWidth
            self.fPixmapLayersCount = self.fPixmapHeight / self.fPixmapWidth

        self.setMinimumSize(self.fPixmapBaseSize, self.fPixmapBaseSize + self.fLabelHeight + 5)
        self.setMaximumSize(self.fPixmapBaseSize, self.fPixmapBaseSize + self.fLabelHeight + 5)

        if not self.fLabel:
            self.fLabelHeight = 0
            self.fLabelWidth  = 0
            return

        self.fLabelWidth  = QFontMetrics(self.fLabelFont).width(self.fLabel)
        self.fLabelHeight = QFontMetrics(self.fLabelFont).height()

        self.fLabelPos.setX(float(self.fPixmapBaseSize)/2.0 - float(self.fLabelWidth)/2.0)

        if self.fPixmapNum in ("01", "02", "07", "08", "09", "10"):
            self.fLabelPos.setY(self.fPixmapBaseSize + self.fLabelHeight)
        elif self.fPixmapNum in ("11",):
            self.fLabelPos.setY(self.fPixmapBaseSize + self.fLabelHeight*2/3)
        else:
            self.fLabelPos.setY(self.fPixmapBaseSize + self.fLabelHeight/2)

        self.fLabelGradient.setStart(0, float(self.fPixmapBaseSize)/2.0)
        self.fLabelGradient.setFinalStop(0, self.fPixmapBaseSize + self.fLabelHeight + 5)

        self.fLabelGradientRect = QRectF(float(self.fPixmapBaseSize)/8.0, float(self.fPixmapBaseSize)/2.0, float(self.fPixmapBaseSize*3)/4.0, self.fPixmapBaseSize+self.fLabelHeight+5)

    def setCustomPaintMode(self, paintMode):
        if self.fCustomPaintMode == paintMode:
            return

        self.fCustomPaintMode = paintMode
        self.update()

    def setCustomPaintColor(self, color):
        if self.fCustomPaintColor == color:
            return

        self.fCustomPaintColor = color
        self.update()

    def setLabel(self, label):
        if self.fLabel == label:
            return

        self.fLabel = label
        self.updateSizes()
        self.update()

    def setIndex(self, index):
        self.fIndex = index

    def setPixmap(self, pixmapId):
        self.fPixmapNum = "%02i" % pixmapId
        self.fPixmap.load(":/bitmaps/dial_%s%s.png" % (self.fPixmapNum, "" if self.isEnabled() else "d"))

        if self.fPixmap.width() > self.fPixmap.height():
            self.fPixmapOrientation = self.HORIZONTAL
        else:
            self.fPixmapOrientation = self.VERTICAL

        # special pixmaps
        if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_NULL:
            # reserved for carla-wet, carla-vol, carla-pan and color
            if self.fPixmapNum == "03":
                self.fCustomPaintMode = self.CUSTOM_PAINT_MODE_COLOR

            # reserved for carla-L and carla-R
            elif self.fPixmapNum == "04":
                self.fCustomPaintMode = self.CUSTOM_PAINT_MODE_CARLA_L

            # reserved for zita
            elif self.fPixmapNum == "06":
                self.fCustomPaintMode = self.CUSTOM_PAINT_MODE_ZITA

        self.updateSizes()
        self.update()

    def setPrecision(self, value, isInteger):
        self.fPrecision = value
        self.fIsInteger = isInteger
        QDial.setMaximum(self, value)

    def setMinimum(self, value):
        self.fMinimum = value

    def setMaximum(self, value):
        self.fMaximum = value

    def setValue(self, value, emitSignal=False):
        if self.fRealValue == value:
            return

        if value <= self.fMinimum:
            qtValue = 0
            self.fRealValue = self.fMinimum

        elif value >= self.fMaximum:
            qtValue = self.fPrecision
            self.fRealValue = self.fMaximum

        else:
            qtValue = round(float(value - self.fMinimum) / float(self.fMaximum - self.fMinimum) * self.fPrecision)
            self.fRealValue = value

        # Block change signal, we'll handle it ourselves
        self.blockSignals(True)
        QDial.setValue(self, qtValue)
        self.blockSignals(False)

        if emitSignal:
            self.realValueChanged.emit(self.fRealValue)

    @pyqtSlot(int)
    def slot_valueChanged(self, value):
        self.fRealValue = float(value)/self.fPrecision * (self.fMaximum - self.fMinimum) + self.fMinimum
        self.realValueChanged.emit(self.fRealValue)

    @pyqtSlot()
    def slot_updatePixmap(self):
        self.setPixmap(int(self.fPixmapNum))

    def minimumSizeHint(self):
        return QSize(self.fPixmapBaseSize, self.fPixmapBaseSize)

    def sizeHint(self):
        return QSize(self.fPixmapBaseSize, self.fPixmapBaseSize)

    def changeEvent(self, event):
        QDial.changeEvent(self, event)

        # Force pixmap update if enabled state changes
        if event.type() == QEvent.EnabledChange:
            self.setPixmap(int(self.fPixmapNum))

    def enterEvent(self, event):
        self.fIsHovered = True
        if self.fHoverStep == self.HOVER_MIN:
            self.fHoverStep = self.HOVER_MIN + 1
        QDial.enterEvent(self, event)

    def leaveEvent(self, event):
        self.fIsHovered = False
        if self.fHoverStep == self.HOVER_MAX:
            self.fHoverStep = self.HOVER_MAX - 1
        QDial.leaveEvent(self, event)

    def mousePressEvent(self, event):
        if self.fDialMode == self.MODE_DEFAULT:
            return QDial.mousePressEvent(self, event)

        if event.button() == Qt.LeftButton:
            self.fIsPressed = True
            self.fLastDragPos = event.pos()
            self.fLastDragValue = self.fRealValue

    def mouseMoveEvent(self, event):
        if self.fDialMode == self.MODE_DEFAULT:
            return QDial.mouseMoveEvent(self, event)

        if not self.fIsPressed:
            return

        range = (self.fMaximum - self.fMinimum) / 4.0
        pos   = event.pos()
        dx    = range * float(pos.x() - self.fLastDragPos.x()) / self.width()
        dy    = range * float(pos.y() - self.fLastDragPos.y()) / self.height()
        value = self.fLastDragValue + dx - dy

        if value < self.fMinimum:
            value = self.fMinimum
        elif value > self.fMaximum:
            value = self.fMaximum
        elif self.fIsInteger:
            value = float(round(value))

        self.setValue(value, True)

    def mouseReleaseEvent(self, event):
        if self.fDialMode == self.MODE_DEFAULT:
            return QDial.mouseReleaseEvent(self, event)

        if self.fIsPressed:
            self.fIsPressed = False

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

        painter.save()
        painter.setRenderHint(QPainter.Antialiasing, True)

        if self.fLabel:
            if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_NULL:
                painter.setPen(self.fLabelGradientColor2)
                painter.setBrush(self.fLabelGradient)
                painter.drawRect(self.fLabelGradientRect)

            painter.setFont(self.fLabelFont)
            painter.setPen(self.fLabelGradientColorT[0 if self.isEnabled() else 1])
            painter.drawText(self.fLabelPos, self.fLabel)

        if self.isEnabled():
            normValue = float(self.fRealValue - self.fMinimum) / float(self.fMaximum - self.fMinimum)
            target    = QRectF(0.0, 0.0, self.fPixmapBaseSize, self.fPixmapBaseSize)

            curLayer = int((self.fPixmapLayersCount - 1) * normValue)

            if self.fPixmapOrientation == self.HORIZONTAL:
                xpos = self.fPixmapBaseSize * curLayer
                ypos = 0.0
            else:
                xpos = 0.0
                ypos = self.fPixmapBaseSize * curLayer

            source = QRectF(xpos, ypos, self.fPixmapBaseSize, self.fPixmapBaseSize)
            painter.drawPixmap(target, self.fPixmap, source)

            # Custom knobs (Dry/Wet and Volume)
            if self.fCustomPaintMode in (self.CUSTOM_PAINT_MODE_CARLA_WET, self.CUSTOM_PAINT_MODE_CARLA_VOL):
                # knob color
                colorGreen = QColor(0x5D, 0xE7, 0x3D).lighter(100 + self.fHoverStep*6)
                colorBlue  = QColor(0x3E, 0xB8, 0xBE).lighter(100 + self.fHoverStep*6)

                # draw small circle
                ballRect = QRectF(8.0, 8.0, 15.0, 15.0)
                ballPath = QPainterPath()
                ballPath.addEllipse(ballRect)
                #painter.drawRect(ballRect)
                tmpValue  = (0.375 + 0.75*normValue)
                ballValue = tmpValue - floor(tmpValue)
                ballPoint = ballPath.pointAtPercent(ballValue)

                # draw arc
                startAngle = 216*16
                spanAngle  = -252*16*normValue

                if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_CARLA_WET:
                    painter.setBrush(colorBlue)
                    painter.setPen(QPen(colorBlue, 0))
                    painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2))

                    gradient = QConicalGradient(15.5, 15.5, -45)
                    gradient.setColorAt(0.0,   colorBlue)
                    gradient.setColorAt(0.125, colorBlue)
                    gradient.setColorAt(0.625, colorGreen)
                    gradient.setColorAt(0.75,  colorGreen)
                    gradient.setColorAt(0.76,  colorGreen)
                    gradient.setColorAt(1.0,   colorGreen)
                    painter.setBrush(gradient)
                    painter.setPen(QPen(gradient, 3))

                else:
                    painter.setBrush(colorBlue)
                    painter.setPen(QPen(colorBlue, 0))
                    painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2))

                    painter.setBrush(colorBlue)
                    painter.setPen(QPen(colorBlue, 3))

                painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle)

            # Custom knobs (L and R)
            elif self.fCustomPaintMode in (self.CUSTOM_PAINT_MODE_CARLA_L, self.CUSTOM_PAINT_MODE_CARLA_R):
                # knob color
                color = QColor(0xAD, 0xD5, 0x48).lighter(100 + self.fHoverStep*6)

                # draw small circle
                ballRect = QRectF(7.0, 8.0, 11.0, 12.0)
                ballPath = QPainterPath()
                ballPath.addEllipse(ballRect)
                #painter.drawRect(ballRect)
                tmpValue  = (0.375 + 0.75*normValue)
                ballValue = tmpValue - floor(tmpValue)
                ballPoint = ballPath.pointAtPercent(ballValue)

                painter.setBrush(color)
                painter.setPen(QPen(color, 0))
                painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.0, 2.0))

                # draw arc
                if self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_CARLA_L:
                    startAngle = 216*16
                    spanAngle  = -252.0*16*normValue
                else:
                    startAngle = 324.0*16
                    spanAngle  = 252.0*16*(1.0-normValue)

                painter.setPen(QPen(color, 2))
                painter.drawArc(3.5, 4.5, 22.0, 22.0, startAngle, spanAngle)

            # Custom knobs (Color)
            elif self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_COLOR:
                # knob color
                color = self.fCustomPaintColor.lighter(100 + self.fHoverStep*6)

                # draw small circle
                ballRect = QRectF(8.0, 8.0, 15.0, 15.0)
                ballPath = QPainterPath()
                ballPath.addEllipse(ballRect)
                tmpValue  = (0.375 + 0.75*normValue)
                ballValue = tmpValue - floor(tmpValue)
                ballPoint = ballPath.pointAtPercent(ballValue)

                # draw arc
                startAngle = 216*16
                spanAngle  = -252*16*normValue

                painter.setBrush(color)
                painter.setPen(QPen(color, 0))
                painter.drawEllipse(QRectF(ballPoint.x(), ballPoint.y(), 2.2, 2.2))

                painter.setBrush(color)
                painter.setPen(QPen(color, 3))
                painter.drawArc(4.0, 4.0, 26.0, 26.0, startAngle, spanAngle)

            # Custom knobs (Zita)
            elif self.fCustomPaintMode == self.CUSTOM_PAINT_MODE_ZITA:
                a = normValue * pi * 1.5 - 2.35
                r = 10.0
                x = 10.5
                y = 10.5
                x += r * sin(a)
                y -= r * cos(a)
                painter.setBrush(Qt.black)
                painter.setPen(QPen(Qt.black, 2))
                painter.drawLine(QPointF(11.0, 11.0), QPointF(x, y))

            # Custom knobs
            else:
                painter.restore()
                return

            if self.HOVER_MIN < self.fHoverStep < self.HOVER_MAX:
                self.fHoverStep += 1 if self.fIsHovered else -1
                QTimer.singleShot(20, self.update)

        else: # isEnabled()
            target = QRectF(0.0, 0.0, self.fPixmapBaseSize, self.fPixmapBaseSize)
            painter.drawPixmap(target, self.fPixmap, target)

        painter.restore()

    def resizeEvent(self, event):
        QDial.resizeEvent(self, event)
        self.updateSizes()
Exemplo n.º 54
0
class Player(QWidget):
    grid = QGridLayout()
    def __init__(self):
        super().__init__()
        self.instance = vlc.Instance()
        self.mediaplayer = self.instance.media_player_new()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('RandomVK')
        self.setWindowIcon(QIcon('web.png'))
        self.Author_Label = QLabel()
        self.Name_Label = QLabel()
        self.Add_Button = QPushButton('Add')
        self.Add_Button.clicked.connect(self.Click_Add)
        self.PP_Button = QPushButton('Play')
        self.PP_Button.clicked.connect(self.Click_PP)
        self.Next_Button = QPushButton('Next')
        self.Next_Button.clicked.connect(self.Click_Next)
        self.Song_Image_Label = QLabel(self)
        self.Song_Image = QPixmap('blank.png')
        self.Song_Image_Label.setPixmap(self.Song_Image)
        self.Cost_Label = QLabel('-')
        self.grid.setSpacing(9)
        self.grid.addWidget(self.Song_Image_Label, 0, 1)
        self.grid.addWidget(self.Author_Label, 1, 0)
        self.grid.addWidget(self.Cost_Label, 1, 1)
        self.grid.addWidget(self.Name_Label, 1, 2)
        self.grid.addWidget(self.Add_Button, 2, 0)
        self.grid.addWidget(self.Next_Button, 2, 2)
        self.grid.addWidget(self.PP_Button, 2, 1)
        self.setLayout(self.grid)

    def Click_Next(self):
        self.audio = vk.get_audio()
        temp = tempfile.gettempdir()
        if os.name == 'nt':
            temp += '\\RandomVK'
        else:
            temp += '/RandomVK'
        if not os.path.exists(temp):
            os.mkdir(temp)
        resp = backend.requests.get(self.audio['url'])
        if 'image' in self.audio:
            img = backend.requests.get(self.audio['image'])
        else:
            self.Song_Image.load('blank.png')
        if os.name == 'nt':
            tempfile_rand = open(temp + '\\temp.mp3', 'wb')
            tempfile_rand.write(resp.content)
            tempfile_rand.close()
            self.media = self.instance.media_new(temp + '\\temp.mp3')
            if 'image' in self.audio:
                tmp_image = open(temp + '\\temp.png', 'wb')
                tmp_image.write(img.content)
                tmp_image.close()
                self.Song_Image.load(temp + '\\temp.png')
        else:
            tempfile_rand = open(temp + '/temp.mp3', 'wb')
            tempfile_rand.write(resp.content)
            tempfile_rand.close()
            self.media = self.instance.media_new(temp + '/temp.mp3')
            if 'image' in self.audio:
                tmp_image = open(temp + '/temp.png', 'wb')
                tmp_image.write(img.content)
                tmp_image.close()
                self.Song_Image.load(temp + '/temp.png')
        try:
            self.mediaplayer.stop()
        except:
            pass
        self.Song_Image_Label.setPixmap(self.Song_Image)
        self.mediaplayer.set_media(self.media)
        self.mediaplayer.play()
        self.time_last = time.time()
        self.PP_Button.setText('Pause')
        self.Author_Label.setText(self.audio['artist'])
        self.Name_Label.setText(self.audio['title'])
        self.thread = threading.Thread(target=self.th)
        self.thread.daemon = True
        self.thread.start()
    def Click_Add(self):
        global vk
        vk.add(self.audio['id'], self.audio['aid'])
    def Click_PP(self):
        if self.mediaplayer.is_playing():
            self.mediaplayer.pause()
            self.PP_Button.setText("Play")
            self.time_last = time.time()
            del self.thread
        else:
            self.mediaplayer.play()
            self.time_last -= time.time()
            self.audio['duration'] -= int(self.time_last)
            self.audio['duration'] *= -1
            self.audio['duration'] += 15
            self.PP_Button.setText('Pause')
            self.thread = threading.Thread(target=self.th)
            self.thread.daemon = True
            self.thread.start()

    def th(self):
        time.sleep(int(self.audio['duration']))
Exemplo n.º 55
0
 def pixmap(self):
     p = QPixmap()
     if self.value != Orb.Null:
         p.load('orbs/%s.png' % str(self.value))
     #p = p.scaled(40,40,1)
     return p
Exemplo n.º 56
0
class PixmapKeyboard(QWidget):
    # enum Orientation
    HORIZONTAL = 0
    VERTICAL   = 1

    # signals
    noteOn   = pyqtSignal(int)
    noteOff  = pyqtSignal(int)
    notesOn  = pyqtSignal()
    notesOff = pyqtSignal()

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

        self.fOctaves = 6
        self.fLastMouseNote = -1

        self.fEnabledKeys = []

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

        self.fPixmap = QPixmap("")

        self.setCursor(Qt.PointingHandCursor)
        self.setMode(self.HORIZONTAL)

    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 setMode(self, mode):
        if mode == self.HORIZONTAL:
            self.fMidiMap = kMidiKey2RectMapHorizontal
            self.fPixmap.load(":/bitmaps/kbd_h_dark.png")
            self.fPixmapMode = self.HORIZONTAL
            self.fWidth  = self.fPixmap.width()
            self.fHeight = self.fPixmap.height() / 2
        elif mode == self.VERTICAL:
            self.fMidiMap = kMidiKey2RectMapVertical
            self.fPixmap.load(":/bitmaps/kbd_v_dark.png")
            self.fPixmapMode = self.VERTICAL
            self.fWidth  = self.fPixmap.width() / 2
            self.fHeight = self.fPixmap.height()
        else:
            qCritical("PixmapKeyboard::setMode(%i) - invalid mode" % mode)
            return self.setMode(self.HORIZONTAL)

        self.setOctaves(self.fOctaves)

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

        self.fOctaves = octaves

        if self.fPixmapMode == self.HORIZONTAL:
            self.setMinimumSize(self.fWidth * self.fOctaves, self.fHeight)
            self.setMaximumSize(self.fWidth * self.fOctaves, self.fHeight)
        elif self.fPixmapMode == self.VERTICAL:
            self.setMinimumSize(self.fWidth, self.fHeight * self.fOctaves)
            self.setMaximumSize(self.fWidth, self.fHeight * self.fOctaves)

        self.update()

    def handleMousePos(self, pos):
        if self.fPixmapMode == self.HORIZONTAL:
            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())
        elif self.fPixmapMode == self.VERTICAL:
            if pos.y() < 0 or pos.y() > self.fOctaves * self.fHeight:
                return
            octave = int(self.fOctaves - pos.y() / self.fHeight)
            keyPos = QPointF(pos.x(), (pos.y()-1) % self.fHeight)
        else:
            return

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

        if note != -1:
            note += 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 minimumSizeHint(self):
        return QSize(self.fWidth, self.fHeight)

    def sizeHint(self):
        if self.fPixmapMode == self.HORIZONTAL:
            return QSize(self.fWidth * self.fOctaves, self.fHeight)
        elif self.fPixmapMode == self.VERTICAL:
            return QSize(self.fWidth, self.fHeight * self.fOctaves)
        else:
            return QSize(self.fWidth, self.fHeight)

    def keyPressEvent(self, event):
        if not event.isAutoRepeat():
            qKey = str(event.key())
            if qKey in kMidiKeyboard2KeyMap.keys():
                self.sendNoteOn(kMidiKeyboard2KeyMap.get(qKey))
        QWidget.keyPressEvent(self, event)

    def keyReleaseEvent(self, event):
        if not event.isAutoRepeat():
            qKey = str(event.key())
            if qKey in kMidiKeyboard2KeyMap.keys():
                self.sendNoteOff(kMidiKeyboard2KeyMap.get(qKey))
        QWidget.keyReleaseEvent(self, event)

    def mousePressEvent(self, event):
        self.fLastMouseNote = -1
        self.handleMousePos(event.pos())
        self.setFocus()
        QWidget.mousePressEvent(self, event)

    def mouseMoveEvent(self, event):
        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):
            if self.fPixmapMode == self.HORIZONTAL:
                target = QRectF(self.fWidth * octave, 0, self.fWidth, self.fHeight)
            elif self.fPixmapMode == self.VERTICAL:
                target = QRectF(0, self.fHeight * octave, self.fWidth, self.fHeight)
            else:
                return

            source = QRectF(0, 0, self.fWidth, self.fHeight)
            painter.drawPixmap(target, self.fPixmap, 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

            if self.fPixmapMode == self.VERTICAL:
                octave = self.fOctaves - octave - 1

            if self.fPixmapMode == self.HORIZONTAL:
                target = QRectF(pos.x() + (self.fWidth * octave), 0, pos.width(), pos.height())
                source = QRectF(pos.x(), self.fHeight, pos.width(), pos.height())
            elif self.fPixmapMode == self.VERTICAL:
                target = QRectF(pos.x(), pos.y() + (self.fHeight * octave), pos.width(), pos.height())
                source = QRectF(self.fWidth, pos.y(), pos.width(), pos.height())
            else:
                return

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

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

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

                    if self.fPixmapMode == self.HORIZONTAL:
                        target = QRectF(pos.x() + (self.fWidth * octave), 0, pos.width(), pos.height())
                        source = QRectF(pos.x(), 0, pos.width(), pos.height())
                    elif self.fPixmapMode == self.VERTICAL:
                        target = QRectF(pos.x(), pos.y() + (self.fHeight * octave), pos.width(), pos.height())
                        source = QRectF(0, pos.y(), pos.width(), pos.height())
                    else:
                        return

                    painter.drawPixmap(target, self.fPixmap, 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

            if self.fPixmapMode == self.VERTICAL:
                octave = self.fOctaves - octave - 1

            if self.fPixmapMode == self.HORIZONTAL:
                target = QRectF(pos.x() + (self.fWidth * octave), 0, pos.width(), pos.height())
                source = QRectF(pos.x(), self.fHeight, pos.width(), pos.height())
            elif self.fPixmapMode == self.VERTICAL:
                target = QRectF(pos.x(), pos.y() + (self.fHeight * octave), pos.width(), pos.height())
                source = QRectF(self.fWidth, pos.y(), pos.width(), pos.height())
            else:
                return

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

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

        for i in range(self.fOctaves):
            if self.fPixmapMode == self.HORIZONTAL:
                painter.drawText(i * 168 + (4 if i == 0 else 3), 35, 20, 20, Qt.AlignCenter, "C%i" % (i-1))
            elif self.fPixmapMode == self.VERTICAL:
                painter.drawText(33, (self.fOctaves * 168) - (i * 168) - 20, 20, 20, Qt.AlignCenter, "C%i" % (i-1))

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

    def _getRectFromMidiNote(self, note):
        baseNote = note % 12
        return self.fMidiMap.get(str(baseNote))
Exemplo n.º 57
0
class Ground(QLabel):
    def __init__(self, parent):
        QLabel.__init__(self, parent)
        self.symbol = QPixmap()
        self.symbol.load('gnd.png')
        self.symbol = self.symbol.scaledToWidth(30)
        self.resize(self.symbol.size())
        self.setPixmap(self.symbol)
        self.move(300, 300)
        self.show()

        self.Node = node(parent)
        self.Node.move(self.x() + 10, self.y())
        self.Node.id = 'N0'
        self.Node.show()
        self.parent().node_dict['N0'].add(self)

        # When right click on element a menu pops on
        self.PropMenu = QMenu(parent)
        # self.PropMenu.addAction('Rotate')
        self.PropMenu.addAction('Delete')
        # Setting Geometry of menu
        self.PropMenu.move(parent.frameGeometry().left() + self.x() + 30,
                           parent.frameGeometry().top() + self.y() + 30)

    def mousePressEvent(self, event):
        self.__mousePressPos = None
        self.__mouseMovePos = None
        if event.button() == QtCore.Qt.LeftButton:
            self.__mousePressPos = event.globalPos()
            self.__mouseMovePos = event.globalPos()

        if event.button() == QtCore.Qt.RightButton:
            action = self.PropMenu.exec()

            if action is not None:
                if action.text() == 'Delete':
                    print('Delete clicked')
                    self.deleteMe()

                # elif action.text() == 'Rotate':
                #     print('Rotate clicked')
                #     # self.Rotate()

        super(Ground, self).mousePressEvent(event)

    def mouseMoveEvent(self, event):
        if event.buttons() == QtCore.Qt.LeftButton:
            # adjust offset from clicked point to origin of widget
            currPos = self.mapToGlobal(self.pos())
            globalPos = event.globalPos()
            diff = globalPos - self.__mouseMovePos
            newPos = self.mapFromGlobal(currPos + diff)

            # Moving element to new position
            self.move(newPos)

            self.Node.move(newPos.x() + 10, newPos.y() )
            self.PropMenu.move(self.parent().frameGeometry().left() + newPos.x() + 30,
                               self.parent().frameGeometry().top() + newPos.y() + 30)

            self.__mouseMovePos = globalPos
        super(Ground, self).mouseMoveEvent(event)

    def mouseReleaseEvent(self, event):
        if self.__mousePressPos is not None:
            moved = event.globalPos() - self.__mousePressPos
            if moved.manhattanLength() > 3:
                event.ignore()
                return

        super(Ground, self).mouseReleaseEvent(event)

    def deleteMe(self):
        self.hide()
        self.Node.hide()
Exemplo n.º 58
0
class Inductor(element):
    def __init__(self, name, parent, value = 0.01):
        element.__init__(self, name, parent, value)
        self.Impedance = 1j *2 * np.pi * Current_src.freq * self.value

        # adding image to resistor(that is a QLabel object itself) as its symbol
        self.symbol = QPixmap()
        self.symbol.load('ind.png')
        self.symbol = self.symbol.scaledToWidth(100)
        self.resize(self.symbol.size())
        self.setPixmap(self.symbol)
        self.move(200, 100)

        self.valueText = QLineEdit(parent)
        self.valueText.move(self.x() + 30, self.y() + 40)
        self.valueText.resize(50, 15)
        self.valueText.setText(str(self.value) + '  H')

        self.idLabel = QLabel(parent)
        self.idLabel.move(self.x() + 45, self.y())
        self.idLabel.resize(20, 15)
        self.idLabel.setText(str(self.name))
        self.idLabel.show()

        self.nodeP = node(parent)
        self.nodeS = node(parent)
        self.nodeP.move(self.x(), self.y() + 22)
        self.nodeS.move(self.x() + 90, self.y() + 22)
        self.nodeP.show()
        self.nodeS.show()
        # first element tahr is connected to a ned is It's element.
        self.nodeP.connected_elements.add(self.name)
        self.nodeS.connected_elements.add(self.name)

        # When right click on element a menu pops on
        self.PropMenu = QMenu(parent)
        self.PropMenu.addAction('Change Value')
        self.PropMenu.addAction('Rotate')
        self.PropMenu.addAction('Delete')
        # Setting Geometry of menu
        self.PropMenu.move(parent.frameGeometry().left() + self.x() + 20,
                           parent.frameGeometry().top() + self.y() + 100)

        self.isHorizontal = True

        self.direction_label = QLabel(parent)
        self.direction = QPixmap()

        self.valueText.show()
        self.show()

    def mousePressEvent(self, event):
        self.__mousePressPos = None
        self.__mouseMovePos = None
        if event.button() == QtCore.Qt.LeftButton:
            self.__mousePressPos = event.globalPos()
            self.__mouseMovePos = event.globalPos()

        if event.button() == QtCore.Qt.RightButton:
            action = self.PropMenu.exec()

            if action is not None:
                if action.text() == 'Change Value':
                    print('Change Value clicked')
                    self.value = float(re.match('\d*(?:.\d*e?-?\d*)?', self.valueText.text()).group())
                    self.Impedance = 1j *2 * np.pi * Current_src.freq * self.value

                elif action.text() == 'Rotate':
                    print('Rotate clicked')
                    self.Rotate()

                elif action.text() == 'Delete':
                    print('Delete clicked')
                    self.deleteMe()
                    self.parent().elements.remove(self)

        super(Inductor, self).mousePressEvent(event)

    def mouseMoveEvent(self, event):
        if event.buttons() == QtCore.Qt.LeftButton:
            # adjust offset from clicked point to origin of widget
            currPos = self.mapToGlobal(self.pos())
            globalPos = event.globalPos()
            diff = globalPos - self.__mouseMovePos
            newPos = self.mapFromGlobal(currPos + diff)

            # Moving element to new position
            self.move(newPos)
            if self.isHorizontal:
                self.nodeP.move(newPos.x(), newPos.y() + 22)
                self.nodeS.move(newPos.x() + 90, newPos.y() + 22)
                self.valueText.move(newPos.x() + 30, newPos.y() + 40)
                self.idLabel.move(newPos.x() + 45, newPos.y())
                self.PropMenu.move(self.parent().frameGeometry().left() + newPos.x() + 20,
                                   self.parent().frameGeometry().top() + newPos.y() + 100)
            else:
                self.nodeP.move(newPos.x() + 18, newPos.y())
                self.nodeS.move(newPos.x() + 18, newPos.y() + 90)
                self.valueText.move(newPos.x() + 40, newPos.y() + 45)
                self.idLabel.move(newPos.x() + 40, newPos.y() + 25)
                self.PropMenu.move(self.parent().frameGeometry().left() + newPos.x() + 100,
                                   self.parent().frameGeometry().top() + newPos.y() + 20)

            self.__mouseMovePos = globalPos
        super(Inductor, self).mouseMoveEvent(event)

    def mouseReleaseEvent(self, event):
        if self.__mousePressPos is not None:
            moved = event.globalPos() - self.__mousePressPos
            if moved.manhattanLength() > 3:
                event.ignore()
                return

        super(Inductor, self).mouseReleaseEvent(event)

    def Rotate(self):
        if(self.isHorizontal):
            self.symbol = QPixmap()
            self.symbol.load('ind2.png')
            self.symbol = self.symbol.scaledToHeight(100)
            self.resize(self.symbol.size())
            self.setPixmap(self.symbol)

            self.valueText.move(self.x() + 40, self.y() + 45)
            self.idLabel.move(self.x() + 40, self.y() + 25)
            self.valueText.setText(str(self.value) + ' H')

            self.nodeP.move(self.x() + 18, self.y())
            self.nodeS.move(self.x() + 18, self.y() + 90)

            self.isHorizontal = False

        else:
            self.symbol = QPixmap()
            self.symbol.load('ind.png')
            self.symbol = self.symbol.scaledToWidth(100)
            self.resize(self.symbol.size())
            self.setPixmap(self.symbol)

            self.valueText.move(self.x() + 30, self.y() + 40)
            self.idLabel.move(self.x() + 45, self.y())
            self.valueText.setText(str(self.value) + ' H')

            self.nodeP.move(self.x(), self.y() + 22)
            self.nodeS.move(self.x() + 90, self.y() + 22)

            self.isHorizontal = True

    def deleteMe(self):
        self.hide()
        self.nodeP.hide()
        self.nodeS.hide()
        self.idLabel.hide()
        self.valueText.hide()

    def show_detail(self):
        self.setStyleSheet("background-color: yellow")
        if self.isHorizontal:
            self.direction.load('arrow_right.png')
            self.direction = self.direction.scaledToWidth(100)
            self.direction_label.resize(self.direction.size())
            self.direction_label.setPixmap(self.direction)
            self.direction_label.move(self.x(), self.y())
            self.direction_label.show()
        else:
            self.direction.load('arrow_down.png')
            self.direction = self.direction.scaledToHeight(100)
            self.direction_label.resize(self.direction.size())
            self.direction_label.setPixmap(self.direction)
            self.direction_label.move(self.x(), self.y())
            self.direction_label.show()

    def hide_detail(self):
        self.setStyleSheet("background-color: none")
        self.direction_label.hide()
Exemplo n.º 59
0
class LEDButton(QPushButton):
    # normal
    OFF    = 0
    BLUE   = 1
    GREEN  = 2
    RED    = 3
    YELLOW = 4
    # extra
    CALF   = 5

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

        self.fPixmap     = QPixmap()
        self.fPixmapRect = QRectF(0, 0, 0, 0)

        self.setCheckable(True)
        self.setText("")

        self.fLastColor = self.OFF
        self.fPixmap.load(":/bitmaps/led_off.png")

        self.setColor(self.BLUE)

    def setColor(self, color):
        self.fColor = color
        self._loadPixmapNow()

        # Fix calf off
        if color == self.CALF:
            self.fPixmap.load(":/bitmaps/led_calf_off.png")

        size = self.fPixmap.width()
        self.fPixmapRect = QRectF(0, 0, size, size)

        self.setMinimumSize(size, size)
        self.setMaximumSize(size, size)

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

        self._loadPixmapNow()

        painter.drawPixmap(self.fPixmapRect, self.fPixmap, self.fPixmapRect)

    def _loadPixmapNow(self):

        if self.isChecked():
            if self.fLastColor != self.fColor:
                if self.fColor == self.OFF:
                    self.fPixmap.load(":/bitmaps/led_off.png")
                elif self.fColor == self.BLUE:
                    self.fPixmap.load(":/bitmaps/led_blue.png")
                elif self.fColor == self.GREEN:
                    self.fPixmap.load(":/bitmaps/led_green.png")
                elif self.fColor == self.RED:
                    self.fPixmap.load(":/bitmaps/led_red.png")
                elif self.fColor == self.YELLOW:
                    self.fPixmap.load(":/bitmaps/led_yellow.png")
                elif self.fColor == self.CALF:
                    self.fPixmap.load(":/bitmaps/led_calf_on.png")
                else:
                    return

                self.fLastColor = self.fColor

        elif self.fLastColor != self.OFF:
            self.fPixmap.load(":/bitmaps/led_calf_off.png" if self.fColor == self.CALF else ":/bitmaps/led_off.png")
            self.fLastColor = self.OFF
Exemplo n.º 60
-1
def png(nom):
    """Charge l'image <nom>.png depuis le repertoire 'images/'.

    L'image doit être au format png, et son nom doit indiqué sans l'extension '.png'."""
    pixmap = QPixmap()
    pixmap.load(png_pth(nom), 'PNG')
    return pixmap