Skip to content

Instantly share code, notes, and snippets.

@eyllanesc
Created October 25, 2017 23:09
Show Gist options
  • Save eyllanesc/5fd27476056183542d0d4c6a4ee0ede5 to your computer and use it in GitHub Desktop.
Save eyllanesc/5fd27476056183542d0d4c6a4ee0ede5 to your computer and use it in GitHub Desktop.
from Operation import Operation
class BoundariesOperation(Operation):
@staticmethod
def Execute(inputPixmap):
return inputPixmap
pyuic5 mainwindow.ui -o mainwindow.py
import sys
# Импортируем наш интерфейс из файла
from mainwindow import *
from PyQt5 import Qt, QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog
from Boundaries import BoundariesOperation
class MyWin(QtWidgets.QMainWindow):
def __init__(self, parent=None):
QtWidgets.QWidget.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
# Здесь прописываем событие нажатия на кнопку
self.ui.loadButton.clicked.connect(self.loadImage)
self.ui.boundariesButton.clicked.connect(self.getBoundaries)
self.ui.keepRatio.stateChanged.connect(self.ui.label.setKeepAspectRatioEnabled)
self.ui.keepRatio.stateChanged.connect(self.ui.label_2.setKeepAspectRatioEnabled)
self.ui.originalSize.stateChanged.connect(self.ui.label.setOverscaleEnabled)
self.ui.originalSize.stateChanged.connect(self.ui.label_2.setOverscaleEnabled)
# Пока пустая функция которая выполняется
# при нажатии на кнопку
def loadImage(self):
inputImagePath = QFileDialog.getOpenFileName(self, 'Open image...', '/home')[0]
inputPixmap = Qt.QPixmap(inputImagePath)
self.ui.label.loadPixmapData(inputPixmap)
def getBoundaries(self):
if self.ui.label.pixmap():
self.ui.label_2.setPixmap(BoundariesOperation.Execute(self.ui.label.pixmap()))
if __name__ == "__main__":
app = QtWidgets.QApplication(sys.argv)
myapp = MyWin()
myapp.show()
sys.exit(app.exec_())
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'mainwindow.ui'
#
# Created by: PyQt5 UI code generator 5.9
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(736, 397)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.gridLayout = QtWidgets.QGridLayout()
self.gridLayout.setObjectName("gridLayout")
self.label_2 = ScaledPixmap(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label_2.sizePolicy().hasHeightForWidth())
self.label_2.setSizePolicy(sizePolicy)
self.label_2.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.label_2.setFrameShadow(QtWidgets.QFrame.Sunken)
self.label_2.setLineWidth(1)
self.label_2.setText("")
self.label_2.setScaledContents(False)
self.label_2.setObjectName("label_2")
self.gridLayout.addWidget(self.label_2, 0, 1, 1, 1)
self.groupBox = QtWidgets.QGroupBox(self.centralwidget)
self.groupBox.setObjectName("groupBox")
self.horizontalLayout_3 = QtWidgets.QHBoxLayout(self.groupBox)
self.horizontalLayout_3.setObjectName("horizontalLayout_3")
self.verticalLayout_2 = QtWidgets.QVBoxLayout()
self.verticalLayout_2.setObjectName("verticalLayout_2")
self.boundariesButton = QtWidgets.QPushButton(self.groupBox)
self.boundariesButton.setObjectName("boundariesButton")
self.verticalLayout_2.addWidget(self.boundariesButton)
self.semanticSegmentationButton = QtWidgets.QPushButton(self.groupBox)
self.semanticSegmentationButton.setObjectName("semanticSegmentationButton")
self.verticalLayout_2.addWidget(self.semanticSegmentationButton)
self.stackedWidget = QtWidgets.QStackedWidget(self.groupBox)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.stackedWidget.sizePolicy().hasHeightForWidth())
self.stackedWidget.setSizePolicy(sizePolicy)
self.stackedWidget.setObjectName("stackedWidget")
self.page = QtWidgets.QWidget()
self.page.setObjectName("page")
self.horizontalLayout_4 = QtWidgets.QHBoxLayout(self.page)
self.horizontalLayout_4.setContentsMargins(0, 0, 0, 0)
self.horizontalLayout_4.setObjectName("horizontalLayout_4")
self.groupBox_2 = QtWidgets.QGroupBox(self.page)
self.groupBox_2.setObjectName("groupBox_2")
self.horizontalLayout_4.addWidget(self.groupBox_2)
self.stackedWidget.addWidget(self.page)
self.page_2 = QtWidgets.QWidget()
self.page_2.setObjectName("page_2")
self.verticalLayout_3 = QtWidgets.QVBoxLayout(self.page_2)
self.verticalLayout_3.setContentsMargins(0, 0, 0, 0)
self.verticalLayout_3.setObjectName("verticalLayout_3")
self.groupBox_3 = QtWidgets.QGroupBox(self.page_2)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.groupBox_3.sizePolicy().hasHeightForWidth())
self.groupBox_3.setSizePolicy(sizePolicy)
self.groupBox_3.setObjectName("groupBox_3")
self.verticalLayout_3.addWidget(self.groupBox_3)
self.stackedWidget.addWidget(self.page_2)
self.verticalLayout_2.addWidget(self.stackedWidget)
self.horizontalLayout_3.addLayout(self.verticalLayout_2)
self.gridLayout.addWidget(self.groupBox, 0, 2, 1, 1)
self.label = ScaledPixmap(self.centralwidget)
sizePolicy = QtWidgets.QSizePolicy(QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Expanding)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(self.label.sizePolicy().hasHeightForWidth())
self.label.setSizePolicy(sizePolicy)
self.label.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.label.setFrameShadow(QtWidgets.QFrame.Sunken)
self.label.setLineWidth(1)
self.label.setText("")
self.label.setScaledContents(False)
self.label.setObjectName("label")
self.gridLayout.addWidget(self.label, 0, 0, 1, 1)
self.horizontalLayout.addLayout(self.gridLayout)
self.verticalLayout.addLayout(self.horizontalLayout)
self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
self.horizontalLayout_2.setObjectName("horizontalLayout_2")
self.originalSize = QtWidgets.QCheckBox(self.centralwidget)
self.originalSize.setObjectName("originalSize")
self.horizontalLayout_2.addWidget(self.originalSize)
self.keepRatio = QtWidgets.QCheckBox(self.centralwidget)
self.keepRatio.setObjectName("keepRatio")
self.horizontalLayout_2.addWidget(self.keepRatio)
self.loadButton = QtWidgets.QPushButton(self.centralwidget)
self.loadButton.setObjectName("loadButton")
self.horizontalLayout_2.addWidget(self.loadButton)
spacerItem = QtWidgets.QSpacerItem(40, 20, QtWidgets.QSizePolicy.Expanding, QtWidgets.QSizePolicy.Minimum)
self.horizontalLayout_2.addItem(spacerItem)
self.verticalLayout.addLayout(self.horizontalLayout_2)
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 736, 26))
self.menubar.setObjectName("menubar")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.retranslateUi(MainWindow)
self.stackedWidget.setCurrentIndex(0)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "Imager"))
self.groupBox.setTitle(_translate("MainWindow", "Controlls"))
self.boundariesButton.setText(_translate("MainWindow", "Boundaries"))
self.semanticSegmentationButton.setText(_translate("MainWindow", "Semantic Segmentation"))
self.groupBox_2.setTitle(_translate("MainWindow", "Boundaries options"))
self.groupBox_3.setTitle(_translate("MainWindow", "Semantis segentation options"))
self.originalSize.setText(_translate("MainWindow", "Ignore original size"))
self.keepRatio.setText(_translate("MainWindow", "Maintain puprosions"))
self.loadButton.setText(_translate("MainWindow", "Load"))
from ScaledPixmap import ScaledPixmap
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>736</width>
<height>397</height>
</rect>
</property>
<property name="windowTitle">
<string>Imager</string>
</property>
<widget class="QWidget" name="centralwidget">
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
<item>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="ScaledPixmap" name="label_2">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="lineWidth">
<number>1</number>
</property>
<property name="text">
<string/>
</property>
<property name="scaledContents">
<bool>false</bool>
</property>
</widget>
</item>
<item row="0" column="2">
<widget class="QGroupBox" name="groupBox">
<property name="title">
<string>Controlls</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout_3">
<item>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QPushButton" name="boundariesButton">
<property name="text">
<string>Boundaries</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="semanticSegmentationButton">
<property name="text">
<string>Semantic Segmentation</string>
</property>
</widget>
</item>
<item>
<widget class="QStackedWidget" name="stackedWidget">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="currentIndex">
<number>0</number>
</property>
<widget class="QWidget" name="page">
<layout class="QHBoxLayout" name="horizontalLayout_4">
<item>
<widget class="QGroupBox" name="groupBox_2">
<property name="title">
<string>Boundaries options</string>
</property>
</widget>
</item>
</layout>
</widget>
<widget class="QWidget" name="page_2">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QGroupBox" name="groupBox_3">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="title">
<string>Semantis segentation options</string>
</property>
</widget>
</item>
</layout>
</widget>
</widget>
</item>
</layout>
</item>
</layout>
</widget>
</item>
<item row="0" column="0">
<widget class="ScaledPixmap" name="label">
<property name="sizePolicy">
<sizepolicy hsizetype="Expanding" vsizetype="Expanding">
<horstretch>0</horstretch>
<verstretch>0</verstretch>
</sizepolicy>
</property>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Sunken</enum>
</property>
<property name="lineWidth">
<number>1</number>
</property>
<property name="text">
<string/>
</property>
<property name="scaledContents">
<bool>false</bool>
</property>
</widget>
</item>
</layout>
</item>
</layout>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QCheckBox" name="originalSize">
<property name="text">
<string>Ignore original size</string>
</property>
</widget>
</item>
<item>
<widget class="QCheckBox" name="keepRatio">
<property name="text">
<string>Maintain puprosions</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="loadButton">
<property name="text">
<string>Load</string>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</item>
</layout>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>736</width>
<height>26</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<customwidgets>
<customwidget>
<class>ScaledPixmap</class>
<extends>QLabel</extends>
<header location="global">scaledpixmap.h</header>
</customwidget>
</customwidgets>
<resources/>
<connections/>
</ui>
from PyQt5.Qt import QPixmap
class Operation(object):
#QPixmap pixmap;
@staticmethod
def Execute(inputPixmap):
return inputPixmap
from PyQt5.QtWidgets import QLabel
from PyQt5.Qt import Qt, QSize
from PyQt5.QtGui import QPixmap, QPainter
from PyQt5 import QtCore
class ScaledPixmap(QLabel):
workPixmap = None
originalSize = None
keepAspectRatio = False
overscalingEnabled = False
loadFinished = QtCore.pyqtSignal()
def getPixmap(self):
return self.workPixmap
def overscaleEnabled(self):
return self.overscalingEnabled
def keepAspectRatioEnabled(self):
return self.keepAspectRatio
def fitsToScreen(self, screenSize):
return (screenSize.width() >= self.originalSize.width()) and (screenSize.height() >= self.originalSize.height())
def paintEvent(self, event):
painter = QPainter(self)
if self.workPixmap is not None:
centerPoint = QtCore.QPoint(0, 0)
scaledSize = self.size() if self.overscaleEnabled() else (self.originalSize if self.fitsToScreen(self.size()) else self.size())
scaledPixmap = self.workPixmap.scaled(scaledSize,
Qt.KeepAspectRatio if self.keepAspectRatio else Qt.IgnoreAspectRatio)
centerPoint.setX((self.size().width() - scaledPixmap.width()) / 2)
centerPoint.setY((self.size().height() - scaledPixmap.height()) / 2)
painter.drawPixmap(centerPoint, scaledPixmap)
super().paintEvent(event)
@QtCore.pyqtSlot(QPixmap, name='setScaledPixmap')
def setScaledPixmap(self, pixmap):
self.workPixmap = pixmap
self.originalSize = pixmap.size()
self.update()
@QtCore.pyqtSlot(str, name='loadPixmapData')
def loadPixmapData(self, source):
pixmap = QPixmap(source)
if pixmap is not None:
self.setScaledPixmap(pixmap)
@QtCore.pyqtSlot(QPixmap, name='loadPixmapData')
def loadPixmapData(self, pixmap):
if pixmap is not None:
self.setScaledPixmap(pixmap)
@QtCore.pyqtSlot(int, name='setOverscaleEnabled')
def setOverscaleEnabled(self, enabled):
self.overscalingEnabled = enabled
@QtCore.pyqtSlot(int, name='setKeepAspectRatioEnabled')
def setKeepAspectRatioEnabled(self, enabled):
self.keepAspectRatio = enabled
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment