Created
October 25, 2017 23:09
-
-
Save eyllanesc/5fd27476056183542d0d4c6a4ee0ede5 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from Operation import Operation | |
class BoundariesOperation(Operation): | |
@staticmethod | |
def Execute(inputPixmap): | |
return inputPixmap |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
pyuic5 mainwindow.ui -o mainwindow.py |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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_()) | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# -*- 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 |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<?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> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
from PyQt5.Qt import QPixmap | |
class Operation(object): | |
#QPixmap pixmap; | |
@staticmethod | |
def Execute(inputPixmap): | |
return inputPixmap | |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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