Exemplo n.º 1
0
    def initUI(self):
        self.label = QLabel(self)
        pixmap = QPixmap('logo.png')
        pixmap = pixmap.scaledToWidth(200)
        self.label.setPixmap(pixmap)
        self.lay = QVBoxLayout()
        self.label.setAlignment(Qt.AlignCenter)
        self.hor = QHBoxLayout()
        # self.lay.setContentsMargins(-1,-1,-1,0)

        self.Hbox = QHBoxLayout()
        # self.Hbox.addStretch(1)

        # self.hor.setAlignment(Qt.AlignCenter)
        # self.lay.addLayout(self.hor)
        self.setStyleSheet('QWidget {background-color:white;border:none}')
        # self.label.setStyleSheet('Q {width:50px;height:auto}')

        self.height = 60
        self.trycount = 0
        self.setGeometry(300, 150, 400, 600)
        self.setWindowTitle('Welcome')
        self.nameline = QLineEdit()
        self.passwordline = QLineEdit()
        self.nameline.setPlaceholderText("Username...")
        self.passwordline.setPlaceholderText("Password...")

        self.passwordline.setEchoMode(QLineEdit.Password)
        self.nameline.setStyleSheet('QLineEdit {background-color:#EEE;height:40;border-radius:3px;font-family:Arial;padding:6px}')
        self.passwordline.setStyleSheet('QLineEdit {background-color:#EEE;height:40;border-radius:3px;font-family:Arial;padding:6px;}')
        self.status = QLabel()
        self.status.setStyleSheet("color:red")
        self.lay.addStretch(1)
        self.lay.addWidget(self.label)
        self.lay.addStretch(1)

        self.lay.addWidget(self.nameline)
        self.lay.addWidget(self.passwordline)
        self.lay.addWidget(self.status)
        self.lay.setAlignment(self.nameline, Qt.AlignBottom)

        self.lay.addLayout(self.Hbox)
        # self.lay.addStretch(1)


        self.signin = QPushButton('Sign in')
        self.signup = QPushButton('Sign up')
        self.signin.setStyleSheet('QPushButton {background-color:#4990E2;color:white;height:50;font-size:20px;border-radius:3px;font-family:Arial;}')
        self.signup.setStyleSheet('QPushButton {background-color:#7FDC89;color:white;height:50;font-size:20px;border-radius:3px;font-family:Arial;}')

        self.signin.clicked.connect(self.authentification)
        self.signup.clicked.connect(self.authentification)
        self.Hbox.addWidget(self.signin)
        self.Hbox.addWidget(self.signup)
        self.setLayout(self.lay)
        self.show()
Exemplo n.º 2
0
 def set_img(self, future):
     content = future.result()
     img = QImage()
     img.loadFromData(content)
     pixmap = QPixmap(img)
     if pixmap.isNull():
         return None
     self.img_label.setPixmap(
         pixmap.scaledToWidth(self.img_label.width(),
                              mode=Qt.SmoothTransformation))
Exemplo n.º 3
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.º 4
0
 def set_image(self, image_filename):
     size = 800
     pixmap = QPixmap(image_filename)
     if pixmap.width() > pixmap.height():
         if pixmap.width() > size:
             pixmap = pixmap.scaledToWidth(size)
     else:
         if pixmap.height() > size:
             pixmap = pixmap.scaledToHeight(size)
     self.ui.label.setPixmap(pixmap)
     self.ui.label.setMask(pixmap.mask())
     self.ui.label.show()
Exemplo n.º 5
0
    def loadImage(self, path):
        self.markable_picture = QMarkablePicture(self)
        hbox = QHBoxLayout(self)
        picture = QPixmap(path)

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

        self.markable_picture.setPixmap(picture)
        hbox.addWidget(self.markable_picture)
        hbox.setContentsMargins(0, 0, 0, 0)
        self.setLayout(hbox)
Exemplo n.º 6
0
	def cloneBody(self, bodyspecName, dropPos, itemId=None, width=0):
		bodyDef = self.bodies[bodyspecName];
		if not itemId:
			if bodyspecName not in self.nameIndex:
				self.nameIndex[bodyspecName] = 0;
			self.nameIndex[bodyspecName] += 1;
			itemId = "{}{}".format(bodyspecName, self.nameIndex[bodyspecName]);
		body = BodyItem(itemId, bodyspecName, 2);
		self.bodyInstances.append(body);
		body.setPos(dropPos);
		group = QGraphicsItemGroup(body);
		self.renderScene.addItem(body);
		width = width*self.UNITS_PER_METER or self.DEFAULT_BODY_SIZE;

		for shape in bodyDef["shapes"]:
			vertices = shape["vertices"];
			if shape["type"] == "POLYGON":
				newItem = QGraphicsPolygonItem(QPolygonF(vertices));
			if shape["type"] == "CIRCLE":
				p1, p2 = vertices
				radius = math.hypot(p2.x()-p1.x(), p2.y()-p1.y());
				newItem = QGraphicsEllipseItem(p1.x()-radius, p1.y()-radius, radius*2, radius*2);
			pen = QPen();
			pen.setWidth(0);			
			newItem.setPen(pen);
			newItem.setParentItem(group);
		bounding = group.childrenBoundingRect();
		imagePath = None;
		height = 0;
		if (bodyDef["image"]):
			imagePath = bodyDef["image"];
			pixmap = QPixmap(imagePath);
			body.setPixmap(pixmap);
			pm = QGraphicsPixmapItem(pixmap.scaledToWidth(width), body);
			body.setImg(pm);
			pm.setFlags(QGraphicsItem.ItemStacksBehindParent);
			pm.setOffset(0, -pm.boundingRect().height());
			group.setScale(width/self.TRANSCOORD_X);
			height = pm.boundingRect().height();
		else:
			group.setScale(width/bounding.width());
			height = bounding.height();
		for item in body.childItems():
			item.setPos(item.pos().x(), item.pos().y() + height)
		body.updateBorder();

		return body;
Exemplo n.º 7
0
    def set_paragraph(self, h2='', h3='', text='', img=None):
        if h2 != '':
            lbl_h2 = QLabel(h2, self.inner)
            fnt = lbl_h2.font()
            fnt.setPointSize(self.H2_FONT_SIZE)
            lbl_h2.setFont(fnt)
            lbl_h2.setFixedHeight(self.H2_HEIGHT)
            lbl_h2.setAlignment(Qt.AlignBottom)
            lbl_h2.setMargin(self.SIDE_MARGIN)
            self.vbox.addWidget(lbl_h2)

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

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

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

        self.inner.setLayout(self.vbox)
Exemplo n.º 8
0
 def put_cv2_image(self, image, widget):
     height, width = image.shape[0:2]
     qImg = self.cv2toQImage(image)
     pixmap = QPixmap(qImg)
     if height > width:
         if height > self.preview_size:
             pixmap = pixmap.scaledToHeight(self.preview_size)
     else:
         if width > self.preview_size:
             pixmap = pixmap.scaledToWidth(self.preview_size)
     widget.setPixmap(pixmap)
     #give hints to DrawableLabel() and MyLabel()
     widget.perspective = self.perspective
     widget.focus = self.focus
     widget.slitpos = self.slitpos
     w = pixmap.width()
     h = pixmap.height()
     x = ( self.preview_size - w ) // 2
     y = ( self.preview_size - h ) // 2
     widget.geometry = x,y,w,h
Exemplo n.º 9
0
def scaledPixmap(path: str, scale: float) -> QPixmap:
    pixmap = QPixmap(path)
    if scale > 1.0:
        pixmap = pixmap.scaledToWidth(pixmap.width() * scale, Qt.SmoothTransformation)
        pixmap.setDevicePixelRatio(scale)
    return pixmap
Exemplo n.º 10
0
class Ui_AboutWindow(QMainWindow):
    def __init__(self):
        super(Ui_AboutWindow, self).__init__()
        self.setWindowFlags(Qt.WindowStaysOnTopHint | Qt.CustomizeWindowHint)
        self.setWindowIcon(QIcon('icon.ico'))
        self.setFixedSize(241, 190)

    def setupUi(self):
        self.centralwidget = QWidget(self)
        with open("style.css", 'r') as file:
            self.centralwidget.setStyleSheet(file.read())
        self.verticalLayoutWidget = QWidget(self.centralwidget)
        self.verticalLayoutWidget.setGeometry(QRect(10, 10, 221, 81))
        self.verticalLayout = QVBoxLayout(self.verticalLayoutWidget)
        self.verticalLayout.setContentsMargins(0, 0, 0, 0)
        self.label_logo = QLabel(self.verticalLayoutWidget)
        self.pixmap = QPixmap('icon.ico')
        self.pixmap = self.pixmap.scaledToWidth(30, Qt.SmoothTransformation)
        self.label_logo.setPixmap(self.pixmap)
        self.verticalLayout.addWidget(self.label_logo, 0, Qt.AlignHCenter)
        self.label_name = QLabel(self.verticalLayoutWidget)
        font = QFont()
        font.setPointSize(13)
        font.setStyleStrategy(QFont.PreferAntialias)
        self.label_name.setFont(font)
        self.label_name.setLayoutDirection(Qt.LeftToRight)
        self.verticalLayout.addWidget(self.label_name, 0, Qt.AlignHCenter)
        self.label_version = QLabel(self.verticalLayoutWidget)
        font = QFont()
        font.setPointSize(10)
        self.label_version.setFont(font)
        self.label_version.setLayoutDirection(Qt.LeftToRight)
        self.verticalLayout.addWidget(self.label_version, 0, Qt.AlignHCenter)
        self.verticalLayoutWidget_2 = QWidget(self.centralwidget)
        self.verticalLayoutWidget_2.setGeometry(QRect(10, 100, 221, 81))
        self.verticalLayout_2 = QVBoxLayout(self.verticalLayoutWidget_2)
        self.verticalLayout_2.setContentsMargins(0, 0, 0, 0)
        self.label_copyright = QLabel(self.verticalLayoutWidget_2)
        font = QFont()
        font.setPointSize(10)
        self.label_copyright.setFont(font)
        self.label_copyright.setLayoutDirection(Qt.LeftToRight)
        self.verticalLayout_2.addWidget(self.label_copyright, 0,
                                        Qt.AlignHCenter)
        self.label_author = QLabel(self.verticalLayoutWidget_2)
        font = QFont()
        font.setPointSize(10)
        self.label_author.setFont(font)
        self.label_author.setLayoutDirection(Qt.LeftToRight)
        self.verticalLayout_2.addWidget(self.label_author, 0, Qt.AlignHCenter)
        self.button_quit_about = QPushButton(self.verticalLayoutWidget_2)
        self.verticalLayout_2.addWidget(self.button_quit_about)
        self.button_quit_about.setMinimumSize(100, 30)
        self.button_quit_about.setProperty('class', 'Aqua')

        with open("style.css", 'r') as file:
            self.button_quit_about.setStyleSheet(file.read())

        self.setCentralWidget(self.centralwidget)
        self.retranslateUi()
        QMetaObject.connectSlotsByName(self)

    def retranslateUi(self):
        _translate = QCoreApplication.translate
        self.setWindowTitle(_translate("MainWindow", "About"))
        self.label_name.setText(_translate("MainWindow", "PyDebloatX"))
        self.label_version.setText(_translate("MainWindow", ""))
        self.label_copyright.setText(
            _translate("MainWindow", "Copyright © 2020 by"))
        self.label_author.setText(
            _translate("MainWindow", "Anton Grouchtchak."))
        self.button_quit_about.setText(_translate("MainWindow", "OK"))
Exemplo n.º 11
0
class Explorer(QWidget):
    
    path='./imgs3/'
    dirs=[]
    currentDir=1
    currentDirSize=0
    currentFile=0

    projectInfo=[]
    infoList=[]
    infoIndex=[]

    infoLabel=[]

    img=''

    infoEdit=[]

    checkBox=[]
    #checkList=['火车站', '地铁/轻轨站', '其它', '城市中心', '城市边缘', '郊外', '等候式', '通过式', '结合式', '宽敞的站前广场', '必要的集散空间', '垂直组织集约化用地', '其它', '换乘地铁', '换乘巴士', '换乘其它', '商业', '餐饮', '办公', '居住', '娱乐', '其它', '简约', '适中', '复杂', '上跨式', '侧立式' ,'其它', '线性', '非线性', '混合']
    #checkListGroup=['类型', '城市区位', '客流模式', '前广场', '换乘', '附属功能', '形式复杂度', '与铁道关系', '线性/非线性']
    checkList=[]
    checkListGroup=[]

    
    df=[]

    
    def getPreviousImg(self):
        files=os.listdir(self.path+str(self.currentDir))
        self.currentDirSize=len(files)
        if self.currentFile - 1 >= 1:
            self.currentFile -= 1
        else:
            QMessageBox.question(self, 'Message',"已经是项目第一张图片", QMessageBox.Yes, QMessageBox.Yes)

        self.img=self.path + str(self.currentDir) + '/' + str(self.currentFile) + '.jpg'

    def getNextImg(self):
        files=os.listdir(self.path+str(self.currentDir))
        self.currentDirSize=len(files)
        if self.currentFile + 1 <= self.currentDirSize:
            self.currentFile += 1
        else:
            reply=QMessageBox.question(self, 'Message',"完成该项目?", QMessageBox.Yes |QMessageBox.No, QMessageBox.No)
            if reply==QMessageBox.Yes:
                
                self.save()

                self.currentDir += 1
                self.currentFile = 1
                self.rSetInfoList()
                self.setCheckBox()
                self.navigationEdit.setText(str(self.currentDir))
                #QApplication.processEvents()

                
        #self.img=self.path+self.dirs[currentDir-1]+'/'+files[currentFile-1]
        self.img=self.path + str(self.currentDir) + '/' + str(self.currentFile) + '.jpg'

    def setImg(self):
        self.pixmap = QPixmap(self.img)
        width=self.pixmap.width()
        height=self.pixmap.height()
        if height/width > 6/15:
            self.pixmap=self.pixmap.scaledToHeight(600)
        else:
            self.pixmap=self.pixmap.scaledToWidth(1500)
        self.imgLabel.setPixmap(self.pixmap)
        #print(self.pixmap.width(),self.pixmap.height())

    def previousClicked(self):
        #print('previousClicked')
        self.getPreviousImg()
        self.setImg()

    def nextClicked(self):
        #print('nextClicked')
        self.getNextImg()
        self.setImg()


    def setInfoList(self):
        self.infoList=self.projectInfo.iloc[self.currentDir-1].tolist()
        self.infoLabel=[]
        infoVbox = QVBoxLayout()
        infoHbox =[] 
        for i in range(len(self.infoIndex)):
            infoHbox.append(QHBoxLayout())
            self.infoLabel.append(QLabel(self.infoIndex[i]+':\t'))
            self.infoEdit.append(QLineEdit(self))
            self.infoEdit[i].setText(str(self.infoList[i]))
            infoHbox[i].addWidget(self.infoLabel[i])
            infoHbox[i].addWidget(self.infoEdit[i])
            infoVbox.addLayout(infoHbox[i])
        self.infoGroup.setLayout(infoVbox)

    def rSetInfoList(self):
        self.infoList=self.projectInfo.iloc[self.currentDir-1].tolist()
        for i in range(len(self.infoIndex)):
            self.infoLabel[i].setText(self.infoIndex[i]+':\t')
            self.infoEdit[i].setText(str(self.infoList[i]))

    def navigationConfirm(self):
        self.save()

        self.currentDir=int(self.navigationEdit.text())
        self.currentFile=1
        
        self.img=self.path + str(self.currentDir) + '/' + str(self.currentFile) + '.jpg'
        self.setImg()
        self.rSetInfoList()
        self.setCheckBox()
        

    def nextProject(self):
        self.save()

        self.currentDir+=1
        self.currentFile=1
        
        self.img=self.path + str(self.currentDir) + '/' + str(self.currentFile) + '.jpg'
        self.setImg()
        self.rSetInfoList()
        self.setCheckBox()
        self.navigationEdit.setText(str(self.currentDir))

    def setCheckBox(self):
        try:
            status = self.df[str(self.currentDir)].tolist()
            #print(status)
            for i in range(len(self.checkBox)):
                self.checkBox[i].setCheckState(status[i]==1)        
        except BaseException:
            for i in range(len(self.checkBox)):
                self.checkBox[i].setCheckState(False)

    def save(self):
        temp=[]
        for i in range(len(self.checkBox)):
            if self.checkBox[i].checkState() > 0:
                temp.append(1)
            else:
                temp.append(0)
        self.df[str(self.currentDir)]=temp
        self.df=self.df.sort_index(axis=1)
        group = self.df['Group']
        self.df.drop(labels=['Group'], axis=1,inplace = True)
        self.df.insert(0, 'Group', group)
        self.df.to_csv('tags.csv',encoding='GBK')

        temp=[]
        for edit in self.infoEdit:
            temp.append(edit.text())
        self.projectInfo.loc[self.currentDir-1]=temp
        #print(self.projectInfo.loc[self.currentDir-1])
        self.projectInfo.to_csv('projectInfo.csv',index=False)

    def __init__(self):
        super().__init__()

        self.projectInfo=pd.read_csv('projectInfo.csv',engine='python')
        self.infoIndex=self.projectInfo.columns.tolist()
        

        self.getNextImg()
        try:
            self.df=pd.read_csv('tags.csv',engine='python',index_col='Tags')
        except Exception as e:
            reply=QMessageBox.information(self, 'Warning',"找不到tags.csv,请依格式创建tags.csv", QMessageBox.Yes)
            if reply == QMessageBox.Yes:
                sys.exit(0)

        self.checkList=self.df.index.tolist()
        self.checkListGroup=self.df['Group'].tolist()
        self.initUI()
      
    def initUI(self):      
        
        #info
        self.infoGroup = QGroupBox("Project_Infomation")
        self.setInfoList()

        #img
        self.imgLabel = QLabel(self)
        self.setImg()
        
        #leftVboxLayout
        leftVboxLayout = QVBoxLayout()
        leftVboxLayout.addWidget(self.infoGroup)
        leftVboxLayout.addStretch(1)
        leftVboxLayout.addWidget(self.imgLabel)
        
        #navigationEdit
        self.navigationEdit = QLineEdit(self)

        #navigationConfirmButton
        self.navigationConfirmButton = QPushButton("go to this project")
        self.navigationConfirmButton.clicked.connect(self.navigationConfirm)
        #nextProjectButton
        self.nextProjectButton = QPushButton("next project")
        self.nextProjectButton.clicked.connect(self.nextProject)


        #checkBox
        self.checkVboxlayout = QVBoxLayout()
        #count=0
        for i in range(len(self.checkList)):
            #if i == 0 or i == 3 or i == 6 or i == 9 or i == 13 or i == 16 or i == 22 or i == 25 or i == 28:
            if self.checkListGroup[i] == self.checkListGroup[i]:
                self.checkVboxlayout.addWidget(QLabel('\t'+self.checkListGroup[i]))
                #count += 1
            self.checkBox.append(QCheckBox(self.checkList[i], self))
            self.checkVboxlayout.addWidget(self.checkBox[i])
            self.checkVboxlayout.addStretch(1)
        self.setCheckBox()

        #scrollArea
        self.scrollWidget=QWidget()
        self.scrollWidget.setLayout(self.checkVboxlayout)

        self.scrollArea = QScrollArea()
        self.scrollArea.setWidget(self.scrollWidget)

        #button
        self.previousButton = QPushButton("PREVIOUS")
        self.previousButton.clicked.connect(self.previousClicked)
        self.nextButton = QPushButton("NEXT")
        self.nextButton.clicked.connect(self.nextClicked)
        
        self.buttonHboxlayout = QHBoxLayout()
        self.buttonHboxlayout.addStretch(1)
        self.buttonHboxlayout.addWidget(self.previousButton)
        self.buttonHboxlayout.addWidget(self.nextButton)
        

        #rightVboxLayout
        rightVboxLayout = QVBoxLayout()
        rightVboxLayout.addWidget(self.navigationEdit)
        rightVboxLayout.addWidget(self.navigationConfirmButton)
        rightVboxLayout.addWidget(self.nextProjectButton)
        #rightVboxLayout.addStretch(1)
        rightVboxLayout.addWidget(self.scrollArea)
        rightVboxLayout.addLayout(self.buttonHboxlayout)
        


        wholeHbox = QHBoxLayout()
        wholeHbox.addLayout(leftVboxLayout)
        wholeHbox.addStretch(1)
        wholeHbox.addLayout(rightVboxLayout)

        self.setLayout(wholeHbox)            
        self.setGeometry(50,50,50,50)
        self.setWindowTitle('imgExplorer') 
        self.setMinimumSize(1000,600)
        self.show()
Exemplo n.º 12
0
class MainWindow(QWidget):
    def __init__(self, width, height):
        super().__init__()
        self.resize(width, height)  # устанавливаем размер окна по размеру экрана
        self.setWindowTitle('FormulaVoiceInput')  # заголовок

        self.tex = QPlainTextEdit()  # редактируемое текстовое поле, в котором будут выводиться команды TEX
        self.set_tex()  # настройка начального текста, необходимого для компиляции из tex в pdf

        self.image = QLabel()  # здесь выводится картинка с формулой
        self.pixmap = QPixmap()  # пиксельная карта для картинки
        self.scale = 1  # текущий к-т масштабирования картинки
        self.scroll = QScrollArea()  # область с полосами прокрутки

        self.slider = QSlider(Qt.Horizontal)  # ползунок для изменения масштаба
        self.set_slider()

        self.status_bar = QStatusBar()  # нижняя строка состояния
        self.status_bar.addWidget(self.slider)  # добавляем ползунок для изменения масштаба
        self.grid = QGridLayout()  # макет сетки для виджетов
        self.set_layout()  # установка макета

        self.words = SpeechProcessing(self.tex)  # для обработки распознанной речи
        self.subprocess = QProcess(self)  # подпроцесс для получения текста из pocketsphinx
        self.speech_to_text()  # распознавание речи

        self.show()

    def set_tex(self):
        # начальная строка
        start_line = "\\documentclass{article}\n\
\\usepackage[left=0mm,right=0mm,top=0mm,bottom=0mm,bindingoffset=0mm]{geometry}\n\
\\usepackage[fleqn]{amsmath}\n\
\\begin{document}\n\
\\begin{gather*}\n\n\
\\end{gather*}\n\
\\end{document}"
        self.tex.insertPlainText(start_line)  # вставка начальной строки
        self.tex.find('begin{gather*}',
                      QTextDocument.FindBackward)  # находим место фрагмента begin{gather*}
        self.tex.moveCursor(QTextCursor.Down)  # устанавливаем курсор внутри

    def set_slider(self):
        self.slider.setMinimum(0)  # минимальный масштаб
        self.slider.setMaximum(200)  # максимальный масштаб
        self.slider.setValue(100)  # устанавливаем ползунок посередине
        self.slider.valueChanged[int].\
            connect(self.scale_img)  # обработчик изменений положения ползунка

    def scale_img(self, scale):  # масштабирование картинки с формулой
        self.scale = scale / 100
        self.image = QLabel()  # создаем новый виджет для картинки
        # устанавливаем масштабированную картинку
        self.image.setPixmap(self.pixmap.scaledToWidth(self.pixmap.size().width() * self.scale))
        self.scroll.setWidget(self.image)  # добавляем новый виджет в область прокрутки

    def set_layout(self):
        self.grid.addWidget(self.tex, 1, 0)
        self.grid.setSpacing(20)
        self.grid.addWidget(self.scroll, 1, 1)
        self.grid.addWidget(self.status_bar, 2, 1)
        self.setLayout(self.grid)  # устанавливаем макет сетки для окна

    def speech_to_text(self):  # распознавание речи с микрофона с помощью pocketsphinx
        logs = open('speech/pocketsphinx_logs', 'w')  # создаем файл, в который будут записываться логи от pocketsphinx
        cmd = "pocketsphinx_continuous\
        -hmm speech/map \
        -dict speech/math.dict \
        -jsgf speech/math.jsgf \
        -logfn speech/pocketsphinx_logs \
              -inmic yes"
        args = shlex.split(cmd)
        self.subprocess.\
            readyReadStandardOutput.connect(self.stdout_ready)
        self.subprocess.start(args[0], args[1:])

    def stdout_ready(self):
        # меняем кодировку текста, полученного в рез-те распознавания
        text = bytearray(self.subprocess.readAllStandardOutput()).decode("utf-8").rstrip()
        if text == 'новая формула':
            self.words.new_formula()
        elif text == 'обновить':
            self.create_img()
            self.update_img()
        else:
            self.words.queue.extend(text.split())  # добавляем новые слова
            self.words.parsing()  # анализ распознанных слов
            self.create_img()
            self.update_img()

    def create_img(self):  # получение pdf из файла tex
        tex_file = open('tex_file.tex', 'w')  # создаем файл tex_file.tex
        tex_file.write(self.tex.toPlainText())  # запись текста из self.tex в tex_file
        tex_file.close()
        self.start_subprocess('pdflatex tex_file.tex', 1000)
        if path.isfile('tex_file.pdf'):
            self.start_subprocess('pdftoppm -png tex_file.pdf formula', 500)

    # запуск подпроцесса с параметрами, указанными в cmd и временем ожидания завершения delay(в миллисекундах)
    def start_subprocess(self, cmd, delay):
        args = shlex.split(cmd)
        p = QProcess(self)
        p.start(args[0], args[1:])
        p.waitForFinished(delay)
        p.close()

    # загрузка новой картинки при добавлении новых символов
    def update_img(self):
        if path.isfile('formula-1.png'):
            self.pixmap.load('formula-1.png')
            self.image = QLabel()
            w = self.pixmap.size().width()
            self.image.setPixmap(self.pixmap.scaledToWidth(w * self.scale))
            self.scroll.setWidget(self.image)
Exemplo n.º 13
0
    def setupUi(self):

        self.setObjectName("Main_Form")
        self.resize(600, 300)
        self.setStyleSheet("color: #212121;")

        # Инициализация дочерних виджетов
        self.label_image = QtWidgets.QLabel(self)
        self.label_image.setGeometry(QtCore.QRect(10, 10, 131, 300))
        self.label_image.setObjectName("label_image")
        pixmap = QPixmap(self.movie.image_path)
        pixmap.scaledToWidth(131)
        pixmap.scaledToHeight(300)
        self.label_image.setPixmap(pixmap)

        self.label_title = QtWidgets.QLabel(self)
        self.label_title.setGeometry(QtCore.QRect(170, 10, self.width(), 21))
        self.label_title.setStyleSheet("font-weight: bold; font-size:  16px; color: black")
        self.label_title.setObjectName("label_title")
        self.label_title.setText(self.movie.title_ru)

        self.label_description = QtWidgets.QLabel(self)
        self.label_description.setGeometry(QtCore.QRect(170, 80, 231, 21))
        self.label_description.setObjectName("label_description")
        self.label_description.setText(self.movie.description)

        self.label_country = QtWidgets.QLabel(self)
        self.label_country.setGeometry(QtCore.QRect(170, 40, 221, 31))
        self.label_country.setObjectName("label_country")
        self.label_country.setText(f"<b>Страна</b> {self.movie.country}")

        self.label_created_date = QtWidgets.QLabel(self)
        self.label_created_date.setGeometry(QtCore.QRect(170, 110, 221, 21))
        self.label_created_date.setObjectName("label_created_date")
        self.label_created_date.setText(f"<b>Год выпуска</b> {self.movie.created_date}")

        self.label_rating = QtWidgets.QLabel(self)
        self.label_rating.setGeometry(QtCore.QRect(170, 140, 221, 21))
        self.label_rating.setObjectName("label_rating")
        self.label_rating.setText(f"{self.movie.rating}⭐")

        self.label_genres = QtWidgets.QLabel(self)
        self.label_genres.setGeometry(QtCore.QRect(170, 200, 221, 21))
        self.label_genres.setObjectName("label_genres")
        self.label_genres.setText(f"<b>Жанры</b> {self.movie.genres}")

        self.label_type = QtWidgets.QLabel(self)
        self.label_type.setGeometry(QtCore.QRect(170, 230, 221, 21))
        self.label_type.setText(self.movie.movie_type)
        self.label_type.setStyleSheet("font-weight: bold; font-size: 15px; marin: 8px")

        self.pushButton_delete = QtWidgets.QPushButton(self)
        self.pushButton_delete.setGeometry(self.width(), 250, 100, 50)
        self.pushButton_delete.setText("Удалить")
        self.pushButton_delete.setStyleSheet("margin: 8px")
        self.pushButton_delete.clicked.connect(self.removeItem)

        self.pushButton_favorite = QtWidgets.QPushButton(self)
        self.pushButton_favorite.setGeometry(self.width(), 200, 100, 50)
        self.pushButton_favorite.setText("В избранное")
        self.pushButton_favorite.setStyleSheet("margin: 8px")
        self.pushButton_favorite.clicked.connect(self.add_to_favorite)

        QtCore.QMetaObject.connectSlotsByName(self)
Exemplo n.º 14
0
class QmyMainWindow(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)  #调用父类构造函数
        self.ui = Ui_MainWindow()  #创建UI对象
        self.ui.setupUi(self)  #构造UI界面

        self.curPixmap = QPixmap()  #图片
        self.pixRatio = 1  #显示比例
        self.itemFlags = (Qt.ItemIsSelectable | Qt.ItemIsUserCheckable
                          | Qt.ItemIsEnabled | Qt.ItemIsAutoTristate)  #节点标志
        self.setCentralWidget(self.ui.scrollArea)
        self.__iniTree()

        #以下的属性设置在UI Designer里已经设置,这里是代码设置方法
        self.ui.dockWidget.setFeatures(QDockWidget.AllDockWidgetFeatures)
        self.ui.dockWidget.setAllowedAreas(Qt.LeftDockWidgetArea
                                           | Qt.RightDockWidgetArea)
        self.ui.scrollArea.setWidgetResizable(True)  #自动调整内部组件大小
        self.ui.scrollArea.setAlignment(Qt.AlignCenter)
        self.ui.LabPicture.setAlignment(Qt.AlignCenter)

##  =================自定义功能函数================================

    def __iniTree(self):  ##初始化目录树
        self.ui.treeFiles.clear()
        icon = QIcon(":/images/icons/15.ico")

        item = QTreeWidgetItem(TreeItemType.itTopItem.value)
        item.setIcon(TreeColNum.colItem.value, icon)
        item.setText(TreeColNum.colItem.value, "图片文件")
        item.setFlags(self.itemFlags)
        item.setCheckState(TreeColNum.colItem.value, Qt.Checked)

        item.setData(TreeColNum.colItem.value, Qt.UserRole, "")
        self.ui.treeFiles.addTopLevelItem(item)

    def __displayImage(self, item):  ##显示节点item 的图片
        filename = item.data(TreeColNum.colItem.value, Qt.UserRole)
        self.ui.statusBar.showMessage(filename)  #状态栏显示文件名

        self.curPixmap.load(filename)  #原始图片
        self.on_actZoomFitH_triggered()  #适合高度显示

        self.ui.actZoomFitH.setEnabled(True)
        self.ui.actZoomFitW.setEnabled(True)
        self.ui.actZoomIn.setEnabled(True)
        self.ui.actZoomOut.setEnabled(True)
        self.ui.actZoomRealSize.setEnabled(True)

    def __changeItemCaption(self, item):  ##递归调用函数,修改节点标题
        title = "*" + item.text(TreeColNum.colItem.value)
        item.setText(TreeColNum.colItem.value, title)
        if (item.childCount() > 0):
            for i in range(item.childCount()):
                self.__changeItemCaption(item.child(i))

##  ===========connectSlotsByName() 自动连接的槽函数=================

    @pyqtSlot()  ##添加目录节点
    def on_actTree_AddFolder_triggered(self):
        dirStr = QFileDialog.getExistingDirectory()  #选择目录
        if (dirStr == ""):
            return

        parItem = self.ui.treeFiles.currentItem()  #当前节点
        if (parItem == None):
            parItem = self.ui.treeFiles.topLevelItem(0)

        icon = QIcon(":/images/icons/open3.bmp")

        dirObj = QDir(dirStr)  #QDir对象
        nodeText = dirObj.dirName()  #最后一级目录的名称

        item = QTreeWidgetItem(TreeItemType.itGroupItem.value)  #节点类型
        item.setIcon(TreeColNum.colItem.value, icon)
        item.setText(TreeColNum.colItem.value, nodeText)  #第1列
        item.setText(TreeColNum.colItemType.value, "Group")  #第2列
        item.setFlags(self.itemFlags)
        item.setCheckState(TreeColNum.colItem.value, Qt.Checked)

        item.setData(TreeColNum.colItem.value, Qt.UserRole, dirStr)  #关联数据为目录全名
        parItem.addChild(item)
        parItem.setExpanded(True)  #展开节点

    @pyqtSlot()  ##添加图片文件节点
    def on_actTree_AddFiles_triggered(self):
        fileList, flt = QFileDialog.getOpenFileNames(self, "选择一个或多个文件", "",
                                                     "Images(*.jpg)")
        #多选文件,返回两个结果,fileList是一个列表类型,存储了所有文件名; flt是设置的文件filter,即"Images(*.jpg)"
        if (len(fileList) < 1):  #fileList是list[str]
            return

        item = self.ui.treeFiles.currentItem()  #当前节点
        if (item.type() == TreeItemType.itImageItem.value
            ):  #若当前节点是图片节点,取其父节点作为父节点
            parItem = item.parent()
        else:  #否则取当前节点为父节点
            parItem = item

        icon = QIcon(":/images/icons/31.ico")
        for i in range(len(fileList)):
            fullFileName = fileList[i]  #带路径文件名
            fileinfo = QFileInfo(fullFileName)
            nodeText = fileinfo.fileName()  #不带路径文件名

            item = QTreeWidgetItem(TreeItemType.itImageItem.value)  #节点类型
            item.setIcon(TreeColNum.colItem.value, icon)  #第1列的图标
            item.setText(TreeColNum.colItem.value, nodeText)  #第1列的文字
            item.setText(TreeColNum.colItemType.value, "Image")  #第2列的文字
            item.setFlags(self.itemFlags)
            item.setCheckState(TreeColNum.colItem.value, Qt.Checked)

            item.setData(TreeColNum.colItem.value, Qt.UserRole,
                         fullFileName)  #关联数据为文件全名
            parItem.addChild(item)

        parItem.setExpanded(True)  #展开节点

    @pyqtSlot()  ##删除当前节点
    def on_actTree_DeleteItem_triggered(self):
        item = self.ui.treeFiles.currentItem()
        parItem = item.parent()
        parItem.removeChild(item)

    @pyqtSlot()  ##遍历节点
    def on_actTree_ScanItems_triggered(self):
        count = self.ui.treeFiles.topLevelItemCount()
        for i in range(count):
            item = self.ui.treeFiles.topLevelItem(i)
            self.__changeItemCaption(item)

    def on_treeFiles_currentItemChanged(self, current, previous):  ##目录树节点变化
        if (current == None):
            return
        nodeType = current.type()  #获取节点类型

        if (nodeType == TreeItemType.itTopItem.value):  #顶层节点
            self.ui.actTree_AddFolder.setEnabled(True)
            self.ui.actTree_AddFiles.setEnabled(True)
            self.ui.actTree_DeleteItem.setEnabled(False)  #顶层节点不能删除

        elif (nodeType == TreeItemType.itGroupItem.value):  #组节点
            self.ui.actTree_AddFolder.setEnabled(True)
            self.ui.actTree_AddFiles.setEnabled(True)
            self.ui.actTree_DeleteItem.setEnabled(True)

        elif (nodeType == TreeItemType.itImageItem.value):  #图片节点
            self.ui.actTree_AddFolder.setEnabled(False)
            self.ui.actTree_AddFiles.setEnabled(True)
            self.ui.actTree_DeleteItem.setEnabled(True)
            self.__displayImage(current)  #显示图片

    @pyqtSlot()  ##适应高度显示图片
    def on_actZoomFitH_triggered(self):
        H = self.ui.scrollArea.height()  #得到scrollArea的高度
        realH = self.curPixmap.height()  #原始图片的实际高度
        self.pixRatio = float(H) / realH  #当前显示比例,必须转换为浮点数
        pix = self.curPixmap.scaledToHeight(H - 30)  #图片缩放到指定高度
        self.ui.LabPicture.setPixmap(pix)  #设置Label的PixMap

    @pyqtSlot()  ##适应宽度显示
    def on_actZoomFitW_triggered(self):
        W = self.ui.scrollArea.width() - 20
        realW = self.curPixmap.width()
        self.pixRatio = float(W) / realW
        pix = self.curPixmap.scaledToWidth(W - 30)
        self.ui.LabPicture.setPixmap(pix)  #设置Label的PixMap

    @pyqtSlot()  ##实际大小
    def on_actZoomRealSize_triggered(self):
        self.pixRatio = 1  #恢复显示比例为1
        self.ui.LabPicture.setPixmap(self.curPixmap)

    @pyqtSlot()  ##放大显示
    def on_actZoomIn_triggered(self):
        self.pixRatio = self.pixRatio * 1.2
        W = self.pixRatio * self.curPixmap.width()
        H = self.pixRatio * self.curPixmap.height()
        pix = self.curPixmap.scaled(W, H)  #图片缩放到指定高度和宽度,保持长宽比例
        self.ui.LabPicture.setPixmap(pix)

    @pyqtSlot()  ##缩小显示
    def on_actZoomOut_triggered(self):
        self.pixRatio = self.pixRatio * 0.8
        W = self.pixRatio * self.curPixmap.width()
        H = self.pixRatio * self.curPixmap.height()
        pix = self.curPixmap.scaled(W, H)  #图片缩放到指定高度和宽度,保持长宽比例
        self.ui.LabPicture.setPixmap(pix)

    @pyqtSlot(bool)  ##设置停靠区浮动性
    def on_actDockFloat_triggered(self, checked):
        self.ui.dockWidget.setFloating(checked)

    @pyqtSlot(bool)  ##停靠区浮动性改变
    def on_dockWidget_topLevelChanged(self, topLevel):
        self.ui.actDockFloat.setChecked(topLevel)

    @pyqtSlot(bool)  ##设置停靠区可见性
    def on_actDockVisible_triggered(self, checked):
        self.ui.dockWidget.setVisible(checked)

    @pyqtSlot(bool)  ##停靠区可见性变化
    def on_dockWidget_visibilityChanged(self, visible):
        self.ui.actDockVisible.setChecked(visible)
Exemplo n.º 15
0
class MainWindow(QWidget):

    def __init__(self):
        super().__init__()

        self.initUI()

    def initUI(self):
        self.setWindowTitle('CTS')
        self.setMinimumWidth(480)

        self.grid = QGridLayout()
        self.setLayout(self.grid)


        # Objects
        self.lbl_instructions = QLabel('Select folders to compare')

        self.lbl_path_a = QLabel('Path A')
        self.path_a_text = QLineEdit()



        self.browse_a = QPushButton('Browse', self)
        self.browse_a.clicked.connect(lambda: self.path_a_text.setText(self.browse()))

        self.lbl_path_b = QLabel('Path B')
        self.path_b_text = QLineEdit()
        self.browse_b = QPushButton('Browse', self)
        self.browse_b.clicked.connect(lambda: self.path_b_text.setText(self.browse()))

        self.compare_btn = QPushButton('Compare That Shit')
        self.compare_btn.clicked.connect(self.compare)


        self.lbl_mismatch = QLabel()
        self.lbl_mismatch.setStyleSheet('color: red')
        self.lbl_mismatch.setFont(bold_font)
        self.lbl_mismatch.setAlignment(QtCore.Qt.AlignCenter)

        self.btn_mismatch = QPushButton('Details')
        self.btn_mismatch.clicked.connect(self.open_unmatch_window)
        self.btn_mismatch.hide()


        self.lbl_missing = QLabel()
        self.lbl_missing.setStyleSheet('color: red')
        self.lbl_missing.setFont(bold_font)
        self.lbl_missing.setAlignment(QtCore.Qt.AlignCenter)

        self.btn_missing = QPushButton('Details')
        self.btn_missing.clicked.connect(self.open_missing_window)
        self.btn_missing.hide()

        self.thumb_up_image = QLabel(self)
        self.pixmap_tu = QPixmap('thumbs_up.png')
        self.pixmap_tu = self.pixmap_tu.scaledToWidth(51)
        self.thumb_up_image.setPixmap(self.pixmap_tu)
        self.thumb_up_image.hide()

        self.middle_finger_image = QLabel(self)
        self.pixmap_mf = QPixmap('middle_finger.png')
        self.pixmap_mf = self.pixmap_mf.scaledToWidth(51)
        self.middle_finger_image.setPixmap(self.pixmap_mf)
        self.middle_finger_image.hide()

        self.version_filter = QCheckBox('Version Filter')
        self.version_filter.setToolTip('Only compare files that includes version')
        self.version_filter.setChecked(True)

        self.size_a = QLabel()
        self.size_b = QLabel()



        # Positions
        self.grid.addWidget(self.lbl_instructions, 1, 2)

        self.grid.addWidget(self.lbl_path_a, 2, 1)
        self.grid.addWidget(self.path_a_text, 2, 2)
        self.grid.addWidget(self.browse_a, 2, 3)
        self.grid.addWidget(self.size_a, 2, 4)

        self.grid.addWidget(self.lbl_path_b, 3, 1)
        self.grid.addWidget(self.path_b_text, 3, 2)
        self.grid.addWidget(self.browse_b, 3, 3)
        self.grid.addWidget(self.size_b, 3, 4)

        self.grid.addWidget(self.compare_btn, 5, 2)
        self.grid.addWidget(self.version_filter, 5, 3)

        self.grid.addWidget(self.lbl_missing, 6, 2)
        self.grid.addWidget(self.btn_missing, 6, 3)

        self.grid.addWidget(self.lbl_mismatch, 7, 2)
        self.grid.addWidget(self.btn_mismatch, 7, 3)

        self.grid.addWidget(self.thumb_up_image, 7, 3)

        self.grid.addWidget(self.middle_finger_image, 6, 1)


        self.show()


    def browse(self):
        path = str(QFileDialog.getExistingDirectory(self, "Select Directory"))
        return path

    def compare(self):
        self.reset_gui()
        # self.path_a_text.setText('C:\Program Files (x86)\Waves\MultiRack')
        # self.path_b_text.setText('C:\Program Files (x86)\Waves\MultiRack ref')

        if self.path_a_text.text() == '' or self.path_b_text.text() == '':
            QMessageBox.about(self, "Title", "No folders selected")
            return

        self.size_a.setText('Size: ' + self.calculate_size(self.path_a_text.text()))
        self.size_b.setText('Size: ' + self.calculate_size(self.path_b_text.text()))

        self.missing_a, self.missing_b, self.unmatched = main(self.path_a_text.text(), self.path_b_text.text(), self.version_filter.isChecked())

        if self.missing_a or self.missing_b:
            self.lbl_missing.setText('Found {} missing items'.format(sum([len(self.missing_a), len(self.missing_b)])))
            self.btn_missing.show()
            self.middle_finger_image.show()

        if self.unmatched:
            self.lbl_mismatch.setText('Found {} version mismatch'.format(len(self.unmatched)))
            self.btn_mismatch.show()
            self.middle_finger_image.show()

        if not self.missing_a and not self.missing_b and not self.unmatched:
            self.lbl_mismatch.setText('Perfect match!')
            self.lbl_mismatch.setStyleSheet('color: blue')
            self.thumb_up_image.show()

    def reset_gui(self):
        """Clear GUI for next search"""
        self.thumb_up_image.hide()
        self.middle_finger_image.hide()
        self.btn_missing.hide()
        self.btn_mismatch.hide()
        self.lbl_missing.setText('')
        self.lbl_mismatch.setText('')


    def open_unmatch_window(self):
        self.unmatch_table = UnmatchTable()
        self.unmatch_table.show_unmatched_table(self.unmatched, self.path_a_text.text(), self.path_b_text.text())
        self.unmatch_table.show()

    def open_missing_window(self):
        self.missing = MissingTable()
        self.missing.show_missing_table(self.missing_a, self.missing_b, self.path_a_text.text(), self.path_b_text.text())
        self.missing.show()

    def calculate_size(self, path):
        if os.name == 'posix':
            return subprocess.check_output(['du', '-sh', path]).split()[0].decode('utf-8')
        else:
            size = 0
            for path, dirs, files in os.walk(path):
                for f in files:
                    size += os.path.getsize(os.path.join(path, f))
            size = size/1000000
            size = ("%.2f" % size)
            return str(size + ' MB')
Exemplo n.º 16
0
    def __init__(self, size):
        global resolution_in_x, resolution_in_y, Horizontal_Margin, Vertical_Margin, sensitivity, acceleration
        with open('config.json') as file:
            data = json.load(file)
            sensitivity = data["sensitivity"]
            acceleration = data["acceleration"]
            Horizontal_Margin = data["Horizontal_Margin"]
            Vertical_Margin = data["Vertical_Margin"]
            resolution_in_x = data["resolution_in_x"]
            resolution_in_y = data["resolution_in_y"]
        super(Ui,
              self).__init__()  # Call the inherited classes __init__ method
        self.setWindowTitle("Gesture Mouse")
        self.gen_size = int(size.height() / 24)
        self.font_size = int(self.gen_size / 5)
        if self.font_size < 10:
            self.font_size = 10
        #Prepare Font
        main_font = QFont("Arial", self.font_size, QFont.Bold)

        #Webcam Screem
        v_layout = QtWidgets.QVBoxLayout()  # mainWindow layout
        pix = QPixmap("gui_images/logo.jpg")
        pix = pix.scaledToWidth(320)
        pix = pix.scaledToHeight(240)
        self.video_stream = QtWidgets.QLabel()
        self.video_stream.setPixmap(pix)
        self.video_stream.setAlignment(Qt.AlignCenter)
        v_layout.addWidget(self.video_stream)

        #Resolution Row
        h_layout_res = QtWidgets.QHBoxLayout()  # Placeholder for a row
        res_pix = QPixmap("gui_images/communications.png")
        res_pix = res_pix.scaledToWidth(self.gen_size)
        res_pix = res_pix.scaledToHeight(self.gen_size)
        self.res_icon = QtWidgets.QLabel()
        self.res_icon.setPixmap(res_pix)
        self.res_label = QtWidgets.QLabel("Resolution")
        self.res_label.setFont(main_font)
        self.screen_combo = QtWidgets.QComboBox()
        self.screen_combo.addItem("1366 * 768")
        self.screen_combo.addItem("1920 * 1080")
        self.screen_combo.view().pressed.connect(self.handleTheResolution)

        h_layout_res.addWidget(self.res_icon)
        h_layout_res.addWidget(self.res_label)
        h_layout_res.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding))
        v_layout.addLayout(h_layout_res)
        v_layout.addWidget(self.screen_combo)

        #Sensitivity Row
        h_layout_sens = QtWidgets.QHBoxLayout()  # Placeholder for a row
        sens_pix = QPixmap("gui_images/arrows.png")
        sens_pix = sens_pix.scaledToWidth(self.gen_size)
        sens_pix = sens_pix.scaledToHeight(self.gen_size)
        self.sens_icon = QtWidgets.QLabel()
        self.sens_icon.setPixmap(sens_pix)
        self.sens_label = QtWidgets.QLabel("Sensitivity")
        self.sens_label.setFont(main_font)
        self.sens_slider = QtWidgets.QSlider(Qt.Horizontal)
        self.sens_slider.setTickInterval(1)
        self.sens_slider.setMinimum(1)
        self.sens_slider.setMaximum(10)
        self.sens_slider.valueChanged.connect(self.handleSensitivity)
        self.sens_slider.setValue(sensitivity)

        h_layout_sens.addWidget(self.sens_icon)
        h_layout_sens.addWidget(self.sens_label)
        h_layout_sens.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding))
        v_layout.addLayout(h_layout_sens)
        v_layout.addWidget(self.sens_slider)

        #Acceleration Row
        h_layout_acc = QtWidgets.QHBoxLayout()  # Placeholder for a row
        acc_pix = QPixmap("gui_images/arrows.png")
        acc_pix = acc_pix.scaledToWidth(self.gen_size)
        acc_pix = acc_pix.scaledToHeight(self.gen_size)
        self.acc_icon = QtWidgets.QLabel()
        self.acc_icon.setPixmap(acc_pix)
        self.acc_label = QtWidgets.QLabel("Acceleration")
        self.acc_label.setFont(main_font)
        self.acc_slider = QtWidgets.QSlider(Qt.Horizontal)
        self.acc_slider.setTickInterval(1)
        self.acc_slider.setMinimum(1)
        self.acc_slider.setMaximum(10)
        self.acc_slider.valueChanged.connect(self.handleAcceleration)
        self.acc_slider.setValue(acceleration / 0.1)

        h_layout_acc.addWidget(self.acc_icon)
        h_layout_acc.addWidget(self.acc_label)
        h_layout_acc.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding))
        v_layout.addLayout(h_layout_acc)
        v_layout.addWidget(self.acc_slider)

        #Horizontal Margin
        h_layout_horz_margin = QtWidgets.QHBoxLayout()  # Placeholder for a row
        horz_margin_pix = QPixmap("gui_images/horizontal.png")
        horz_margin_pix = horz_margin_pix.scaledToWidth(self.gen_size)
        horz_margin_pix = horz_margin_pix.scaledToHeight(self.gen_size)
        self.horz_margin_icon = QtWidgets.QLabel()
        self.horz_margin_icon.setPixmap(horz_margin_pix)
        self.horz_margin_label = QtWidgets.QLabel("Horizontal Margin")
        self.horz_margin_label.setFont(main_font)
        self.horz_margin_slider = QtWidgets.QSlider(Qt.Horizontal)
        self.horz_margin_slider.setTickInterval(1)
        self.horz_margin_slider.setMinimum(1)
        self.horz_margin_slider.setMaximum(8)
        self.horz_margin_slider.valueChanged.connect(
            self.handleHorizontalMargin)
        self.horz_margin_slider.setValue(Horizontal_Margin / 0.05)

        h_layout_horz_margin.addWidget(self.horz_margin_icon)
        h_layout_horz_margin.addWidget(self.horz_margin_label)
        h_layout_horz_margin.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding))
        v_layout.addLayout(h_layout_horz_margin)
        v_layout.addWidget(self.horz_margin_slider)

        #Vertical Margin
        h_layout_vert_margin = QtWidgets.QHBoxLayout()  # Placeholder for a row
        vert_margin_pix = QPixmap("gui_images/vertical.png")
        vert_margin_pix = vert_margin_pix.scaledToWidth(self.gen_size)
        vert_margin_pix = vert_margin_pix.scaledToHeight(self.gen_size)
        self.vert_margin_icon = QtWidgets.QLabel()
        self.vert_margin_icon.setPixmap(vert_margin_pix)
        self.vert_margin_label = QtWidgets.QLabel("Vertical Margin")
        self.vert_margin_label.setFont(main_font)
        self.vert_margin_slider = QtWidgets.QSlider(Qt.Horizontal)
        self.vert_margin_slider.setTickInterval(1)
        self.vert_margin_slider.setMinimum(1)
        self.vert_margin_slider.setMaximum(8)
        self.vert_margin_slider.valueChanged.connect(self.handleVerticalMargin)
        self.vert_margin_slider.setValue(Vertical_Margin / 0.05)

        h_layout_vert_margin.addWidget(self.vert_margin_icon)
        h_layout_vert_margin.addWidget(self.vert_margin_label)
        h_layout_vert_margin.addItem(
            QtWidgets.QSpacerItem(10, 10, QtWidgets.QSizePolicy.Expanding,
                                  QtWidgets.QSizePolicy.Expanding))
        v_layout.addLayout(h_layout_vert_margin)
        v_layout.addWidget(self.vert_margin_slider)

        h_layout_btns = QtWidgets.QHBoxLayout()  # Placeholder for a row
        #Apply button
        self.apply_button = QtWidgets.QPushButton("Apply")
        self.apply_button.clicked.connect(self.Apply)

        #Reset Button
        self.reset_button = QtWidgets.QPushButton("Reset")
        self.reset_button.clicked.connect(self.Reset)

        h_layout_btns.addWidget(self.apply_button)
        h_layout_btns.addWidget(self.reset_button)
        v_layout.addLayout(h_layout_btns)

        self.setLayout(v_layout)

        #Set Background
        oImage = QImage("gui_images/background.jpg")
        sImage = oImage.scaled(self.sizeHint())  # resize Image to widgets size
        palette = QPalette()
        palette.setBrush(QPalette.Window, QBrush(sImage))
        self.setPalette(palette)

        self.setFixedSize(self.sizeHint())  #Disable resize
        self.show()  # Show the GUI
    def initMe(self):
        mod = self.mod
        layout = QVBoxLayout()

        # Name
        layout.addWidget(QLabel(str(mod.name)))

        # Image
        image = QLabel()

        if mod.image:
            pixmap = QPixmap(mod.image)
        else:
            pixmap = QPixmap(f("images/no_image.png"))

        pixmap = pixmap.scaledToWidth(image_width,
                                      mode=Qt.SmoothTransformation)
        image.setPixmap(pixmap)
        layout.addWidget(image)

        # Authors
        separator = ', '
        if mod.authors:
            layout.addWidget(QLabel(f"Authors: {separator.join(mod.authors)}"))
        else:
            layout.addWidget(QLabel("Authors: not detected"))

        # source
        layout.addWidget(QLabel(f"source: {str(mod.source)}"))

        # minorVersion
        layout.addWidget(QLabel(f"minorVersion: {str(mod.minorVersion)}"))

        # hasSettings
        layout.addWidget(QLabel(f"hasOptions: {str(mod.options)}"))

        # Category Image
        if mod.category_image is not None:
            try:
                images.invert_image(mod.category_image)
                success = True
            except:
                success = False
            if success:
                image = QLabel()
                pixmap = QPixmap(f("Image_negative.jpg"))
                image.setPixmap(pixmap)
                image.setToolTip("Category")
                layout.addWidget(image)

        # Open in Explorer Button
        open_btn = QPushButton("Open in Explorer")
        open_btn.clicked.connect(self.open)
        layout.addWidget(open_btn)

        # Uninstall
        uninstall_btn = QPushButton("Uninstall Mod")
        uninstall_btn.clicked.connect(self.uninstall)
        layout.addWidget(uninstall_btn)

        self.setLayout(layout)
Exemplo n.º 18
0
class ImageWithMouseControl(QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle('Image with mouse control')
        self.parent = parent
        self.point = QPoint(0, 0)

    def setImg(self, src):
        self.img = QPixmap(src)
        self.scaled_img = self.img.scaledToWidth(400)

    def paintEvent(self, e):
        '''
        绘图
        :param e:
        :return:
        '''
        painter = QPainter()
        painter.begin(self)
        self.draw_img(painter)
        painter.end()

    def draw_img(self, painter):
        painter.drawPixmap(self.point, self.scaled_img)

    def mouseMoveEvent(self, e):  # 重写移动事件
        if self.left_click:
            self._endPos = e.pos() - self._startPos
            self.point = self.point + self._endPos
            self._startPos = e.pos()
            self.repaint()

    def mousePressEvent(self, e):
        if e.button() == Qt.LeftButton:
            self.left_click = True
            self._startPos = e.pos()

    def mouseReleaseEvent(self, e):
        if e.button() == Qt.LeftButton:
            self.left_click = False
        elif e.button() == Qt.RightButton:
            self.point = QPoint(0, 0)
            self.scaled_img = self.img.scaledToWidth(self.size().width() - 10)
            self.repaint()

    def wheelEvent(self, e):
        if e.angleDelta().y() > 0:
            # 放大图片
            self.scaled_img = self.img.scaledToWidth(self.scaled_img.width() -
                                                     50)
            new_w = e.x() - (self.scaled_img.width() *
                             (e.x() - self.point.x())) / (
                                 self.scaled_img.width() + 50)
            new_h = e.y() - (self.scaled_img.height() *
                             (e.y() - self.point.y())) / (
                                 self.scaled_img.height() + 50)
            self.point = QPoint(new_w, new_h)
            self.repaint()
        elif e.angleDelta().y() < 0:
            # 缩小图片
            self.scaled_img = self.img.scaledToWidth(self.scaled_img.width() +
                                                     50)
            new_w = e.x() - (self.scaled_img.width() *
                             (e.x() - self.point.x())) / (
                                 self.scaled_img.width() - 50)
            new_h = e.y() - (self.scaled_img.height() *
                             (e.y() - self.point.y())) / (
                                 self.scaled_img.height() - 50)
            self.point = QPoint(new_w, new_h)
            self.repaint()

    def resizeEvent(self, e):
        if self.parent is not None:
            self.scaled_img = self.img.scaledToWidth(self.size().width() - 10)
            self.point = QPoint(0, 0)
            self.update()
Exemplo n.º 19
0
            # self.label.setStyleSheet('font: 20x')

        else:
            path = data[0]
            type_ = data[5]
            if path.endswith(('.mp4', '.webm')): path = get_frame(path)

            pixmap = QPixmap(path)
            if not pixmap.isNull():
                height, width = pixmap.height(), pixmap.width()
                aspect_ratio = (width / height if height > width else height /
                                width)

                if (type_ == 3 and aspect_ratio < .6) or aspect_ratio < .3:
                    if height > width:
                        pixmap = pixmap.scaledToWidth(self.width() * .9,
                                                      Qt.SmoothTransformation)
                    else:
                        pixmap = pixmap.scaledToHeight(self.height() * .9,
                                                       Qt.SmoothTransformation)
                else:
                    pixmap = pixmap.scaled(
                        self.size(),
                        Qt.KeepAspectRatio,
                        transformMode=Qt.SmoothTransformation)

            # else:
            # self.label.setText('No image')
            # self.setStyleSheet('font: 20x')

        self.verticalScrollBar().setSliderPosition(0)
        self.horizontalScrollBar().setSliderPosition(0)
Exemplo n.º 20
0
Arquivo: title.py Projeto: syurskyi/QT
def change_img(obj, ARRAY_OF_IMG, index, H, W):
    pixmap = QPixmap(ARRAY_OF_IMG[index])
    pixmap = pixmap.scaledToHeight(H)
    pixmap = pixmap.scaledToWidth(W)
    obj.setPixmap(pixmap)
Exemplo n.º 21
0
    def generateRightFrame(self):

        self._currentUpload = []

        layout = self.scrollLayout
        print(layout)
        print(layout.count())

        while layout.count():
            print("destroy")
            child = layout.takeAt(0)
            if child.widget():
                child.widget().deleteLater()

        for currentExifImage in self.exifImageCollection:
            """ Current image """
            localWidget = ImageUpload()
            localLayout = QHBoxLayout()
            localLayout.setAlignment(Qt.AlignRight)
            localWidget.setLayout(localLayout)
            self.scrollLayout.addWidget(localWidget)
            self._currentUpload.append(localWidget)
            """Local Left Widget"""
            localLeftWidget = QWidget()
            localLeftLayout = QFormLayout()
            localLeftLayout.setAlignment(Qt.AlignRight)
            localLeftWidget.setLayout(localLeftLayout)
            localLayout.addWidget(localLeftWidget)
            """ import? + Import Status """
            cbImport = QCheckBox("Import")
            lblUploadResult = QLabel()
            lblUploadResult.setStyleSheet(STYLE_IMPORT_STATUS)
            localLeftLayout.addRow(cbImport, lblUploadResult)
            localWidget.cbImport = cbImport
            localWidget.lblUploadResult = lblUploadResult
            """ File Name of picture """
            lblFileName = QLabel("Name: ")
            lblFileName.setAlignment(Qt.AlignLeft)
            lineEditFileName = QLineEdit()
            lineEditFileName.setFixedWidth(WIDTH_WIDGET_RIGHT)
            lineEditFileName.setText(currentExifImage.filename)
            lineEditFileName.setAlignment(Qt.AlignLeft)
            localLeftLayout.addRow(lblFileName, lineEditFileName)
            localWidget.lineEditFileName = lineEditFileName
            """ Shadow Real FileName """
            lblRealFileName = QLineEdit()
            lblRealFileName.setText(currentExifImage.filename)
            localWidget.lblRealFileName = lblRealFileName
            localWidget.lblRealFileName.isVisible = False
            """ Description """
            lblDescription = QLabel("Description: ")
            lblDescription.setAlignment(Qt.AlignLeft)
            lineEditDescription = QPlainTextEdit()
            lineEditDescription.setFixedWidth(WIDTH_WIDGET_RIGHT)
            localLeftLayout.addRow(lblDescription, lineEditDescription)
            localWidget.lineEditDescription = lineEditDescription
            """ Categories """
            lblCategories = QLabel("Categories: ")
            lblCategories.setAlignment(Qt.AlignLeft)
            lineEditCategories = QLineEdit()
            lineEditCategories.setFixedWidth(WIDTH_WIDGET_RIGHT)
            lineEditCategories.setAlignment(Qt.AlignLeft)
            localLeftLayout.addRow(lblCategories, lineEditCategories)
            localWidget.lineEditCategories = lineEditCategories

            lblLocation = QLabel("Location: ")
            lblLocation.setAlignment(Qt.AlignLeft)
            lineEditLocation = QLineEdit()
            lineEditLocation.setFixedWidth(WIDTH_WIDGET_RIGHT)
            if currentExifImage.lat == None or currentExifImage.long == None:
                lineEditLocation.setText("")
            else:
                lineEditLocation.setText(
                    str(currentExifImage.lat) + "|" +
                    str(currentExifImage.long) + "|heading:" +
                    str(currentExifImage.heading))
            lineEditLocation.setAlignment(Qt.AlignLeft)
            localLeftLayout.addRow(lblLocation, lineEditLocation)
            localWidget.lineEditLocation = lineEditLocation

            lblDateTime = QLabel("Date Time: ")
            lblDateTime.setAlignment(Qt.AlignLeft)
            lineEditDateTime = QLineEdit()
            lineEditDateTime.setFixedWidth(WIDTH_WIDGET_RIGHT)
            lineEditDateTime.setText(currentExifImage.date + " " +
                                     currentExifImage.time)
            lineEditDateTime.setAlignment(Qt.AlignLeft)
            localLeftLayout.addRow(lblDateTime, lineEditDateTime)
            localWidget.lineEditDateTime = lineEditDateTime
            """ Image itself """
            label = QLabel()
            pixmap = QPixmap(currentExifImage.fullFilePath)
            pixmapResize = pixmap.scaledToWidth(IMAGE_DIMENSION,
                                                Qt.FastTransformation)
            label.setPixmap(pixmapResize)
            localLayout.addWidget(label)
            localWidget.fullFilePath = currentExifImage.fullFilePath

            self.update()
Exemplo n.º 22
0
    def init_UI(self, config):
        self.set_status()
        # Define layout for sidebar
        side_bar_layout = QVBoxLayout()

        #add buttons to our layout
        side_bar_layout.addWidget(self.button_1)
        side_bar_layout.addWidget(self.button_2)
        side_bar_layout.addWidget(self.button_3)
        side_bar_layout.addWidget(self.button_4)
        side_bar_layout.addWidget(self.button_5)
        side_bar_layout.addWidget(self.button_6)

        # Set stretch and Spacing
        side_bar_layout.addStretch(1)
        side_bar_layout.addSpacing(0)

        # Define our side bar widget and set side bar layout to it
        side_bar_widget = QWidget()
        side_bar_widget.setLayout(side_bar_layout)
        side_bar_widget.setFixedWidth(215)
        side_bar_widget.setObjectName("sidebar")

        # Define out top bar
        logo = QLabel(self)
        logo_image = QPixmap("Elements\\bitwise_header.png")
        logo_image = logo_image.scaledToWidth(104)
        logo.setPixmap(logo_image)

        client_label = QLabel('Client ID : ' + config["client_id"])
        user_label = QLabel(config["Username"])
        client_label.setObjectName('top')
        user_label.setObjectName('top')

        self.timer_widget = QLCDNumber()
        self.timer_widget.setSegmentStyle(QLCDNumber.Flat)
        self.timer_widget.setDigitCount(8)
        self.timer_widget.display('00:00:00')
        self.timer_widget.setFixedSize(150, 40)

        top_bar_layout = QHBoxLayout()
        top_bar_layout.setContentsMargins(15, 5, 1, 0)
        top_bar_layout.addWidget(logo)
        top_bar_layout.addWidget(client_label, alignment=Qt.AlignCenter)
        top_bar_layout.addWidget(user_label, alignment=Qt.AlignCenter)
        top_bar_layout.addWidget(self.timer_widget, alignment=Qt.AlignRight)

        top_bar_widget = QWidget()
        top_bar_widget.setLayout(top_bar_layout)
        top_bar_widget.setObjectName('top_bar')

        # Define our right side screens corresponding to buttons on the sidebar
        # Basically right screens are tab widgets whose tabs are hidden,
        # and we map sidebar buttons to each tab switch :)
        # Since sidebars are not natively supported by pyqt5
        self.right_widget = QTabWidget()
        self.right_widget.setObjectName("main_tabs")

        self.right_widget.addTab(self.tab1, '')
        self.right_widget.addTab(self.tab2, '')
        self.right_widget.addTab(self.tab3, '')
        self.right_widget.addTab(self.tab4, '')
        self.right_widget.addTab(self.tab5, '')
        self.right_widget.addTab(self.tab6, '')

        # Screen 1 will be our initial screen
        self.right_widget.setCurrentIndex(0)

        # Define the combined layout for sidebar + right side screns
        main_layout = QHBoxLayout()
        main_layout.addWidget(side_bar_widget)
        main_layout.addWidget(self.right_widget)

        # setstretch( index, stretch_value )
        main_layout.setStretch(0, 10)
        main_layout.setStretch(1, 100)
        main_layout.setContentsMargins(10, 1, 10, 1)
        # Define our main widget = sidebar + windows
        main_widget = QWidget()
        main_widget.setObjectName("screen_widget")
        main_widget.setLayout(main_layout)

        #Define top_layout = logo bar + main_layout
        top_layout = QVBoxLayout()
        top_layout.addWidget(top_bar_widget)
        top_layout.addWidget(main_widget)
        top_layout.setContentsMargins(1, 0, 1, 1)
        top_layout.setStretch(0, 8)
        top_layout.setStretch(1, 92)

        top_widget = QWidget()
        top_widget.setLayout(top_layout)
        top_widget.setObjectName("top_widget")

        # Set top_widget as our central widget
        self.setCentralWidget(top_widget)

        return
Exemplo n.º 23
0
class PictureView(FullView, AbstractPictureView):
    def __init__(self, parent=None, view_manager=AbstractViewManager):
        FullView.__init__(self, parent, view_manager)

        self.pix_label = QLabel(self.ui.mid_frame)
        self.pix_label.setAlignment(QtCore.Qt.AlignCenter)
        self.ui.mid_frame_layout.addWidget(self.pix_label)

        self.progress = QProgressHLine(self.ui.mid_frame)
        self.progress.hide()
        self.progress.new_progress('loaded', QtCore.Qt.gray)
        self.progress.new_progress('current', QtCore.Qt.red)

        self.pix = None
        self._redraw()
        self.dir = None
        self.cur_pix = 0
        self.files = list()
        self.max_pics = 0

    def test_favorite_item(self, item):
        return item.is_pix() or item.is_thumb()

    def get_page_type(self):
        return FavoriteRecord.pix

    def set_dir(self, filedir='', url=URL(), max_pics=12):
        self.dir = filedir
        self.url = url
        self.cur_pix = 0
        self.controls.clear()

        self.max_pics = max_pics
        self.progress.set_max(max_pics - 1)
        self.progress.reset()
        self.progress.show()

        self.update()
        self.refresh()

    def refresh(self):
        if self.dir is None: return
        self.files = glob.glob(self.dir + '*.jpg')
        self.load_pix()

    def load_pix(self):
        if len(self.files) == 0: return
        if len(self.files) >= self.max_pics:
            self.progress.hide()
        self.progress.set_value('loaded', len(self.files) - 1)
        self.pix = QPixmap(self.files[self.cur_pix])
        self._redraw()
        self.setWindowTitle(self.files[self.cur_pix])

    def _redraw(self):
        if self.pix is None: return

        l_rect = self.ui.mid_frame.contentsRect()
        p_rect = self.pix.rect()

        try:
            if l_rect.height() / l_rect.width() < p_rect.height() / p_rect.width():
                pix1 = self.pix.scaledToHeight(l_rect.height(), QtCore.Qt.SmoothTransformation)
            else:
                pix1 = self.pix.scaledToWidth(l_rect.width(), QtCore.Qt.SmoothTransformation)
            self.pix_label.setPixmap(pix1)

        except ZeroDivisionError:
            pass

        self.progress.setGeometry(0, l_rect.height() * 9 // 10,
                                  l_rect.width(), l_rect.height() * 9 // 10 + self.progress.height())

        self.progress.set_value('current', self.cur_pix)
        self.progress.update()
        QtCore.QEventLoop().processEvents(QtCore.QEventLoop.AllEvents)
        self.update()

    def resizeEvent(self, *args, **kwargs):
        self._redraw()

    def wheelEvent(self, event):
        self.cur_pix -= event.angleDelta().y() // 120
        if self.cur_pix < 0: self.cur_pix = 0
        if self.cur_pix > len(self.files) - 1: self.cur_pix = len(self.files) - 1
        self.load_pix()
    def figures(self, N):

        groupbox = QGroupBox()
        groupbox.setStyleSheet('background-color: white;')
        groupbox.setFixedWidth(1000)
        layout = QVBoxLayout()

        horizlayout1 = QHBoxLayout()
        horizlayout1.setContentsMargins(0, 0, 0, 0)
        horizlayout1.setSpacing(0)
        groupbox.setLayout(layout)
        layout.addLayout(horizlayout1)

        fname = 'mirror.png'
        pix = QPixmap(fname)
        if N < 6:
            for i in range(N):
                beamsplitter_i = QLabel()
                beamsplitter_i.setPixmap(pix)
                horizlayout1.addWidget(beamsplitter_i)

        else:
            for i in range(6):
                beamsplitter_i = QLabel()
                beamsplitter_i.setPixmap(pix)
                horizlayout1.addWidget(beamsplitter_i)

        det = QLabel()
        # detpic = QPixmap('detector.png')
        det.setPixmap(QPixmap('detector.png'))
        horizlayout1.addWidget(det)

        horizlayout2 = QHBoxLayout()
        horizlayout2.setSpacing(0)
        horizlayout2.setContentsMargins(0, 0, 0, 0)
        layout.addLayout(horizlayout2)
        if N < 6:
            circuit = self.calcs.zenocirc(N, 1)

            circuit.draw(filename='circuit.png', output='mpl')
            cir = QLabel()
            cirpic = QPixmap('circuit.png')
            cirpic.scaledToWidth(500)
            cirpic.scaledToHeight(500)

            cir.setPixmap(cirpic)

            horizlayout2.addWidget(cir)
        else:
            circuit = self.calcs.zenocirc(6, 1)

            circuit.draw(filename='circuit.png', output='mpl')
            cir = QLabel()
            cirpic = QPixmap('circuit.png')
            cirpic.scaledToWidth(500)
            cirpic.scaledToHeight(500)

            cir.setPixmap(cirpic)

            horizlayout2.addWidget(cir)
        return groupbox
Exemplo n.º 25
0
class Viewer(QtMainWindow):
    jobAdded = Signal()
    jobFinished = Signal()

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

        self.ui = Ui_Viewer()
        self.ui.setupUi(self)
        self.ui.prevButton.clicked.connect(self.prev)
        self.ui.nextButton.clicked.connect(self.next)
        self.ui.firstButton.clicked.connect(self.first)
        self.ui.lastButton.clicked.connect(self.last)
        self.ui.actionZoomIn.triggered.connect(self.zoomIn)
        self.ui.actionZoomOut.triggered.connect(self.zoomOut)
        self.ui.actionFullSize.triggered.connect(self.zoomFullSize)
        self.ui.actionFitWindow.triggered.connect(self.zoomFit)

        self.ui.actionSaveImage.setShortcut(QKeySequence.Save)
        self.ui.actionSaveImage.triggered.connect(self.saveImage)
        self.ui.actionClose.setShortcut(QKeySequence.Close)
        self.ui.actionClose.triggered.connect(self.close)

        self.model = None
        self.current = None
        self.total = 0
        self.zoomFactor = 1
        self.zoomMode = ZOOM_FACTOR
        self.weboob = weboob

    def setData(self, model, qidx):
        self.model = model
        self.current = QPersistentModelIndex(qidx)

        self.model.rowsInserted.connect(self.updatePos)
        self.model.rowsRemoved.connect(self.updatePos)
        self.model.rowsInserted.connect(self.updateNavButtons)
        self.model.rowsRemoved.connect(self.updateNavButtons)
        self.model.dataChanged.connect(self._dataChanged)
        self.model.modelReset.connect(self.disable)

        self.updateImage()

    @Slot()
    def disable(self):
        self.setEnabled(False)

    def updateNavButtons(self):
        prev = self.current.row() > 0
        self.ui.prevButton.setEnabled(prev)
        self.ui.firstButton.setEnabled(prev)
        next = self.current.row() < self.total - 1
        self.ui.nextButton.setEnabled(next)
        self.ui.lastButton.setEnabled(next)

    def updatePos(self):
        self.total = self.model.rowCount(self.current.parent())
        self.ui.posLabel.setText('%d / %d' %
                                 (self.current.row() + 1, self.total))

    def updateImage(self):
        self.updatePos()
        self.updateNavButtons()

        obj = self.current.data(ResultModel.RoleObject)

        if obj.data is NotLoaded:
            self.model.fillObj(obj, ['data'], QModelIndex(self.current))
            self.pixmap = None
        elif obj.data:
            self.pixmap = QPixmap(QImage.fromData(obj.data))
        else:
            self.pixmap = QPixmap()

        self._rebuildImage()

    @Slot(QModelIndex)
    def _dataChanged(self, qidx):
        if qidx == self.current:
            obj = qidx.data(ResultModel.RoleObject)

            if obj.data:
                self.pixmap = QPixmap(QImage.fromData(obj.data))
            else:
                self.pixmap = QPixmap()
            self._rebuildImage()

    @Slot()
    def next(self):
        new = self.current.sibling(self.current.row() + 1, 0)
        if not new.isValid():
            return
        self.current = QPersistentModelIndex(new)
        self.updateImage()

    @Slot()
    def prev(self):
        if self.current.row() == 0:
            return
        self.current = QPersistentModelIndex(
            self.current.sibling(self.current.row() - 1, 0))
        self.updateImage()

    @Slot()
    def first(self):
        self.current = QPersistentModelIndex(self.current.sibling(0, 0))
        self.updateImage()

    @Slot()
    def last(self):
        self.current = QPersistentModelIndex(
            self.current.sibling(self.total - 1, 0))
        self.updateImage()

    @Slot()
    def zoomIn(self):
        self.zoomFactor *= 1.25
        self.zoomMode = ZOOM_FACTOR
        self._rebuildImage()

    @Slot()
    def zoomOut(self):
        self.zoomFactor *= 0.75
        self.zoomMode = ZOOM_FACTOR
        self._rebuildImage()

    @Slot()
    def zoomFullSize(self):
        self.zoomFactor = 1
        self.zoomMode = ZOOM_FACTOR
        self._rebuildImage()

    @Slot()
    def zoomFit(self):
        self.zoomMode = ZOOM_FIT
        self._rebuildImage()

    def resizeEvent(self, ev):
        super(Viewer, self).resizeEvent(ev)
        if self.zoomMode == ZOOM_FIT:
            self._rebuildImage()

    def _rebuildZoom(self):
        if self.zoomMode == ZOOM_FACTOR:
            new_width = int(self.pixmap.width() * self.zoomFactor)
            pixmap = self.pixmap.scaledToWidth(new_width,
                                               Qt.SmoothTransformation)
        else:
            new_size = self.ui.scrollArea.viewport().size()
            pixmap = self.pixmap.scaled(new_size, Qt.KeepAspectRatio,
                                        Qt.SmoothTransformation)
            self.zoomFactor = pixmap.width() / float(self.pixmap.width())
        return pixmap

    def _rebuildImage(self):
        if self.pixmap is None:
            self.ui.view.setText('Loading...')
            return
        elif self.pixmap.isNull():
            self.ui.view.setText('Image could not be loaded')
            return

        pixmap = self._rebuildZoom()
        self.ui.view.setPixmap(pixmap)

    @Slot()
    def saveImage(self):
        def ext_for_filter(s):
            return re.match(r'(?:[A-Z]+) \(\*\.([a-z]+)\)$', s).group(1)

        if not self.pixmap:
            return

        filters = ['PNG (*.png)', 'JPEG (*.jpg)', 'GIF (*.gif)']

        obj = self.current.data(ResultModel.RoleObject)
        name = '%s.%s' % (obj.title or obj.id or u'', obj.ext or 'png')
        default = filters[0]
        for f in filters:
            if name.endswith(ext_for_filter(f)):
                default = f
        filters = ';;'.join(filters)

        target = os.path.join(self.parent().lastSaveDir, name)
        out, filter = QFileDialog.getSaveFileName(self, 'Save image', target,
                                                  filters, default)
        if not out:
            return

        ext = ext_for_filter(filter)

        self.parent().lastSaveDir = os.path.dirname(out)
        if not os.path.splitext(out)[1]:
            out = '%s.%s' % (out, ext)

            if os.path.exists(out):
                q = self.tr(
                    '%s already exists, are you sure you want to replace it?'
                ) % out
                reply = QMessageBox.question(self, self.tr('Overwrite?'), q)
                if reply == QMessageBox.No:
                    return self.saveImage()

        self.pixmap.save(out, ext.upper())
Exemplo n.º 26
0
class FigureCanvas(QFrame):
    def __init__(self, parent=None):
        super(FigureCanvas, self).__init__(parent)

        self.setLineWidth(2)
        self.setMidLineWidth(1)
        self.setStyleSheet("background-color: white")

        self.img = []
        self.qpix_buff = []

    def load_mpl_figure(self, mplfig, view_dpi):

        self.qpix_buff = []

        # ---------------------------------------------------- figure size ----

        bbox = mplfig.get_window_extent()
        self.fwidth = bbox.width
        self.fheight = bbox.height

        # ------------------------------------------ save figure to buffer ----

        # http://stackoverflow.com/questions/8598673/
        # how-to-save-a-pylab-figure-into-in-memory-file-which-can-be-read
        # -into-pil-image/8598881#8598881

        # http://stackoverflow.com/questions/1300908/
        # load-blob-image-data-into-qpixmap

        # Scale dpi of figure to view_dpi

        orig_fig_dpi = mplfig.get_dpi()
        mplfig.dpi = view_dpi

        # Propagate changes to renderer :

        mplfig.canvas.draw()
        renderer = mplfig.canvas.get_renderer()
        orig_ren_dpi = renderer.dpi
        renderer.dpi = view_dpi

        # Generate img buffer :

        imgbuf = mplfig.canvas.buffer_rgba()
        imgwidth = int(renderer.width)
        imgheight = int(renderer.height)

        # Restore fig and renderer dpi

        renderer.dpi = orig_ren_dpi
        mplfig.dpi = orig_fig_dpi

        # Convert buffer to QPixmap :

        self.img = QImage(imgbuf, imgwidth, imgheight, QImage.Format_ARGB32)
        self.img = QImage.rgbSwapped(self.img)
        self.img = QPixmap(self.img)

    def paintEvent(self, event):
        """Qt method override to paint a custom image on the Widget."""
        super(FigureCanvas, self).paintEvent(event)

        qp = QPainter()
        qp.begin(self)

        # Prepare paint rect :

        fw = self.frameWidth()
        rect = QRect(0 + fw, 0 + fw,
                     self.size().width() - 2 * fw,
                     self.size().height() - 2 * fw)

        # Check/update image buffer :

        qpix2print = None
        for qpix in self.qpix_buff:
            if qpix.size().width() == rect.width():
                qpix2print = qpix
                break

        if qpix2print is None:
            qpix2print = self.img.scaledToWidth(rect.width(),
                                                mode=Qt.SmoothTransformation)
            self.qpix_buff.append(qpix2print)

        # Draw pixmap :


#        qp.setRenderHint(QPainter.Antialiasing, True)
        qp.drawPixmap(rect, qpix2print)

        qp.end()
Exemplo n.º 27
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()
    def inicializar_ventana(self):

        #inicializamos la ventana
        self.setWindowTitle(self.title)
        self.setFixedSize(self.width, self.height)

        self.distr_caja_busquedas = QGridLayout()
        self.setLayout(self.distr_caja_busquedas)

        #Creación del logo

        logo = QLabel(self)
        pixmap = QPixmap("src/recursos/Banner.png")
        pixmap = pixmap.scaledToWidth(self.width)
        logo.setPixmap(pixmap)
        logo.setAlignment(QtCore.Qt.AlignCenter)

        #Etiquetas principales de la caja de búsquedas

        self.etiqueta_album = QLabel('Título del album')
        self.txt_album = QLineEdit()

        self.boton_buscar_album = QPushButton("Buscar")
        self.boton_buscar_album.clicked.connect(self.buscar_album)

        self.boton_ver_albumes = QPushButton("Ver todos")
        self.boton_ver_albumes.clicked.connect(self.ver_albumes)

        self.etiqueta_cancion = QLabel('Título de la canción')
        self.txt_cancion = QLineEdit()

        #Botones de acción

        self.boton_buscar_cancion = QPushButton("Buscar")
        self.boton_buscar_cancion.clicked.connect(self.buscar_cancion)

        self.boton_ver_canciones = QPushButton("Ver todas")
        self.boton_ver_canciones.clicked.connect(self.ver_canciones)

        self.etiqueta_interprete = QLabel('Intérprete de la canción')
        self.txt_interprete = QLineEdit()

        self.boton_buscar_interprete = QPushButton("Buscar")
        self.boton_buscar_interprete.clicked.connect(self.buscar_interprete)

        #self.boton_ver_interpretes = QPushButton("Ver todos")
        #self.boton_ver_interpretes.clicked.connect(self.ver_interpretes)

        self.etiqueta_resultados = QLabel('Resultados')
        self.etiqueta_resultados.setFont(QFont("Times", weight=QFont.Bold))

        #Se añaden los elementos a los distribuidores

        self.distr_caja_busquedas.addWidget(logo, 0, 0, 1, 4)

        self.distr_caja_busquedas.addWidget(self.etiqueta_album, 1, 0)
        self.distr_caja_busquedas.addWidget(self.txt_album, 1, 1)
        self.distr_caja_busquedas.addWidget(self.boton_buscar_album, 1, 2)
        self.distr_caja_busquedas.addWidget(self.boton_ver_albumes, 1, 3)

        self.distr_caja_busquedas.addWidget(self.etiqueta_cancion, 2, 0)
        self.distr_caja_busquedas.addWidget(self.txt_cancion, 2, 1)
        self.distr_caja_busquedas.addWidget(self.boton_buscar_cancion, 2, 2)
        self.distr_caja_busquedas.addWidget(self.boton_ver_canciones, 2, 3)

        self.distr_caja_busquedas.addWidget(self.etiqueta_interprete, 3, 0)
        self.distr_caja_busquedas.addWidget(self.txt_interprete, 3, 1)
        self.distr_caja_busquedas.addWidget(self.boton_buscar_interprete, 3, 2)

        self.distr_caja_busquedas.addWidget(self.etiqueta_resultados, 4, 0, 1,
                                            4)
        self.distr_caja_busquedas.setAlignment(self.etiqueta_resultados,
                                               QtCore.Qt.AlignCenter)

        #Se crea un área con barra de desplazamiento para mostrar los resultados

        self.tabla_resultados = QScrollArea()
        self.tabla_resultados.setFixedHeight(200)
        self.tabla_resultados.setWidgetResizable(True)
        self.widget_tabla_resultados = QWidget()
        self.widget_tabla_resultados.setLayout(QGridLayout())
        self.tabla_resultados.setWidget(self.widget_tabla_resultados)
        self.distr_caja_busquedas.addWidget(self.tabla_resultados, 4, 0, 1, 4)
Exemplo n.º 29
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.º 30
0
def ImageLoad(imageName, scale):
    img = QPixmap(runDirectory + "/weatherType/" + imageName + ".png")
    width = img.width()
    img = img.scaledToWidth(width * scale)
    return img
Exemplo n.º 31
0
class Viewer(QtMainWindow):
    jobAdded = Signal()
    jobFinished = Signal()

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

        self.ui = Ui_Viewer()
        self.ui.setupUi(self)
        self.ui.prevButton.clicked.connect(self.prev)
        self.ui.nextButton.clicked.connect(self.next)
        self.ui.firstButton.clicked.connect(self.first)
        self.ui.lastButton.clicked.connect(self.last)
        self.ui.actionZoomIn.triggered.connect(self.zoomIn)
        self.ui.actionZoomOut.triggered.connect(self.zoomOut)
        self.ui.actionFullSize.triggered.connect(self.zoomFullSize)
        self.ui.actionFitWindow.triggered.connect(self.zoomFit)

        self.ui.actionSaveImage.setShortcut(QKeySequence.Save)
        self.ui.actionSaveImage.triggered.connect(self.saveImage)
        self.ui.actionClose.setShortcut(QKeySequence.Close)
        self.ui.actionClose.triggered.connect(self.close)

        self.model = None
        self.current = None
        self.total = 0
        self.zoomFactor = 1
        self.zoomMode = ZOOM_FACTOR
        self.weboob = weboob

    def setData(self, model, qidx):
        self.model = model
        self.current = QPersistentModelIndex(qidx)

        self.model.rowsInserted.connect(self.updatePos)
        self.model.rowsRemoved.connect(self.updatePos)
        self.model.rowsInserted.connect(self.updateNavButtons)
        self.model.rowsRemoved.connect(self.updateNavButtons)
        self.model.dataChanged.connect(self._dataChanged)
        self.model.modelReset.connect(self.disable)

        self.updateImage()

    @Slot()
    def disable(self):
        self.setEnabled(False)

    def updateNavButtons(self):
        prev = self.current.row() > 0
        self.ui.prevButton.setEnabled(prev)
        self.ui.firstButton.setEnabled(prev)
        next = self.current.row() < self.total - 1
        self.ui.nextButton.setEnabled(next)
        self.ui.lastButton.setEnabled(next)

    def updatePos(self):
        self.total = self.model.rowCount(self.current.parent())
        self.ui.posLabel.setText('%d / %d' % (self.current.row() + 1, self.total))

    def updateImage(self):
        self.updatePos()
        self.updateNavButtons()

        obj = self.current.data(ResultModel.RoleObject)

        if obj.data is NotLoaded:
            self.model.fillObj(obj, ['data'], QModelIndex(self.current))
            self.pixmap = None
        elif obj.data:
            self.pixmap = QPixmap(QImage.fromData(obj.data))
        else:
            self.pixmap = QPixmap()

        self._rebuildImage()

    @Slot(QModelIndex)
    def _dataChanged(self, qidx):
        if qidx == self.current:
            obj = qidx.data(ResultModel.RoleObject)

            if obj.data:
                self.pixmap = QPixmap(QImage.fromData(obj.data))
            else:
                self.pixmap = QPixmap()
            self._rebuildImage()

    @Slot()
    def next(self):
        new = self.current.sibling(self.current.row() + 1, 0)
        if not new.isValid():
            return
        self.current = QPersistentModelIndex(new)
        self.updateImage()

    @Slot()
    def prev(self):
        if self.current.row() == 0:
            return
        self.current = QPersistentModelIndex(self.current.sibling(self.current.row() - 1, 0))
        self.updateImage()

    @Slot()
    def first(self):
        self.current = QPersistentModelIndex(self.current.sibling(0, 0))
        self.updateImage()

    @Slot()
    def last(self):
        self.current = QPersistentModelIndex(self.current.sibling(self.total - 1, 0))
        self.updateImage()

    @Slot()
    def zoomIn(self):
        self.zoomFactor *= 1.25
        self.zoomMode = ZOOM_FACTOR
        self._rebuildImage()

    @Slot()
    def zoomOut(self):
        self.zoomFactor *= 0.75
        self.zoomMode = ZOOM_FACTOR
        self._rebuildImage()

    @Slot()
    def zoomFullSize(self):
        self.zoomFactor = 1
        self.zoomMode = ZOOM_FACTOR
        self._rebuildImage()

    @Slot()
    def zoomFit(self):
        self.zoomMode = ZOOM_FIT
        self._rebuildImage()

    def resizeEvent(self, ev):
        super(Viewer, self).resizeEvent(ev)
        if self.zoomMode == ZOOM_FIT:
            self._rebuildImage()

    def _rebuildZoom(self):
        if self.zoomMode == ZOOM_FACTOR:
            new_width = int(self.pixmap.width() * self.zoomFactor)
            pixmap = self.pixmap.scaledToWidth(new_width, Qt.SmoothTransformation)
        else:
            new_size = self.ui.scrollArea.viewport().size()
            pixmap = self.pixmap.scaled(new_size, Qt.KeepAspectRatio, Qt.SmoothTransformation)
            self.zoomFactor = pixmap.width() / float(self.pixmap.width())
        return pixmap

    def _rebuildImage(self):
        if self.pixmap is None:
            self.ui.view.setText('Loading...')
            return
        elif self.pixmap.isNull():
            self.ui.view.setText('Image could not be loaded')
            return

        pixmap = self._rebuildZoom()
        self.ui.view.setPixmap(pixmap)

    @Slot()
    def saveImage(self):
        def ext_for_filter(s):
            return re.match(r'(?:[A-Z]+) \(\*\.([a-z]+)\)$', s).group(1)

        if not self.pixmap:
            return

        filters = ['PNG (*.png)', 'JPEG (*.jpg)', 'GIF (*.gif)']

        obj = self.current.data(ResultModel.RoleObject)
        name = '%s.%s' % (obj.title or obj.id or u'', obj.ext or 'png')
        default = filters[0]
        for f in filters:
            if name.endswith(ext_for_filter(f)):
                default = f
        filters = ';;'.join(filters)

        target = os.path.join(self.parent().lastSaveDir, name)
        out, filter = QFileDialog.getSaveFileName(self, 'Save image', target, filters, default)
        if not out:
            return

        ext = ext_for_filter(filter)

        self.parent().lastSaveDir = os.path.dirname(out)
        if not os.path.splitext(out)[1]:
            out = '%s.%s' % (out, ext)

            if os.path.exists(out):
                q = self.tr('%s already exists, are you sure you want to replace it?') % out
                reply = QMessageBox.question(self, self.tr('Overwrite?'), q)
                if reply == QMessageBox.No:
                    return self.saveImage()

        self.pixmap.save(out, ext.upper())
Exemplo n.º 32
0
    def __init__(self, image_path):
        super().__init__()

        item_pixmap = QPixmap(image_path)
        resize_item = item_pixmap.scaledToWidth(150)
        self.item = QGraphicsPixmapItem(resize_item)
Exemplo n.º 33
0
class App():
    def __init__(self):

        # sizeObject = QDesktopWidget().screenGeometry()
        # print(" Screen size : "  + str(sizeObject.height()) + "x"  + str(sizeObject.width()))


        self.current_image_index = 0
        print(self.current_image_index)
        QWidget().__init__()
        try:
            self.folder = sys.argv[1]
        except IndexError:
            print('You must specify the full path to a folder.\n')
            sys.exit(1)

        self.original_path = os.path.join(self.folder, 'original')
        self.full_masks_path = os.path.join(self.folder, 'full-masks')

        #Create array of images in 'original' folder
        self.original_images = []
        for (dirpath, dirnames, original_filenames) in walk(self.original_path):
            self.original_images.extend(original_filenames)
        self.sortedoriginal = sorted(self.original_images)
        print(len(self.sortedoriginal))

        #Create array of images in 'full-masks' folder
        self.full_masks_images = []
        for (dirpath, dirnames, mask_filenames) in walk(self.full_masks_path):
            self.full_masks_images.extend(mask_filenames)
        self.sortedmasks = sorted(self.full_masks_images)
        print(len(self.sortedmasks))


        #Full mask window
        self.w2 = QWidget()
        self.b2 = QLabel(self.w2)
        self.current_mask = QPixmap(os.path.join(self.full_masks_path, self.sortedmasks[self.current_image_index]))
        self.maskim = Image.open(os.path.join(self.full_masks_path, self.sortedmasks[self.current_image_index]))
        self.b2.setPixmap(self.current_mask)
        self.w2.setGeometry(1100, 200, 1003, 752)
        self.w2.setWindowTitle("Full mask: " + self.sortedmasks[self.current_image_index])
        self.w2.show()

        #Original image window
        self.w = QWidget()
        self.b = QLabel(self.w)
        self.current_original_image = QPixmap(os.path.join(self.original_path, self.sortedoriginal[self.current_image_index]))
        self.origim = Image.open(os.path.join(self.original_path, self.sortedoriginal[self.current_image_index]))
        self.origimresized = resizeimage.resize_cover(self.origim, [1003, 752])
        self.b.setPixmap(self.current_original_image.scaledToWidth(1003))
        self.w.setGeometry(5, 200, 1003, 752)
        self.w.setWindowTitle("Original image: " + self.sortedoriginal[self.current_image_index])
        self.w.show()

        #Overlayed image window
        self.w3 = QWidget()
        self.b3 = QLabel(self.w3)

        self.overlayed_image = Image.blend(self.origimresized, self.maskim, 0.3)
        self.qim = ImageQt(self.overlayed_image)
        self.pix = QPixmap.fromImage(self.qim)
        self.b3.setPixmap(self.pix)

        self.w3.setGeometry(2195, 200, 1003, 752)
        self.w3.setWindowTitle('Overlayed Image: ' + self.sortedoriginal[self.current_image_index])
        self.w3.show()

        #Next button window
        self.btnwin = QWidget()
        self.btntext = QLabel(self.btnwin)
        self.btntext.setText("The images are in the following order: original image, full mask, overlayed mask.")
        self.btn = QPushButton(self.btnwin)
        self.btn.setText("Next")
        self.btn.clicked.connect(self.handle_btn)
        self.btnwin.setGeometry(700, 1000, 700, 100)
        self.btntext.move(50, 5)
        self.btn.move(300, 40)
        self.btnwin.setWindowTitle('PyQt 4')
        self.btnwin.show()

        self.load_new_image(self.sortedoriginal)

    def load_new_image(self, folder):
        print(folder)


    # def resize_image()


    def handle_btn(self):
        if self.current_image_index + 1 < len(self.sortedoriginal):
            self.current_image_index = self.current_image_index + 1

            #Set new original image
            self.current_original_image = QPixmap(os.path.join(self.original_path, self.sortedoriginal[self.current_image_index]))
            self.origim = Image.open(os.path.join(self.original_path, self.sortedoriginal[self.current_image_index]))
            self.origimresized = resizeimage.resize_cover(self.origim, [1003, 752])
            self.b.setPixmap(self.current_original_image)
            self.b.setPixmap(self.current_original_image.scaledToWidth(1003))
            self.w.setWindowTitle("Original image: " + self.sortedoriginal[self.current_image_index])

            #set new mask image
            self.current_mask = QPixmap(os.path.join(self.full_masks_path, self.sortedmasks[self.current_image_index]))
            self.maskim = Image.open(os.path.join(self.full_masks_path, self.sortedmasks[self.current_image_index]))
            self.b2.setPixmap(self.current_mask)
            self.w2.setWindowTitle("Full mask: " + self.sortedmasks[self.current_image_index])

            #set new overlay image
            self.overlayed_image = Image.blend(self.origimresized, self.maskim, 0.3)
            self.qim = ImageQt(self.overlayed_image)
            self.pix = QPixmap.fromImage(self.qim)
            self.b3.setPixmap(self.pix)
            self.w3.setWindowTitle('Overlayed Image: ' + self.sortedoriginal[self.current_image_index])
            self.w3.show()
        else:
            print("No more images in directory!")
Exemplo n.º 34
0
class main_win(QWidget):

    switch_window = pyqtSignal()
    switch_window2 = pyqtSignal()

    def __init__(self):
        QWidget.__init__(self)
        self.setWindowTitle('OpenKDM')

        layout = QVBoxLayout()

        self.labelImage = QLabel(self)
        self.pixmap = QPixmap(appctxt.get_resource("logo_banner.png"))
        self.pixmap = self.pixmap.scaledToWidth(512)  # image size
        self.labelImage.setPixmap(self.pixmap)
        self.labelImage.setAlignment(Qt.AlignCenter)

        self.button = QPushButton('Numerical Simulation')
        self.button.clicked.connect(self.login1)

        self.button2 = QPushButton('Analytical Solutions')
        self.button2.clicked.connect(self.login2)
        self.button.resize(100, 32)
        # self.button.setSizePolicy(QSizePolicy.Preferred,QSizePolicy.Expanding)
        # self.button2.setSizePolicy(QSizePolicy.Preferred,QSizePolicy.Expanding)

        self.button.setEnabled(False)
        self.button2.setEnabled(False)

        self.intro_text = """The study of the 'Kinematics and Dynamics of Machinery' (IITT course code: ME2206) lies at the very core of a mechanical engineering background. Although, little has changed in the way the subject is presented, our methodology brings the subject alive and current. We present the design and fabrication of a novel experimental setup for carrying out static, kinematic and dynamic analysis of three different mechanisms in a single setup. The mechanism is designed to be configurable to three different types of mechanisms namely - double crank, slider crank and a six bar mechanism depending on the use case. The mechanism has retrofitted parts (different link lengths and sliders) to facilitate multiple experiments in the same setup. The learner gets to 'play' with the mechanism parameters and immediately understand their effects. This will enhance one’s grasp of the concepts and the development of analytical skills. Hence greatly supplementing and reinforcing the theoretical understanding of the undergraduate students taking the course."""

        self.license_text = """MIT License

Copyright (c) 2020 Aakash Yadav

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. """

        self.text = QLabel()
        self.text.setText(self.intro_text)
        self.text.setWordWrap(True)
        self.text.setAlignment(Qt.AlignCenter)

        self.license_layout = QVBoxLayout()
        self.license = QPlainTextEdit(self.license_text)
        self.license.setReadOnly(True)
        self.license_layout.addWidget(self.license)
        self.license_layout.setContentsMargins(200, 0, 200, 0)

        self.agree_box = QCheckBox("I have read the license agreement")
        # self.agree_box.setChecked(True)
        self.agree_box.stateChanged.connect(self.license_agree)
        self.license_layout.addWidget(self.agree_box)

        layout.addWidget(self.labelImage)
        layout.addWidget(self.text)
        layout.addLayout(self.license_layout)
        layout.addWidget(self.button)
        layout.addWidget(self.button2)
        layout.setSpacing(20)
        layout.setContentsMargins(200, 10, 200, 10)  #left, top, right, bottom

        self.setLayout(layout)

    @pyqtSlot()
    def login1(self):
        self.switch_window.emit()

    @pyqtSlot()
    def login2(self):
        self.switch_window2.emit()

    @pyqtSlot()
    def license_agree(self):
        if self.sender().isChecked():
            self.button.setEnabled(True)
            self.button2.setEnabled(True)
        else:
            self.button.setEnabled(False)
            self.button2.setEnabled(False)
Exemplo n.º 35
0
    def update_weather(self):
        self.wg.get_json_data()
        self.wg.parse_observation_data()
        self.wg.parse_forecast_data()
        w = self.wg.observation_dict
        f = self.wg.forecast_dict
        try:
            if w['observation_epoch'] != self.last_update:
                self.last_update = w['observation_epoch']
                # Observation Section
                pix = QPixmap('/home/pi/piqtwx/icons/%s' % w['icon'])
                self.icon_current.setPixmap(pix)
                self.text_current_temp_f.setText(
                    '<span style="color:#feae3c;">'
                    '<b>%s</b><sup>&deg;F</sup>'
                    '</span>' % w['temp_f']
                )
                self.text_wind_dir.setText(w['wind_dir'])
                self.text_wind_speed.setText(
                    '<b>%s</b>' % w['wind_mph']
                )
                if w['heat_index_f'] == 'NA' and w['windchill_f'] == 'NA':
                    self.label_hi_or_wc.setText('HI:')
                    self.text_hi_or_wc.setText('<b>NA</b>')
                elif w['heat_index_f'] != 'NA':
                    self.label_hi_or_wc.setText('HI:')
                    self.text_hi_or_wc.setText(
                        '<b>%s</b>&deg;F' % w['heat_index_f']
                    )
                else:
                    self.label_hi_or_wc.setText('WC:')
                    self.text_hi_or_wc.setText(
                        '<b>%s</b>&deg;F' % w['windchill_f']
                    )
                self.text_dewpoint.setText(
                    '<b>%s</b>&deg;F' % w['dewpoint_f']
                )
                self.text_humidity.setText(
                    '<b>%s</b>' % w['relative_humidity']
                )
                self.text_pressure.setText(
                    '<b>%s</b> in.' % w['pressure_in']
                )
                self.text_visibility.setText(
                    '<b>%s</b> miles' % w['visibility_mi']
                )
                if w['precip_today_in'] != "":
                    self.text_precip.setText(
                        '<b>%s</b> in.' % w['precip_today_in']
                    )
                else:
                    self.text_precip.setText(
                        '<b>0.0</b> in.'
                    )

                # Forecast Section
                self.text_forecast1_date.setText(
                    '<b>%s %s/%s</b>' % (
                        f[0]['weekday'],
                        f[0]['month'],
                        f[0]['day']
                    )
                )
                self.text_forecast1_temp.setText(
                    '<b style="color:#feae3c;">%s&deg;</b>'
                    '<span style="color:#aaa;"> | </span>'
                    '<b style="color:#0074a2;">%s&deg;</b>' % (
                        f[0]['high_f'],
                        f[0]['low_f']
                    )
                )
                pix = QPixmap('/home/pi/piqtwx/icons/%s' % f[0]['icon'])
                self.icon_forecast1.setPixmap(pix.scaledToWidth(40))

                self.text_forecast2_date.setText(
                    '<b>%s %s/%s</b>' % (
                        f[1]['weekday'],
                        f[1]['month'],
                        f[1]['day']
                    )
                )
                self.text_forecast2_temp.setText(
                    '<b style="color:#feae3c;">%s&deg;</b>'
                    '<span style="color:#aaa;"> | </span>'
                    '<b style="color:#0074a2;">%s&deg;</b>' % (
                        f[1]['high_f'],
                        f[1]['low_f']
                    )
                )
                pix = QPixmap('/home/pi/piqtwx/icons/%s' % f[1]['icon'])
                self.icon_forecast2.setPixmap(pix.scaledToWidth(40))

                self.text_forecast3_date.setText(
                    '<b>%s %s/%s</b>' % (
                        f[2]['weekday'],
                        f[2]['month'],
                        f[2]['day']
                    )
                )
                self.text_forecast3_temp.setText(
                    '<b style="color:#feae3c;">%s&deg;</b>'
                    '<span style="color:#aaa;"> | </span>'
                    '<b style="color:#0074a2;">%s&deg;</b>' % (
                        f[2]['high_f'],
                        f[2]['low_f']
                    )
                )
                pix = QPixmap('/home/pi/piqtwx/icons/%s' % f[2]['icon'])
                self.icon_forecast3.setPixmap(pix.scaledToWidth(40))
        except KeyError:
            # Current Observations
            pix = QPixmap('/home/pi/piqtwx/icons/unknown.png')
            self.icon_current.setPixmap(pix)
            self.text_current_temp_f.setText('<b>??</b><sup>&deg;F</sup>')
            self.text_hi_or_wc.setText('<b>???</b>&deg;F')
            self.text_dewpoint.setText('<b>???</b>&deg;F')
            self.text_humidity.setText('<b>???</b>%')
            self.text_pressure.setText('<b>???</b> in.')
            self.text_visibility.setText('<b>???</b> miles')
            self.text_precip.setText('<b>???</b> in.')

            # Forecast
            self.text_forecast1_date.setText('<b>???</b>')
            self.icon_forecast1.setPixmap(pix)
            self.text_forecast1_temp.setText(
                '<b style="color:#feae3c;">???&deg;</b>'
                '<span style="color:#aaa;"> | </span>'
                '<b style="color:#0074a2;">???&deg;</b>'
            )
            self.text_forecast2_date.setText('<b>???</b>')
            self.icon_forecast2.setPixmap(pix)
            self.text_forecast2_temp.setText(
                '<b style="color:#feae3c;">???&deg;</b>'
                '<span style="color:#aaa;"> | </span>'
                '<b style="color:#0074a2;">???&deg;</b>'
            )
            self.text_forecast3_date.setText('<b>???</b>')
            self.icon_forecast3.setPixmap(pix)
            self.text_forecast3_temp.setText(
                '<b style="color:#feae3c;">???&deg;</b>'
                '<span style="color:#aaa;"> | </span>'
                '<b style="color:#0074a2;">???&deg;</b>'
            )
            return False
        return True
class ScoreTracker(QMainWindow):
    def __init__(self, parent=None):
        super().__init__(parent)
        self.setWindowTitle('ScoreKeeper 4.2')

        self.stack = QStackedWidget(self)
        self.setCentralWidget(self.stack)

        self.create_titleScreen()
        self.create_scoreScreen()

        current_dir = os.path.dirname(os.path.abspath(__file__))
        styles = os.path.join(current_dir, 'score_tracker.css')
        with open(styles, 'r') as f:
            self.setStyleSheet(f.read())

        self.stack.addWidget(self.title_screen)
        self.stack.addWidget(self.score_screen)

        self._create_menu()
        self._create_tool_bar()

    def create_scoreScreen(self):
        self.score_header = QLabel()
        self.screen_image = QPixmap(':/images/score_board2.jpg')
        self.screen_image.scaledToWidth(0)
        self.score_header.setPixmap(self.screen_image)

        self.score_screen = QWidget()
        self.score_screen.setObjectName("score_screen")
        self.score_screen_layout = QVBoxLayout()
        self.score_screen.setLayout(self.score_screen_layout)
        self.score_screen_layout.addWidget(self.score_header)
        self.score_label = QLabel()
        self.score_screen_layout.addWidget(self.score_label)

    def create_titleScreen(self):
        self.header = QLabel()
        self.title_image = QPixmap(':/images/score_board.jpg')
        self.title_image.scaledToWidth(15)
        self.header.setPixmap(self.title_image)

        self.player_no = QComboBox()
        self.players = ['1', '2', '3', '4']
        self.player_no.addItems(self.players)
        self.player_boxLabel = QLabel(
            'Please select the number of players (1-4):')
        self.player_boxLabel.setObjectName('cbox_label')
        self.player_boxLabel.setBuddy(self.player_no)

        self.title_screen = QWidget()
        self.title_screen.setObjectName("title_screen")
        self.title_screen_layout = QVBoxLayout()
        self.title_screen.setLayout(self.title_screen_layout)
        self.title_screen_layout.addWidget(self.header)
        self.title_screen_layout.addWidget(self.player_boxLabel)
        self.title_screen_layout.addWidget(self.player_no)
        self.title_button = QPushButton('Create Score Board')
        self.title_screen_layout.addWidget(self.title_button)

        self.title_button.clicked.connect(self.score_screen_onClick)
        self.title_button.clicked.connect(self._create_players)

    def _create_players(self):
        number_of_players = self.player_no.currentText()
        self.holding_list = []

        for i in range(int(number_of_players)):
            self.holding_list.append(Player())

        for j in range(int(number_of_players)):
            self.score_screen_layout.addWidget(
                self.holding_list[j].button_group)

    def _add_player(self):
        self.new_player = Player()
        self.holding_list.append(self.new_player)
        self.score_screen_layout.addWidget(
            self.holding_list[len(self.holding_list) - 1].button_group)

    def _remove_player(self):
        if (len(self.holding_list) > 1):
            self.holding_list[-1].button_group.setParent(None)
            self.holding_list.pop()

        for k in range(0, 10):
            QApplication.processEvents()

        self.resize(self.minimumSizeHint())

    def score_screen_onClick(self):
        self.stack.setCurrentIndex(1)

    def title_screen_onClick(self):
        self.stack.setCurrentIndex(0)

    def _create_tool_bar(self):
        self.tools = QToolBar()
        self.addToolBar(self.tools)
        self.tools.addAction('&Add Player', self._add_player)
        self.tools.addAction('&Remove Player', self._remove_player)

    def _create_menu(self):
        self.menu = self.menuBar().addMenu('&Menu')
        self.help = self.menuBar().addMenu('&Help')
        self.menu.addAction('&Exit', self.close)
        self.help.addAction('&About', self.display_about)

    def display_about(self):
        about = QDialog(self)
        layout = QVBoxLayout()
        about_label = QLabel(
            'Small ScoreKeeper app made in Python, \nshoutout to John Milley. \n\n\n\n\t\t CNA OOP Python 1890 '
        )
        layout.addWidget(about_label)
        about.setLayout(layout)
        about.exec()
Exemplo n.º 37
0
    def __init__(self):
        super().__init__()

        self.show_log = False

        # create a palette, used to set color
        self.pe = QPalette()
        """ UI for training  """
        choose_train_data = QPushButton('choose train data')
        self.start_train = QPushButton('Start training')
        self.stop_train = QPushButton('Stop training')

        choose_train_data.clicked.connect(self.show_train_dialog)
        self.start_train.clicked.connect(self.start_train_func)
        self.stop_train.clicked.connect(self.stop_train_func)

        # used to show the chosen training directory
        self.train_dir_edit = QLineEdit()

        # used to show training statics
        self.statics_label = QLabel('')
        self.statics_label.setAlignment(Qt.AlignTop)
        self.statics_label.setAutoFillBackground(True)
        self.pe.setColor(QPalette.Background, Qt.white)
        self.statics_label.setPalette(self.pe)

        self.loss_label = QLabel('')
        self.pe.setColor(QPalette.Background, Qt.white)
        self.loss_label.setAutoFillBackground(True)
        self.loss_label.setPalette(self.pe)
        self.resize_image(path="./buffer/blank.jpg", mode='loss')
        loss_im = QPixmap("./buffer/loss_buffer.jpg")
        loss_im = loss_im.scaledToWidth(430)
        loss_im = loss_im.scaledToHeight(300)
        self.loss_label.setPixmap(loss_im)

        # add buttons, label, and edit to the ui
        grid_train = QGridLayout()
        grid_train.setSpacing(10)

        grid_train.addWidget(choose_train_data, 1, 0)
        grid_train.addWidget(self.train_dir_edit, 1, 1, 1, 3)
        grid_train.addWidget(self.start_train, 1, 4, 1, 2)
        grid_train.addWidget(self.stop_train, 1, 6, 1, 2)
        grid_train.addWidget(self.statics_label, 2, 0, -1, 4)
        grid_train.addWidget(self.loss_label, 2, 4, -1, 4)
        """ UI for testing """
        choose_test_data = QPushButton('choose test data')
        choose_test_data.clicked.connect(self.show_test_dialog)

        self.test_dir_edit = QLineEdit()

        # create a label to show image
        self.image_label = QLabel()
        self.resize_image(path="./buffer/blank.jpg", mode='test')
        test_im = QPixmap("./buffer/test_buffer.jpg")
        test_im = test_im.scaledToWidth(430)
        test_im = test_im.scaledToHeight(430)
        self.image_label.setPixmap(test_im)

        self.results_label = QLabel('Results')
        self.results_label.setAlignment(Qt.AlignCenter)
        self.pe.setColor(QPalette.Background, Qt.lightGray)
        self.results_label.setAutoFillBackground(True)
        self.results_label.setPalette(self.pe)

        # add thses buttons, labels, edit to the ui
        grid_test = QGridLayout()
        grid_test.setSpacing(10)

        grid_test.addWidget(choose_test_data, 1, 0)
        grid_test.addWidget(self.test_dir_edit, 1, 1, 1, 3)
        grid_test.addWidget(self.image_label, 2, 0, -1, 4)
        grid_test.addWidget(self.results_label, 1, 4, 1, 4)

        # create ui for test results
        self.pe.setColor(QPalette.Background, Qt.white)

        collar_label = QLabel('领子设计')
        collar_label.setAlignment(Qt.AlignCenter)
        self.collar_result = QLabel('')
        self.collar_result.setAutoFillBackground(True)
        self.collar_result.setPalette(self.pe)
        self.collar_result.setAlignment(Qt.AlignCenter)

        neckline_label = QLabel('颈线设计')

        neckline_label.setAlignment(Qt.AlignCenter)
        self.neckline_result = QLabel('')
        self.neckline_result.setAutoFillBackground(True)
        self.neckline_result.setPalette(self.pe)
        self.neckline_result.setAlignment(Qt.AlignCenter)

        neck_label = QLabel('脖颈设计')
        neck_label.setAlignment(Qt.AlignCenter)
        self.neck_result = QLabel('')
        self.neck_result.setAutoFillBackground(True)
        self.neck_result.setPalette(self.pe)
        self.neck_result.setAlignment(Qt.AlignCenter)

        lapel_label = QLabel('翻领设计')
        lapel_label.setAlignment(Qt.AlignCenter)
        self.lapel_result = QLabel('')
        self.lapel_result.setAutoFillBackground(True)
        self.lapel_result.setPalette(self.pe)
        self.lapel_result.setAlignment(Qt.AlignCenter)

        coat_label = QLabel('衣长')
        coat_label.setAlignment(Qt.AlignCenter)
        self.coat_result = QLabel('')
        self.coat_result.setAutoFillBackground(True)
        self.coat_result.setPalette(self.pe)
        self.coat_result.setAlignment(Qt.AlignCenter)

        pant_laebl = QLabel('裤长')
        pant_laebl.setAlignment(Qt.AlignCenter)
        self.pant_result = QLabel('')
        self.pant_result.setAutoFillBackground(True)
        self.pant_result.setPalette(self.pe)
        self.pant_result.setAlignment(Qt.AlignCenter)

        skirt_label = QLabel('裙长')
        skirt_label.setAlignment(Qt.AlignCenter)
        self.skirt_result = QLabel('')
        self.skirt_result.setAutoFillBackground(True)
        self.skirt_result.setPalette(self.pe)
        self.skirt_result.setAlignment(Qt.AlignCenter)

        sleeve_label = QLabel('袖长')
        sleeve_label.setAlignment(Qt.AlignCenter)
        self.sleeve_result = QLabel('')
        self.sleeve_result.setAutoFillBackground(True)
        self.sleeve_result.setPalette(self.pe)
        self.sleeve_result.setAlignment(Qt.AlignCenter)

        grid_test.addWidget(collar_label, 2, 4, 1, 2)
        grid_test.addWidget(self.collar_result, 3, 4, 1, 2)
        grid_test.addWidget(neckline_label, 2, 6, 1, 2)
        grid_test.addWidget(self.neckline_result, 3, 6, 1, 2)
        grid_test.addWidget(neck_label, 4, 4, 1, 2)
        grid_test.addWidget(self.neck_result, 5, 4, 1, 2)
        grid_test.addWidget(lapel_label, 4, 6, 1, 2)
        grid_test.addWidget(self.lapel_result, 5, 6, 1, 2)
        grid_test.addWidget(coat_label, 6, 4, 1, 2)
        grid_test.addWidget(self.coat_result, 7, 4, 1, 2)
        grid_test.addWidget(pant_laebl, 6, 6, 1, 2)
        grid_test.addWidget(self.pant_result, 7, 6, 1, 2)
        grid_test.addWidget(skirt_label, 8, 4, 1, 2)
        grid_test.addWidget(self.skirt_result, 9, 4, 1, 2)
        grid_test.addWidget(sleeve_label, 8, 6, 1, 2)
        grid_test.addWidget(self.sleeve_result, 9, 6, 1, 2)
        """ combine two grid """
        upper_grid = QGridLayout()
        upper_grid.setSpacing(10)

        upper_grid.addLayout(grid_train, 1, 0)
        upper_grid.addLayout(grid_test, 2, 0)
        """ show the ui """
        self.setLayout(upper_grid)
        self.setGeometry(300, 100, 890, 860)
        self.setWindowTitle('image classification')
        self.setFixedSize(890, 860)
        self.show()
class sistema(QMainWindow, QDialog):
    def __init__(self, logado):
        QMainWindow.__init__(self)
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.setWindowIcon(QIcon("icon/app.png"))
        self.userlog = logado
        self.ui.login_logado.setText(self.userlog)  #usuario logado

        # PAGE 1
        #self.ui.btn_page_1.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.page1))
        # PAGE 2
        #self.ui.btn_page_2.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.page2))
        # PAGE 3
        #self.ui.btn_page_3.clicked.connect(lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.pagina3))
        #icone
        #Imagens:::
        self.ui.btnEscolherArquivo.clicked.connect(
            self.abrir_imagem)  #abrir foto
        self.ui.btnRedimensionar.clicked.connect(
            self.redimensionar)  #colocar no tamanho
        self.ui.btnSalvar.clicked.connect(self.salvar)  #salvar foto
        self.ui.ver_link_2.clicked.connect(
            self.abrir_imagem_pagina3)  #abrir imagen

        self.ui.baixa_link.clicked.connect(self.opcao)  #opcao baixa
        self.ui.pushButton.clicked.connect(self.box)  # ver imagen
        #MENU BAR CHAMAR PAGINA
        self.ui.actionPAGINA1.triggered.connect(
            lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.page1))
        self.ui.actionPAGINA2.triggered.connect(
            lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.page2))
        self.ui.actionPAGINA3.triggered.connect(
            lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.pagina3))
        self.ui.actionPAGINA4.triggered.connect(
            lambda: self.ui.stackedWidget.setCurrentWidget(self.ui.
                                                           pagin4_cadastro))
        self.ui.actionFECHAR.triggered.connect(self.menu_inicial)

    def menu_inicial(self):  #volta tela de login
        quit()

    def box(self):  #seta combox
        item = self.ui.comboBox.currentText()
        self.ui.label_pagina2.setText(item)

    def opcao(self):  #selecionar opcao
        baixa_musica = self.ui.caixa_link_2.text()
        baixa_foto = self.ui.caixa_link_2.text()
        baixa_video = self.ui.caixa_link_2.text()
        if self.ui.radioButton_image.isChecked():  #baixa image
            try:
                self.ui.tela_2.setText("baixando")
                baixa_foto == urlretrieve(baixa_foto, "imagen.png")
                time.sleep(2)
            except:
                QMessageBox.about(self, "Title", "Imagen")
                time.sleep(2)
                self.sistema = Imagen()
                self.sistema.show()
                self.ui.tela_2.setText("")
                self.ui.caixa_link_2.setText("")

        if self.ui.radioButton_musica.isChecked():  #baixa musica
            try:
                baixa_musica == urlretrieve(baixa_musica, "musica.mp3")
                self.ui.tela_2.setText("baixando")
                time.sleep(2)

            except:
                QMessageBox.about(self, "Title", "Musica")
                self.ui.tela_2.setText("")
                self.ui.caixa_link_2.setText("")

        if self.ui.radioButton_video_2.isChecked():  #video
            try:
                self.ui.tela_2.setText("baixando")
                baixa_video == urlretrieve(baixa_video, "video.mp4")
                time.sleep(2)
            except:
                QMessageBox.about(self, "Title", "Video")
                self.ui.tela_2.setText("")
                self.ui.caixa_link_2.setText("")

    ###############################################
    def abrir_imagem(self):  #imagens
        imagem, _ = QFileDialog.getOpenFileName(
            self.ui.centralwidget,
            'Abrir imagem',
            r'/home/luizotavio/Imagens/',
            options=QFileDialog.DontUseNativeDialog)
        self.ui.inputAbrirArquivo.setText(imagem)
        self.original_img = QPixmap(imagem)
        self.ui.labelImg.setPixmap(self.original_img)
        self.ui.inputLargura.setText(str(self.original_img.width()))
        self.ui.inputAltura.setText(str(self.original_img.height()))

    def redimensionar(self):  #imagens
        largura = int(self.ui.inputLargura.text())
        self.nova_imagem = self.original_img.scaledToWidth(largura)
        self.ui.labelImg.setPixmap(self.nova_imagem)
        self.ui.inputLargura.setText(str(self.nova_imagem.width()))
        self.ui.inputAltura.setText(str(self.nova_imagem.height()))

    def salvar(self):  #imagens
        imagem, _ = QFileDialog.getSaveFileName(
            self.ui.centralwidget,
            'Salvar imagem',
            r'/home/luizotavio/Desktop/',
            options=QFileDialog.DontUseNativeDialog)
        self.nova_imagem.save(imagem, 'PNG')

    ##############################################
    def abrir_imagem_pagina3(self):  #imagens pagina 3
        imagem, _ = QFileDialog.getOpenFileName(
            self.ui.centralwidget,
            'Ver Imagen',
            r'/home/luizotavio/Imagens/',
            options=QFileDialog.DontUseNativeDialog)
        self.ui.inputAbrirArquivo_2.setText(imagem)
        self.original_img = QPixmap(imagem)
        self.ui.Open_pagina2.setPixmap(self.original_img)
Exemplo n.º 39
0
class LoginForm(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        # 프로그램 전체 설정(배경색, 제목, 크기)
        self.setStyleSheet("background-color:white;")
        self.setWindowTitle('펀치 QR 생성')
        self.resize(300, 500)

        # GridLayout
        layout = QGridLayout()

        # Punch 로고
        self.lbl = QLabel()
        self.lbl.setMinimumSize(300, 400)
        self.img = QPixmap("logoW.png")
        self.lbl.setPixmap(self.img.scaledToWidth(170))
        self.lbl.setStyleSheet(
            "background: qlineargradient(x1: 0, y1: 0, x2: 1, y2: 0, "
            "stop: 0.4 #FF4B2B,"
            "stop: 1.0 #FF416C,);"
            "border-radius : 15px;")
        self.lbl.setAlignment(Qt.AlignCenter)
        layout.addWidget(self.lbl, 0, 0)

        # ID 입력창
        self.lineEdit_username = QLineEdit()
        self.lineEdit_username.setStyleSheet(
            "font-family: NanumSquare; font-size: 20px; font-weight:bold; "
            "padding-left: 10px;"
            "background-color: #f6f7f9; border-radius:10px; height:45px;")
        self.lineEdit_username.setPlaceholderText('아이디')
        self.lineEdit_username.resize(50, 10)
        layout.addWidget(self.lineEdit_username, 2, 0)

        # 비밀번호 입력창
        self.lineEdit_password = QLineEdit()
        self.lineEdit_password.setStyleSheet(
            "font-family: NanumSquare; font-size: 20px; font-weight:bold; "
            "padding-left: 10px;"
            "background-color: #f6f7f9; border-radius:10px; height:45px;")
        self.lineEdit_password.setEchoMode(QLineEdit.Password)
        self.lineEdit_password.setPlaceholderText('비밀번호')
        layout.addWidget(self.lineEdit_password, 3, 0)

        # 로그인버튼
        button_login = QPushButton('로그인')
        button_login.clicked.connect(self.login)
        button_login.setShortcut("Return")
        button_login.setStyleSheet(
            "font-size : 20px; background-color: #fff; font-family: NanumSquare;"
            "background-color: #fff;"
            "height: 45px; margin-top:10px; padding 5px;")
        layout.addWidget(button_login, 4, 0)

        # 전체 레이아웃 설정
        self.setLayout(layout)

    # login 함수 구현
    def login(self):
        if self.lineEdit_username.text() == "" or self.lineEdit_password.text(
        ) == "":
            msg = QMessageBox()
            msg.setText('아이디 혹은 비밀번호를 입력하세요.')
            msg.exec_()
        else:
            url_post = "http://ec2-54-180-94-182.ap-northeast-2.compute.amazonaws.com:3000/python/login"
            login_json = {
                'inputId': self.lineEdit_username.text(),
                'inputPw': self.lineEdit_password.text()
            }
            response = requests.post(url_post, json=login_json)
            if response.status_code == 200:
                data_login = response.json()
                if data_login['error']:
                    msg = QMessageBox()
                    msg.setText('아이디 혹은 비밀번호를 확인해주세요.')
                    msg.exec_()
                else:
                    global qr_token
                    qr_token = data_login['token']
                    self.close()
                    self.qr = QR()
                    self.qr.show()
            else:
                msg = QMessageBox()
                msg.setText('인터넷 연결을 확인해주세요.')
                msg.exec_()
Exemplo n.º 40
0
 def makeImage(self, image):
     pixmap = QPixmap(self.imageRes(image))
     pixmap.scaledToWidth(300)
     pixmap.scaledToHeight(300)
     return pixmap
Exemplo n.º 41
0
    def __init__(self, players):
        super().__init__()

        print('Players to play: ', players)

        # PowerUp process
        self.powerUpQueue = Queue()
        print('Regular process id: ', current_process().pid)
        powerUpProcess = Process(target=powerup_process,
                                 args=[self.powerUpQueue])
        powerUpProcess.start()
        self.powerUpLabels = []

        # ShootLaser thread
        self.shootLaser = ShootLaser()
        self.shootLaser.calc_done.connect(self.move_laser_up)
        self.shootLaser.collision_detected.connect(
            self.player_laser_enemy_collide)
        self.shootLaser.moving_collision_detected.connect(
            self.player_laser_moving_enemy_collide)
        self.shootLaser.start()

        # MoveEnemy thread
        self.moveEnemy = MoveEnemy()
        self.moveEnemy.calc_done.connect(self.move_enemy)
        self.moveEnemy.start()

        # EnemyShoot thread
        self.enemyShoot = EnemyShoot()
        self.enemyShoot.can_shoot.connect(self.enemy_shoot_laser)
        self.enemyShoot.move_down.connect(self.move_enemy_laser)
        self.enemyShoot.collision_detected.connect(self.enemy_hit_player)
        self.enemyShoot.next_level.connect(self.next_level)
        self.enemyShoot.start()

        # EnemyAttack thread
        self.enemyAttack = EnemyAttack()
        self.enemyAttack.can_attack.connect(self.enemy_attack_player)
        self.enemyAttack.move_down.connect(self.move_enemy_down)
        self.enemyAttack.player_collision.connect(self.enemy_attack_player_hit)
        self.enemyAttack.start()

        # PowerUp thread
        self.deusExMachina = DeusExMachina()
        self.deusExMachina.collision_detected.connect(self.powerup_collision)
        self.deusExMachina.powerup_timeout.connect(self.powerup_timeout)
        self.deusExMachina.start()

        # Power up timer
        self.powerUpTimer = QTimer()
        self.powerUpTimer.setInterval(config.POWERUP_TIMEOUT)
        self.powerUpTimer.timeout.connect(self.show_powerup)
        self.powerUpTimer.start()

        # Gameplay options
        self.activePlayers = players
        self.startPlayers = players
        self.playerOneSpeed = config.PLAYER_SPEED
        self.playerTwoSpeed = config.PLAYER_SPEED
        self.playerOneCanShoot = True
        self.playerTwoCanShoot = True

        # Add background pixmap
        self.backgroundPixmap = QPixmap('images/background.png')

        # Add player one
        self.playerPixmap = QPixmap('images/ship.png')

        # add second player
        if self.startPlayers == 2:
            self.playerTwoPixmap = QPixmap('images/ship_two.png')

        # Set enemy pixmaps
        self.enemyPixmaps = []
        enemyPixmap = QPixmap('images/enemy_1.png')
        enemyPixmap = enemyPixmap.scaledToWidth(config.IMAGE_WIDTH - 20)
        enemyPixmap = enemyPixmap.scaledToHeight(config.IMAGE_HEIGHT - 20)
        self.enemyPixmaps.append(enemyPixmap)
        enemyPixmap = QPixmap('images/enemy_2.png')
        enemyPixmap = enemyPixmap.scaledToWidth(config.IMAGE_WIDTH - 20)
        enemyPixmap = enemyPixmap.scaledToHeight(config.IMAGE_HEIGHT - 20)
        self.enemyPixmaps.append(enemyPixmap)
        enemyPixmap = QPixmap('images/enemy_3.png')
        enemyPixmap = enemyPixmap.scaledToWidth(config.IMAGE_WIDTH - 20)
        enemyPixmap = enemyPixmap.scaledToHeight(config.IMAGE_HEIGHT - 20)
        self.enemyPixmaps.append(enemyPixmap)
        enemyPixmap = QPixmap('images/enemy_4.png')
        enemyPixmap = enemyPixmap.scaledToWidth(config.IMAGE_WIDTH - 20)
        enemyPixmap = enemyPixmap.scaledToHeight(config.IMAGE_HEIGHT - 20)
        self.enemyPixmaps.append(enemyPixmap)

        self.__init_ui__()
Exemplo n.º 42
0
class MainWindow(QMainWindow):
    def __init__(self):
        # Basic stuff
        super(MainWindow, self).__init__()
        self.title = "Annotation Tool"
        self.setWindowTitle(self.title)

        # Shorter side of image is scaled to this size
        self.displaySize = 500
        self.targetSize = 1024
        self.bboxSteps = 5
        self.resize(1200, 800)
        self.setFixedSize(1200, 800)

        # Menu bar
        # Open dataset
        openAction = QAction('Open', self)
        openAction.setStatusTip('Opens a dataset...')
        openAction.triggered.connect(self.openDataset)

        # Save dataset
        saveAction = QAction('Save', self)
        saveAction.setStatusTip('Saves a dataset...')
        saveAction.triggered.connect(self.saveDataset)

        # Add to Menubar
        menuBar = self.menuBar()
        fileMenu = menuBar.addMenu('File')
        fileMenu.addAction(openAction)
        fileMenu.addAction(saveAction)

        # Dataset stuff
        self.dataset_path = None
        self.df = None
        self.cur_index = -1

        # Saved for currently displayed image
        self.imagepath = None
        self.im = None

        # Define label to display image
        self.label = QLabel(self)
        self.label.setAlignment(Qt.AlignCenter)
        self.label.mousePressEvent = self.moveBBox
        self.setCentralWidget(self.label)

        self.painter = None

        self.show()

    def openDataset(self):
        # Open dataset .csv
        file_name = QFileDialog.getOpenFileName(self, 'Open File')
        self.dataset_path = os.path.dirname(file_name[0])
        self.df = pd.read_csv(filename[0])
        #pathlib.Path(self.dataset_path, 'labels').mkdir(parents=True, exist_ok=True)

        # Add flagged and crop_offset columns
        #self.df['flagged'] = False
        #self.df['bboxX'] = np.nan
        #self.df['bboxY'] = np.nan
        #self.df['bboxSize'] = np.nan

        # Display first image
        self.keyPressEvent(QKeyEvent(QEvent.KeyPress, Qt.Key_F, Qt.NoModifier))

    def saveDataset(self):
        # Save dataset to .csv
        filename = QFileDialog.getSaveFileName(self, 'Save File')
        with open(filename[0], 'w', encoding='utf-8') as f:
            self.df.to_csv(f, index=False, line_terminator='\n')

    def prepareImage(self):
        self.xOffset, self.yOffset, self.bboxScale = 0.0, 0.0, 1.0
        # Load image
        self.im = Image.open(self.imagepath)
        self.pixmap = QPixmap(self.imagepath)

        # Scale shorter side to self.display_size while retaining aspect ratio
        self.w, self.h = self.im.size
        self.isBroad = (self.w > self.h)
        if self.isBroad:
            self.bboxMax = self.h

            self.scale_f = self.displaySize / self.h
            self.w = int(self.scale_f * self.w)
            self.h = self.displaySize
        else:
            self.bboxMax = self.w

            self.scale_f = self.displaySize / self.w
            self.w = self.displaySize
            self.h = int(self.scale_f * self.h)

        self.bboxMin = self.targetSize if self.targetSize < self.bboxMax else self.bboxMax
        self.bboxStep = (self.bboxMax - self.bboxMin) / self.bboxSteps

        if self.isBroad:
            self.pixmap = self.pixmap.scaledToHeight(self.displaySize)
        else:
            self.pixmap = self.pixmap.scaledToWidth(self.displaySize)

    # xOffset and yOffset are for crop bounding box
    def displayImage(self):
        pixmap = self.pixmap.copy()
        # Create painter
        self.painter = QPainter(pixmap)

        # Configure painter
        self.penRectangle = QPen(Qt.red)
        self.penRectangle.setWidth(3)
        self.painter.setPen(self.penRectangle)

        # Initial position of bounding box
        bboxSize = self.bboxMin * self.scale_f + self.bboxScale * self.bboxSteps * self.bboxStep * self.scale_f
        xPos = (0.5 * self.w - 0.5 * bboxSize)
        yPos = (0.5 * self.h - 0.5 * bboxSize)

        # Add offset
        x = min(max(xPos + self.xOffset, 0.0), self.w - bboxSize)
        y = min(max(yPos + self.yOffset, 0.0), self.h - bboxSize)

        # Draw bounding box rectangle and center point
        self.painter.drawRect(x, y, bboxSize - 1, bboxSize - 1)
        self.painter.drawPoint(x + (bboxSize - 1) / 2, y + (bboxSize - 1) / 2)
        self.label.setPixmap(pixmap)

        # Save crop_offset to dataframe
        scale_f_inv = 1.0 / self.scale_f
        bboxX, bboxY, bboxSize_ = int(x * scale_f_inv), int(
            y * scale_f_inv), int(bboxSize * scale_f_inv)
        print('{:d}/{:d} | X: {:d}, Y: {:d}, S: {:d}'.format(
            self.cur_index, len(self.df), bboxX, bboxY, bboxSize_))
        self.df.loc[self.cur_index, 'bboxX'] = bboxX
        self.df.loc[self.cur_index, 'bboxY'] = bboxY
        self.df.loc[self.cur_index, 'bboxSize'] = bboxSize_

        del self.painter

    # Moves crop bbox on click
    def moveBBox(self, event):
        if self.df is None:
            return

        self.xOffset = event.pos().x() - self.label.width() / 2
        self.yOffset = event.pos().y() - self.label.height() / 2

        self.displayImage()

    def keyPressEvent(self, event):
        key = event.key()
        new_image = False
        if event.key() == Qt.Key_F:  # Next image
            new_image = True
            self.cur_index = self.cur_index + 1 if self.cur_index + 1 < len(
                self.df) else len(self.df) - 1
        elif event.key() == Qt.Key_A:  # Previous image
            new_image = True
            self.cur_index = self.cur_index - 1 if self.cur_index - 1 >= 0 else 0
        elif event.key() == Qt.Key_L:  # Move BBox
            self.xOffset += 20.0
            self.displayImage()
        elif event.key() == Qt.Key_H:
            self.xOffset -= 20.0
            self.displayImage()
        elif event.key() == Qt.Key_J:
            self.yOffset += 20.0
            self.displayImage()
        elif event.key() == Qt.Key_K:
            self.yOffset -= 20.0
            self.displayImage()
        elif event.key() == Qt.Key_D:  # Change Bbox scale
            self.bboxScale += 1.0 / self.bboxSteps
            self.bboxScale = min(1.0, self.bboxScale)
            self.displayImage()
        elif event.key() == Qt.Key_S:
            self.bboxScale -= 1.0 / self.bboxSteps
            self.bboxScale = max(0.0, self.bboxScale)
            self.displayImage()
        elif event.key() == Qt.Key_G:  # Flag/Unflag
            self.df.loc[self.cur_index,
                        'flagged'] = not self.df.loc[self.cur_index, 'flagged']
            print('Flagged:', self.df.loc[self.cur_index, 'flagged'])

        # Open image and display
        if new_image:
            self.imagepath = opjoin(self.dataset_path, 'images',
                                    self.df.iloc[self.cur_index]['id'])
            if os.path.isfile(self.imagepath + '.jpeg'):
                self.imagepath += '.jpeg'
            elif os.path.isfile(self.imagepath + '.png'):
                self.imagepath += '.png'
            else:
                print('Skipping image, because not found')
                self.df.iloc[self.cur_index]['flagged'] = True
                self.keyPressEvent(event)

            try:
                im = Image.open(self.imagepath)
            except:
                print('Skipping image, because cannot open')
                self.df.loc[self.cur_index, 'flagged'] = True
                self.keyPressEvent(event)

            self.prepareImage()
            self.displayImage()
Exemplo n.º 43
0
    def __init__(self):
        super().__init__()

        self.central_widget = QWidget()

        self.answers = {
            "0.mp4": "Dalla Dalla - Itzy",
            "1.mp4": "Gashina - Sunmi",
            "2.mp4": "Heart Shaker - Twice",
            "3.mp4": "Kill This Love - Blackpink",
            "4.mp4": "Psycho - Red Velvet",
            "5.mp4": "Red Flavor - Red Velvet",
            "6.mp4": "What is Love - Twice"
        }
        # Logo up top
        labelImage = QLabel()
        pixmap = QPixmap("logo.png")
        pixmap = pixmap.scaledToWidth(100)
        labelImage.setPixmap(pixmap)

        # Text on right of logo
        name_of_app = QLabel('Guess That Song!')
        learn_more = QPushButton("Learn More")
        width = learn_more.fontMetrics().boundingRect(
            'Learn More').width() + 12
        learn_more.setMaximumWidth(width)
        # name_of_app.setIndent(3)
        top_font = QFont("Helvetica", 30, QFont.Bold)
        name_of_app.setFont(top_font)

        # Layout up top
        top_layout = QHBoxLayout()
        right_layout = QVBoxLayout()
        right_button_layout = QHBoxLayout()
        right_button_layout.setAlignment(Qt.AlignRight)
        top_layout.addWidget(labelImage)
        right_layout.addWidget(name_of_app)
        right_button_layout.addWidget(learn_more)
        right_layout.addLayout(right_button_layout)
        top_layout.addLayout(right_layout)

        self.mediaPlayer = QMediaPlayer(None, QMediaPlayer.VideoSurface)
        self.videoWidget = QVideoWidget()

        # List of Videos
        self.vidList = [
            os.path.abspath(os.path.join("videos/", f))
            for f in os.listdir("videos/")
        ]
        random.shuffle(self.vidList)
        # Labels for inputs
        self.question = QLabel()
        self.status = QLabel()
        status_font = QFont("Helvetica", 12, QFont.Bold)
        self.status.setFont(status_font)
        self.answer_group = QButtonGroup()
        self.a1 = QRadioButton("a.")
        self.a2 = QRadioButton("b.")
        self.a3 = QRadioButton("c.")
        self.a4 = QRadioButton("d.")

        self.answer_group.addButton(self.a1)
        self.answer_group.addButton(self.a2)
        self.answer_group.addButton(self.a3)
        self.answer_group.addButton(self.a4)

        self.submit = QPushButton('Submit')
        width = self.submit.fontMetrics().boundingRect('Submit').width() + 12
        self.submit.setMaximumWidth(width)

        # Frame for email and password forms
        frame1 = QFrame(self.central_widget)
        frame1.setFrameShape(QFrame.StyledPanel)
        frame1.setFrameShadow(QFrame.Raised)
        questionLayout = QVBoxLayout()
        frame1Layout = QVBoxLayout()
        choiceLayout = QVBoxLayout()
        submitLayout = QVBoxLayout()
        statusLayout = QVBoxLayout()
        questionLayout.addWidget(self.question)
        choiceLayout.addWidget(self.a1)
        choiceLayout.addWidget(self.a2)
        choiceLayout.addWidget(self.a3)
        choiceLayout.addWidget(self.a4)
        submitLayout.addWidget(self.submit)
        statusLayout.addWidget(self.status)
        questionLayout.setAlignment(Qt.AlignCenter)
        choiceLayout.setAlignment(Qt.AlignCenter)
        submitLayout.setAlignment(Qt.AlignCenter)
        statusLayout.setAlignment(Qt.AlignCenter)
        frame1Layout.addLayout(questionLayout)
        frame1Layout.addLayout(choiceLayout)
        frame1Layout.addLayout(submitLayout)
        frame1Layout.addLayout(statusLayout)
        frame1Layout.setAlignment(Qt.AlignCenter)

        frame1.setLayout(frame1Layout)
        frame1Layout.addStretch()

        # Frame for email and nt3 data paths
        frame2 = QFrame(self.central_widget)
        frame2.setFrameShape(QFrame.StyledPanel)
        frame2.setFrameShadow(QFrame.Raised)

        frame2Layout = QVBoxLayout()
        frame2Layout.addWidget(self.videoWidget)

        frame2.setLayout(frame2Layout)

        self.progressBar = QProgressBar()
        self.progressBar.setMaximum(len(self.vidList))
        self.progressBar.setValue(0)
        self.submit.clicked.connect(self.check)
        learn_more.clicked.connect(self.learn_more_dialog)
        self.layout = QVBoxLayout(self.central_widget)
        self.layout.addLayout(top_layout)
        self.layout.addWidget(frame1)
        self.layout.addWidget(frame2)
        self.layout.addWidget(self.progressBar)
        self.setCentralWidget(self.central_widget)
        self.mediaPlayer.setVideoOutput(self.videoWidget)
        self.mediaPlayer.mediaStatusChanged.connect(self.loop)

        self.item = 1
        self.score = 0
        self.play(self.vidList[self.item - 1], self.item)
Exemplo n.º 44
0
class FigureCanvas(QFrame):

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

        self.setLineWidth(2)
        self.setMidLineWidth(1)
        self.setStyleSheet("background-color: white")

        self.img = []
        self.qpix_buff = []

    def load_mpl_figure(self, mplfig, view_dpi):

        self.qpix_buff = []

        # ---------------------------------------------------- figure size ----

        bbox = mplfig.get_window_extent()
        self.fwidth = bbox.width
        self.fheight = bbox.height

        # ------------------------------------------ save figure to buffer ----

        # http://stackoverflow.com/questions/8598673/
        # how-to-save-a-pylab-figure-into-in-memory-file-which-can-be-read
        # -into-pil-image/8598881#8598881

        # http://stackoverflow.com/questions/1300908/
        # load-blob-image-data-into-qpixmap

        # Scale dpi of figure to view_dpi

        orig_fig_dpi = mplfig.get_dpi()
        mplfig.dpi = view_dpi

        # Propagate changes to renderer :

        mplfig.canvas.draw()
        renderer = mplfig.canvas.get_renderer()
        orig_ren_dpi = renderer.dpi
        renderer.dpi = view_dpi

        # Generate img buffer :

        imgbuf = mplfig.canvas.buffer_rgba()
        imgwidth = int(renderer.width)
        imgheight = int(renderer.height)

        # Restore fig and renderer dpi

        renderer.dpi = orig_ren_dpi
        mplfig.dpi = orig_fig_dpi

        # Convert buffer to QPixmap :

        self.img = QImage(imgbuf, imgwidth, imgheight, QImage.Format_ARGB32)
        self.img = QImage.rgbSwapped(self.img)
        self.img = QPixmap(self.img)

    def paintEvent(self, event):
        """Qt method override to paint a custom image on the Widget."""
        super(FigureCanvas, self).paintEvent(event)

        qp = QPainter()
        qp.begin(self)

        # Prepare paint rect :

        fw = self.frameWidth()
        rect = QRect(0 + fw, 0 + fw,
                     self.size().width() - 2 * fw,
                     self.size().height() - 2 * fw)

        # Check/update image buffer :

        qpix2print = None
        for qpix in self.qpix_buff:
            if qpix.size().width() == rect.width():
                qpix2print = qpix
                break

        if qpix2print is None:
            qpix2print = self.img.scaledToWidth(
                rect.width(), mode=Qt.SmoothTransformation)
            self.qpix_buff.append(qpix2print)

        # Draw pixmap :

#        qp.setRenderHint(QPainter.Antialiasing, True)
        qp.drawPixmap(rect, qpix2print)

        qp.end()
Exemplo n.º 45
0
class WindowSR(QMainWindow):
    """Main window of SoundRain"""

    bad_id = pyqtSignal()

    def __init__(self):
        super().__init__()
        self.initWin()
        self.init_client_id()

    def initWin(self):
        """Create main parts of the window"""

        # Main Window
        self.setFixedSize(900, 500)
        self.center()
        self.setWindowTitle("SoundRain")
        self.setWindowIcon(QIcon('soundrainlogo.jpg'))

        # Central Widget
        self.central_widget = QWidget()
        self.setCentralWidget(self.central_widget)

        # QVBox stocking every row
        self.vertical_grid = QVBoxLayout()

        # First row: URL request
        row_url   = QHBoxLayout()
        label_url = QLabel("URL:", self)
        self.text_url  = QLineEdit(self)
        self.text_url.textChanged.connect(self.block_dl)
        self.but_url   = QPushButton("Search", self)
        self.but_url.clicked.connect(self.check_url)
        row_url.addWidget(label_url)
        row_url.addWidget(self.text_url)
        row_url.addWidget(self.but_url)

        # Row of separation 1
        row_sep1 = QHBoxLayout()
        line_sep = QFrame()
        line_sep.setFrameShape(QFrame.HLine)
        row_sep1.addWidget(line_sep)

        # Second row (splitted screen between cover image and music info): 
        row_split  = QHBoxLayout()
        # Cover image
        column_image = QVBoxLayout()
        self.label_image  = QLabel(self)
        self.label_image.setMaximumHeight(280)
        self.label_image.setMinimumHeight(280)
        self.label_image.setMaximumWidth(280)
        self.label_image.setMinimumHeight(280)
        self.cover = QPixmap(280, 280)
        self.cover.load("unknownperson.jpg")
        self.label_image.setPixmap(self.cover)
        column_image.addWidget(self.label_image)
        # music info
        column_info  = QVBoxLayout()
        label_name   = QLabel("Name", self)
        self.name    = QLineEdit(self)
        label_artist = QLabel("Artist", self)
        self.artist  = QLineEdit(self)
        label_album  = QLabel("Album", self)
        self.album   = QLineEdit(self)
        label_genre  = QLabel("Genre", self)
        self.genre   = QLineEdit(self)
        # --
        column_info.addWidget(label_name)
        column_info.addWidget(self.name)
        column_info.addWidget(label_artist)
        column_info.addWidget(self.artist)
        column_info.addWidget(label_album)
        column_info.addWidget(self.album)
        column_info.addWidget(label_genre)
        column_info.addWidget(self.genre)
        # --
        row_split.addLayout(column_image)
        row_split.addLayout(column_info)

        # Row of separation 2
        row_sep2  = QHBoxLayout()
        line_sep2 = QFrame()
        line_sep2.setFrameShape(QFrame.HLine)
        row_sep2.addWidget(line_sep2)

        # Add the file location selection row
        row_file       = QHBoxLayout()
        self.but_file  = QPushButton("Save location", self)
        self.but_file.clicked.connect(self.open_f)
        self.text_file = QLineEdit(self.default_path(), self)
        row_file.addWidget(self.but_file)
        row_file.addWidget(self.text_file)

        # Row of separation 3
        row_sep3  = QHBoxLayout()
        line_sep3 = QFrame()
        line_sep3.setFrameShape(QFrame.HLine)
        row_sep3.addWidget(line_sep3)

        # Download button row
        row_dl      = QHBoxLayout()
        self.bar_dl = QProgressBar(self)
        self.bar_dl.setFixedSize(600, 30)
        self.bar_dl.setMaximum(100)
        self.bar_dl.setMinimum(0)
        self.bar_dl.hide()
        self.label_dl = QLabel(self)
        self.label_dl.hide()
        self.but_dl = QPushButton("Download", self)
        self.but_dl.clicked.connect(self.manage_download)
        self.but_dl.setDisabled(True)
        row_dl.addWidget(self.bar_dl)
        row_dl.addWidget(self.label_dl)
        row_dl.addStretch(1)
        row_dl.addWidget(self.but_dl)

        # Add every row to the vertical grid
        self.vertical_grid.addLayout(row_url)
        self.vertical_grid.addLayout(row_sep1)
        self.vertical_grid.addLayout(row_split)
        self.vertical_grid.addLayout(row_sep2)
        self.vertical_grid.addLayout(row_file)
        self.vertical_grid.addLayout(row_sep3)
        self.vertical_grid.addLayout(row_dl)

        # Set layout of the vertical grid to the central widget
        self.central_widget.setLayout(self.vertical_grid)

        self.show()

    def init_client_id(self):
        """Ask for client id if it as never been entered, else load it from
        register with QSettings"""

        self.client_id = None
        self.setting   = QSettings(QSettings.UserScope, "BoBibelo",
                                   "SoundRain", self)
        if not self.setting.value("SR_bool"): # Setting never set
            self.client_id_box()
            self.setting.setValue("SR_bool", True)
            self.setting.setValue("SR_id", self.client_id)
        else:
            self.client_id = self.setting.value("SR_id")
        self.client = soundcloud.Client(client_id=self.client_id)

    def client_id_box(self):
        """Generate the client id box"""

        self.client_id_bo = QDialog(self)
        self.client_id_bo.setFixedSize(400, 200)
        self.client_id_bo.setModal(True)

        client_id_grid = QVBoxLayout()
        label_request  = QLabel("Enter your Soundcloud Client ID:", self.client_id_bo)
        self.input_id  = QLineEdit(self.client_id_bo)
        label_help     = QLabel("<a href=\"http://bobibelo.github.io/soundrain/help.html\">Need help ?</a>",
                                self.client_id_bo)
        label_help.setTextFormat(Qt.RichText);
        label_help.setTextInteractionFlags(Qt.TextBrowserInteraction);
        label_help.setOpenExternalLinks(True);

        self.got_id = False
        button_cancel = QPushButton("Cancel", self.client_id_bo)
        button_cancel.clicked.connect(self.reject_id)
        button_accept = QPushButton("Ok", self.client_id_bo)
        button_accept.clicked.connect(self.get_id)
        button_grid   = QHBoxLayout()
        button_grid.addStretch(1)
        button_grid.addWidget(button_cancel)
        button_grid.addWidget(button_accept)

        client_id_grid.addWidget(label_request)
        client_id_grid.addWidget(self.input_id)
        client_id_grid.addWidget(label_help)
        client_id_grid.addLayout(button_grid)
        self.client_id_bo.setLayout(client_id_grid)

        self.client_id_bo.rejected.connect(self.reject_id)
        self.client_id_bo.exec_()

    def get_id(self):
        """Get client id from the qdialog"""

        self.client_id = self.input_id.text().strip()
        if len(self.client_id) != 0:
            self.got_id = True
            self.client_id_bo.close()

    def reject_id(self):
        """Quit app after user not giving client id"""

        if not self.got_id:
            self.close()
            sys.exit(1)

    def open_f(self):
        """Choose the directory where to save music"""

        self.dirname = QFileDialog.getExistingDirectory()
        if self.dirname and len(self.dirname) > 0:
            self.text_file.setText(self.dirname)

    def center(self):
        """Places window in the screen's center"""

        center_geo = self.frameGeometry()
        center_pos = QDesktopWidget().availableGeometry().center()
        center_geo.moveCenter(center_pos)
        self.move(center_geo.topLeft())

    def check_url(self):
        """Test if the music url is correct and if so fill info"""

        url_pattern = "^https?://(www\.)?soundcloud\.com"
        if not re.match(url_pattern, self.text_url.text()):
            QMessageBox.about(self, "Invalid URL",
                              "The requested URL is invalid: %s" % self.text_url.text())
        else:
            self.but_dl.setDisabled(False)
            if "/sets/" in self.text_url.text(): # Is playlist
                self.artist.setText("Not available for playlist.")
                self.name.setText("Not available for playlist.")
                self.disable_input(True)
            elif len(self.text_url.text().split('/')) == 4: # Likes
                self.artist.setText("Not available for likes.")
                self.name.setText("Not available for likes.")
                self.disable_input(False)
            else:
                self.enable_input()
            self.get_music_info()

    def disable_input(self, bo):
        """Disable artist, and name in case of playlist"""

        if bo:
          self.is_playlist = True
          self.is_likes = False
        else:
          self.is_playlist = False
          self.is_likes = True
        self.artist.setDisabled(True)
        self.name.setDisabled(True)

    def enable_input(self):
        """Enable artist, and name after a playlist"""

        self.is_likes = False
        self.is_playlist = False
        self.artist.setDisabled(False)
        self.name.setDisabled(False)

    def get_track(self):
        """Returns track"""

        http_page = httplib2.Http()
        resp = http_page.request(self.url_str, "HEAD")
        if int(resp[0]["status"]) >= 400:
            QMessageBox.about(self,
                              "Error URL",
                              "URL doesn't exist.")
            return False

        try:
            self.track = self.client.get("/resolve", url=self.url_str)
        except:
            self.setting.setValue("SR_bool", False)
            self.init_client_id()
            self.get_track()

        return True

    def get_music_info(self):
        """Get music info, which will be stocked in self.track, and fill info"""

        self.url_str = self.text_url.text()
        if not self.get_track():
            return

        if not self.is_playlist and not self.is_likes:
            self.artist.setText(self.track.user['username'])
            self.name.setText(self.track.title)
            url = self.modifiy_image_size()
            if url:
                self.image = requests.get(url).content
                self.cover.loadFromData(self.image)
            self.cover = self.cover.scaledToWidth(280)
            self.label_image.setPixmap(self.cover)
        else:
            # Get the last part of URL ( == to playlist name)
            self.album.setText(self.text_url.text().rsplit('/', 1)[-1])
            if self.album.text() != "":
                self.text_file.setText("%s/%s" % (self.text_file.text(), self.album.text()))
        if not self.is_likes:
          self.genre.setText(self.track.genre)
        else:
          self.album.setText(self.track.username + "'s favorites")

    def modifiy_image_size(self):
        """Change artwork_url so the image can (potentially) look better"""

        artwork_url = self.track.artwork_url
        if not artwork_url:
            return None
        if "large" in artwork_url:
            return artwork_url.replace("large", "t500x500")
        else:
            return artwork_url

    def manage_download(self):
        """Manage download in case of playlist"""

        if self.is_playlist:
            playlist = self.client.get('/playlists/%s' % (self.track.id))
            count = 1
            self.label_dl.show()
            for song_url in playlist.tracks:
                self.label_dl.setText("%d / %d" % (count, len(playlist.tracks)))
                count += 1
                self.url_str = song_url["permalink_url"]
                self.get_track()
                self.image = requests.get(self.modifiy_image_size()).content
                self.download()
            if len(playlist.tracks) == 0:
                self.fail_box()
            else:
                self.success_box() # Success box for playlist
            self.label_dl.hide()
            self.enable_input()
        elif self.is_likes:
            likes = self.client.get('/users/%s/favorites/' % (self.track.id),
                                    linked_partitioning=1, limit=200)
            set_likes = set()
            while True:
              try:
                link = likes.next_href
              except:
                break
              for like in likes.collection:
                set_likes.add(like)
              likes = self.client.get(link, linked_partitioning=1,
                                      limit=200)
            for like in likes.collection:
              set_likes.add(like)
            count = 1
            self.label_dl.show()
            for like in set_likes:
              self.url_str = like.user['permalink_url']
              self.track = like
              self.label_dl.setText("%d / %d" % (count, len(set_likes)))
              count += 1
              self.image = requests.get(self.modifiy_image_size()).content
              self.download()
              sys.exit(0)
            else:
                self.success_box() # Success box for playlist
            self.label_dl.hide()
            self.enable_input()
        else:
            if self.download():
                self.success_box() # Succes box for single song

        self.reset()

    def download(self):
        """Try to download a single song"""


        self.setDisabled(True)
        self.bar_dl.setDisabled(False)
        self.bar_dl.show()
        try:
            self.fi_mp3, headers = urllib.request.urlretrieve(self.create_url(),
                                                              self.create_filename(),
                                                              reporthook=self.reporthook)
        except:
            self.fail_box()
            self.setDisabled(False)
            self.bar_dl.hide()
            return False

        self.add_tags()
        self.setDisabled(False)
        self.bar_dl.hide()
        return True

    def fail_box(self):
        """Fail box for playlist and single song"""

        if self.is_playlist:
            QMessageBox.about(self, "Error Download",
                              "Playlist '%s' failed to download." % self.text_url.text().rsplit('/', 1)[-1])
        else:
            QMessageBox.about(self, "Error Download",
                              "Download failed for song: %s" % self.track.title)


    def reset(self):
        """Reset all input & image after end of download"""

        self.text_url.setText("")
        self.artist.setText("")
        self.name.setText("")
        self.album.setText("")
        self.genre.setText("")
        self.image = None
        self.cover.load("unknownperson.jpg")
        self.label_image.setPixmap(self.cover)
        self.but_dl.setDisabled(True)
        self.text_file.setText(self.default_path())

    def block_dl(self):
        """Disable download button if user change URL (forces him to re-'search')"""

        self.but_dl.setDisabled(True)

    def add_tags(self):
        """Add artists name, music name, album, genre, and cover"""

        # Set artist name, music name, album, and genre
        audio_file = EasyMP3(self.fi_mp3)
        audio_file.tags = None
        if self.is_playlist:
            audio_file["artist"] = self.track.user["username"]
            audio_file["title"]  = self.track.title
        if self.is_likes:
            audio_file["artist"] = self.track.user["username"]
            audio_file["title"] = self.track.title
        else:
            audio_file["artist"] = self.artist.text()
            audio_file["title"]  = self.name.text()
        audio_file["genre"]  = self.genre.text()
        audio_file["album"]  = self.album.text()
        audio_file.save()

        # Determine the mime
        artwork_url = self.modifiy_image_size()
        if not artwork_url:
            return
        mime = "image/jpeg"
        if ".png" in artwork_url:
            mime = "image/png"

        # Set cover
        audio_file = MP3(self.fi_mp3, ID3=ID3)
        audio_file.tags.add(
                APIC(
                    encoding=3,
                    mime=mime,
                    type=3,
                    desc="Cover",
                    data=self.image
                )
        )
        audio_file.save()

    def success_box(self):
        """Display a sucess box"""

        if self.is_playlist:
            QMessageBox.about(self, "Success",
                              "%s playlist has just been downloaded right into %s"
                              % (self.text_url.text().rsplit('/', 1)[-1], self.text_file.text()))
        else:
            QMessageBox.about(self, "Success",
                              "%s has just been downloaded right into %s"
                              % (self.name.text(), self.text_file.text()))

    def create_url(self):
        url_str = "http://api.soundcloud.com/tracks/%s/stream?client_id=%s" % (self.track.id, self.client_id)
        return url_str

    def create_filename(self):
        path = self.text_file.text()
        if self.is_playlist or self.is_likes:
            name = self.track.title + ".mp3"
        else:
            name = self.name.text() + ".mp3"

        if not os.path.exists(path):
            os.makedirs(path)

        fi_str  = os.path.join(path, name)
        return fi_str

    def default_path(self):
        """Set the default path"""

        list_user = os.listdir("/Users")
        for user in list_user:
            if user != "Shared" and user != ".localized":
                break
        else:
            user = "******"

        path = "/Users/" + user + "/Music"

        return path

    def reporthook(self, blocks_read, block_size, total_size):
        """Tracks the progress of music download"""

        if blocks_read == 0:
            self.bar_dl.setValue(0)
        else:
            amount_read = blocks_read * block_size
            percent     = int((amount_read / total_size) * 100) # Percent of achieved download
            self.bar_dl.setValue(percent)
            QApplication.processEvents()
        return