Прежде всего PyQt рекомендует не изменять файл .py, созданный pyuic, для получения дополнительной информации прочитайте this .Вам нужно создать класс, который наследует соответствующий виджет, и использовать интерфейс, предоставляемый Qt Designer.
С другой стороны, не используйте sleep, поскольку он блокирует графический интерфейс.
ИИ последнее, но не менее важное: вы должны использовать сигналы для уведомления других виджетов об изменениях вместо доступа к объектам других классов, избегая объединения классов.
Учитывая вышеизложенное, мы получаем следующее:
from PyQt4 import QtCore, QtGui
import cv2
import pyzbar.pyzbar as pyzbar
import numpy as np
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_UberMap(object):
def setupUi(self, UberMap):
UberMap.setObjectName(_fromUtf8("UberMap"))
UberMap.resize(446, 825)
UberMap.setMouseTracking(False)
UberMap.setAutoFillBackground(False)
UberMap.setStyleSheet(_fromUtf8("background-image: url(Uber.png);"))
UberMap.setAnimated(False)
self.centralwidget = QtGui.QWidget(UberMap)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.pushButton = QtGui.QPushButton(self.centralwidget)
self.pushButton.setGeometry(QtCore.QRect(20, 723, 411, 41))
self.pushButton.setAutoFillBackground(False)
self.pushButton.setStyleSheet(_fromUtf8("background-image: url(button.png);"))
self.pushButton.setText(_fromUtf8(""))
self.pushButton.setObjectName(_fromUtf8("pushButton"))
self.pushButton_2 = QtGui.QPushButton(self.centralwidget)
self.pushButton_2.setEnabled(True)
self.pushButton_2.setGeometry(QtCore.QRect(19, 675, 206, 49))
font = QtGui.QFont()
font.setFamily(_fromUtf8("Times New Roman"))
font.setPointSize(10)
font.setItalic(True)
self.pushButton_2.setFont(font)
self.pushButton_2.setMouseTracking(True)
self.pushButton_2.setAutoFillBackground(False)
self.pushButton_2.setStyleSheet(_fromUtf8("background-image: url(Qr.png);"))
self.pushButton_2.setText(_fromUtf8(""))
self.pushButton_2.setAutoDefault(False)
self.pushButton_2.setObjectName(_fromUtf8("pushButton_2"))
self.pushButton_3 = QtGui.QPushButton(self.centralwidget)
self.pushButton_3.setGeometry(QtCore.QRect(225, 675, 206, 49))
self.pushButton_3.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
self.pushButton_3.setStyleSheet(_fromUtf8("background-image: url(Uberlogo.png);"))
self.pushButton_3.setText(_fromUtf8(""))
self.pushButton_3.setObjectName(_fromUtf8("pushButton_3"))
UberMap.setCentralWidget(self.centralwidget)
self.retranslateUi(UberMap)
QtCore.QMetaObject.connectSlotsByName(UberMap)
def retranslateUi(self, UberMap):
UberMap.setWindowTitle(_translate("Uber", "Uber", None))
UberMap.setWindowIcon(QtGui.QIcon('KLM.png'))
self.pushButton_2.setToolTip(_translate("UberMap", "<html><head/><body><p>Click here to find your way in Schiphol to your gate</p></body></html>", None))
self.pushButton_3.setToolTip(_translate("UberMap", "<html><head/><body><p>Click here to find a transportation</p></body></html>", None))
class UberMap(QtGui.QMainWindow, Ui_UberMap):
openQRreaderSignal = QtCore.pyqtSignal()
def __init__(self, parent=None):
super(UberMap, self).__init__(parent)
self.setupUi(self)
self.pushButton_2.clicked.connect(self.openQRreaderSignal)
self.openQRreaderSignal.connect(self.hide)
self.pushButton.clicked.connect(self.close_application)
def close_application(self):
sys.exit()
class Ui_QRreader(object):
def setupUi(self, QRreader):
QRreader.setObjectName(_fromUtf8("QRreader"))
QRreader.resize(446, 825)
QRreader.setAutoFillBackground(False)
QRreader.setStyleSheet(_fromUtf8("background-image: url(Qrreader.png);"))
self.centralwidget = QtGui.QWidget(QRreader)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
self.pushButton5 = QtGui.QPushButton(self.centralwidget)
self.pushButton5.setGeometry(QtCore.QRect(20, 723, 411, 41))
self.pushButton5.setAutoFillBackground(False)
self.pushButton5.setStyleSheet(_fromUtf8("background-image: url(button.png);"))
self.pushButton5.setText(_fromUtf8(""))
self.pushButton5.setObjectName(_fromUtf8("pushButton_5"))
self.pushButton_6 = QtGui.QPushButton(self.centralwidget)
self.pushButton_6.setEnabled(True)
self.pushButton_6.setGeometry(QtCore.QRect(19, 675, 206, 49))
font = QtGui.QFont()
font.setFamily(_fromUtf8("Times New Roman"))
font.setPointSize(10)
font.setItalic(True)
self.pushButton_6.setFont(font)
self.pushButton_6.setMouseTracking(True)
self.pushButton_6.setAutoFillBackground(False)
self.pushButton_6.setStyleSheet(_fromUtf8("background-image: url(Qr.png);"))
self.pushButton_6.setText(_fromUtf8(""))
self.pushButton_6.setAutoDefault(False)
self.pushButton_6.setObjectName(_fromUtf8("pushButton_6"))
self.pushButton_7 = QtGui.QPushButton(self.centralwidget)
self.pushButton_7.setGeometry(QtCore.QRect(225, 675, 206, 49))
self.pushButton_7.setContextMenuPolicy(QtCore.Qt.NoContextMenu)
self.pushButton_7.setStyleSheet(_fromUtf8("background-image: url(Uberlogo.png);"))
self.pushButton_7.setText(_fromUtf8(""))
self.pushButton_7.setObjectName(_fromUtf8("pushButton_7"))
self.label = QtGui.QLabel(self.centralwidget)
self.label.setGeometry(QtCore.QRect(18, 182, 413, 491))
self.label.setStyleSheet(_fromUtf8("background-image: url(cam.png);"))
self.label.setObjectName(_fromUtf8("label"))
QRreader.setCentralWidget(self.centralwidget)
self.retranslateUi(QRreader)
QtCore.QMetaObject.connectSlotsByName(QRreader)
def retranslateUi(self, QRreader):
QRreader.setWindowTitle(_translate("QRreader", "QRreader", None))
QRreader.setWindowIcon(QtGui.QIcon('KLM.png'))
self.pushButton_6.setToolTip(_translate("QRreader", "<html><head/><body><p>Click here to find your way in Schiphol to your gate</p></body></html>", None))
self.pushButton_7.setToolTip(_translate("QRreader", "<html><head/><body><p>Click here to find a transportation</p></body></html>", None))
class QRreader(QtGui.QMainWindow, Ui_QRreader):
openUberSignal = QtCore.pyqtSignal()
hideUberSignal = QtCore.pyqtSignal()
def __init__(self, parent=None):
super(QRreader, self).__init__(parent)
self.setupUi(self)
self.pushButton5.clicked.connect(self.close_application)
self.pushButton_7.clicked.connect(self.openUberSignal)
self.pushButton_6.clicked.connect(self.startCapture)
self.openUberSignal.connect(self.hide)
self.timer = QtCore.QTimer(self)
self.timer.timeout.connect(self.update_frame)
# self.startCapture()
def close_application(self):
sys.exit()
@QtCore.pyqtSlot()
def startCapture(self):
self.capture = cv2.VideoCapture(0)
# self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT,491)
# self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, 413)
self.timer.start(5)
@QtCore.pyqtSlot()
def update_frame(self):
ret, image = self.capture.read()
image = cv2.flip(image, 1)
if ret:
self.displayImage(image)
def displayImage(self, img, window =True):
qformat= QtGui.QImage.Format_Indexed8
if len(img.shape)==3:
qformat = QtGui.QImage.Format_RGB888
outImage = QtGui.QImage(img, img.shape[1],img.shape[0],img.strides[0],qformat)
outImage = outImage.rgbSwapped()
if window:
self.label.setPixmap(QtGui.QPixmap.fromImage(outImage))
self.label.setScaledContents(True)
decodedObjects = self.decode(img)
self.display(img, decodedObjects)
def decode(self, frame):
# Find barcodes and QR codes
decodedObjects = pyzbar.decode(frame)
# Print results
for obj in decodedObjects:
if "door" in obj.data:
self.hideUberSignal.emit()
self.openMap()
return decodedObjects
# Display barcode and QR code location
def display(self, frame, decodedObjects):
# Loop over all decoded objects
for decodedObject in decodedObjects:
points = decodedObject.polygon
# If the points do not form a quad, find convex hull
if len(points) > 4:
hull = cv2.convexHull(np.array([point for point in points], dtype=np.float32))
hull = list(map(tuple, np.squeeze(hull)))
else:
hull = points
# Number of points in the convex hull
n = len(hull)
# Draw the convext hull
for j in range(0, n):
cv2.line(frame, hull[j], hull[(j + 1) % n], (255, 0, 0), 3)
def openMap(self):
loop = QtCore.QEventLoop()
QtCore.QTimer.singleShot(2000, loop.quit)
loop.exec_()
self.show()
self.map4 = Map4()
self.map4.show()
QtCore.QTimer.singleShot(40000, self.map4.close)
self.map3 = Map3()
self.map3.show()
QtCore.QTimer.singleShot(30000, self.map3.close)
self.map2 = Map2()
self.map2.show()
QtCore.QTimer.singleShot(20000, self.map2.close)
self.map = Map()
self.map.show()
QtCore.QTimer.singleShot(10000, self.map.close)
class Ui_good(object):
def setupUi(self, good):
good.setObjectName(_fromUtf8("good"))
good.resize(446, 825)
good.setStyleSheet(_fromUtf8("background-image: url(good.png);"))
self.centralwidget = QtGui.QWidget(good)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
good.setCentralWidget(self.centralwidget)
self.retranslateUi(good)
QtCore.QMetaObject.connectSlotsByName(good)
def retranslateUi(self, good):
good.setWindowTitle(_translate("Welcome", "Welcome", None))
good.setWindowIcon(QtGui.QIcon('KLM.png'))
class Good(QtGui.QMainWindow, Ui_good):
def __init__(self, parent=None):
super(Good, self).__init__(parent)
self.setupUi(self)
class Ui_map(object):
def setupUi(self, map):
map.setObjectName(_fromUtf8("map"))
map.resize(446, 825)
map.setStyleSheet(_fromUtf8("background-image: url(1.png);"))
self.centralwidget = QtGui.QWidget(map)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
map.setCentralWidget(self.centralwidget)
self.retranslateUi(map)
QtCore.QMetaObject.connectSlotsByName(map)
def retranslateUi(self, map):
map.setWindowTitle(_translate("map", "MainWindow", None))
class Map(QtGui.QMainWindow, Ui_map):
def __init__(self, parent=None):
super(Map, self).__init__(parent)
self.setupUi(self)
class Ui_map2(object):
def setupUi(self, map2):
map2.setObjectName(_fromUtf8("map"))
map2.resize(446, 825)
map2.setStyleSheet(_fromUtf8("background-image: url(2.png);"))
self.centralwidget = QtGui.QWidget(map2)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
map2.setCentralWidget(self.centralwidget)
self.retranslateUi(map2)
QtCore.QMetaObject.connectSlotsByName(map2)
def retranslateUi(self, map2):
map2.setWindowTitle(_translate("map", "MainWindow", None))
class Map2(QtGui.QMainWindow, Ui_map2):
def __init__(self, parent=None):
super(Map2, self).__init__(parent)
self.setupUi(self)
class Ui_map3(object):
def setupUi(self, map3):
map3.setObjectName(_fromUtf8("map"))
map3.resize(446, 825)
map3.setStyleSheet(_fromUtf8("background-image: url(3.png);"))
self.centralwidget = QtGui.QWidget(map3)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
map3.setCentralWidget(self.centralwidget)
self.retranslateUi(map3)
QtCore.QMetaObject.connectSlotsByName(map3)
def retranslateUi(self, map3):
map3.setWindowTitle(_translate("map", "MainWindow", None))
class Map3(QtGui.QMainWindow, Ui_map3):
def __init__(self, parent=None):
super(Map3, self).__init__(parent)
self.setupUi(self)
class Ui_map4(object):
def setupUi(self, map4):
map4.setObjectName(_fromUtf8("map"))
map4.resize(446, 825)
map4.setStyleSheet(_fromUtf8("background-image: url(4.png);"))
self.centralwidget = QtGui.QWidget(map4)
self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
map4.setCentralWidget(self.centralwidget)
self.retranslateUi(map4)
QtCore.QMetaObject.connectSlotsByName(map4)
def retranslateUi(self, map):
map.setWindowTitle(_translate("map", "MainWindow", None))
class Map4(QtGui.QMainWindow, Ui_map4):
def __init__(self, parent=None):
super(Map4, self).__init__(parent)
self.setupUi(self)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
uber = UberMap()
reader = QRreader()
good = Good()
uber.openQRreaderSignal.connect(reader.show)
reader.openUberSignal.connect(uber.show)
reader.hideUberSignal.connect(uber.hide)
uber.show()
good.show()
QtCore.QTimer.singleShot(3000, good.close)
sys.exit(app.exec_())