在 PyQt4 中调用第二个 Window 后,第二个 window 中的按钮不起作用
After calling a second Window in PyQt4 the buttons in the second window not working
所以基本上我正在尝试使用 PyQt4 设计我的程序,它有多个 window,每次我通过单击新 [=15] 中的按钮来调用 window =] 不工作。有帮助吗?
from PyQt4 import QtCore, QtGui
import cv2
import pyzbar.pyzbar as pyzbar
import numpy as np
import time
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.clicked.connect(self.close_application)
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_2.clicked.connect(self.openQRreaderWindow)
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):
uber.setWindowTitle(_translate("Uber", "Uber", None))
uber.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))
def close_application(self):
sys.exit()
def openQRreaderWindow(self):
uber.hide()
QRreader.show()
class Ui_QRreader(object):
def setupUi1(self, QRreader):
self.startCapture()
self.image = None
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.pushButton5.clicked.connect(self.close_application)
self.pushButton_6 = QtGui.QPushButton(self.centralwidget)
self.pushButton_6.setEnabled(True)
self.pushButton_6.setGeometry(QtCore.QRect(19, 675, 206, 49))
self.pushButton_6.clicked.connect(self.startCapture)
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.pushButton_7.clicked.connect(self.openUberWindow)
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 close_application(self):
sys.exit()
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 = QtCore.QTimer()
self.timer.timeout.connect(self.update_frame)
self.timer.start(5)
def update_frame(self):
ret, self.image = self.capture.read()
self.image = cv2.flip(self.image,1)
self.displayImage(self.image,1)
def displayImage(self,img,window =1):
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 ==1:
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:
QRreader.hide()
uber.hide()
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 openUberWindow(self):
QRreader.hide()
uber.show()
def openMap(self):
time.sleep(2)
QRreader.show()
self.map4 = QtGui.QMainWindow()
ui1 = Ui_map4()
ui1.setupUi(self.map4)
self.map4.show()
QtCore.QTimer.singleShot(40000, self.map4.close)
self.map3 = QtGui.QMainWindow()
ui1 = Ui_map3()
ui1.setupUi(self.map3)
self.map3.show()
QtCore.QTimer.singleShot(30000, self.map3.close)
self.map2 = QtGui.QMainWindow()
ui1 = Ui_map2()
ui1.setupUi(self.map2)
self.map2.show()
QtCore.QTimer.singleShot(20000, self.map2.close)
self.map = QtGui.QMainWindow()
ui1 = Ui_map()
ui1.setupUi(self.map)
self.map.show()
QtCore.QTimer.singleShot(10000, self.map.close)
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 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 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 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 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 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))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
uber = QtGui.QMainWindow()
ui = Ui_UberMap()
ui.setupUi(uber)
uber.show()
#uber.hide()
QRreader = QtGui.QMainWindow()
ui1 = Ui_QRreader()
ui1.setupUi1(QRreader)
QRreader.show()
QRreader.hide()
good = QtGui.QMainWindow()
ui = Ui_good()
ui.setupUi(good)
good.show()
QtCore.QTimer.singleShot(3000, good.close)
sys.exit(app.exec_())
首先PyQt建议不要修改pyuic生成的.py文件,更多信息阅读。您必须做的是创建一个 class 继承适当的小部件并使用 Qt Designer 提供的界面。
另一方面,不要使用睡眠,因为它会阻塞 GUI。
最后但同样重要的是,您必须使用信号通知其他小部件发生变化,而不是访问其他 classes 的对象,避免 classes 的耦合。
综上所述,我们得到:
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_())
所以基本上我正在尝试使用 PyQt4 设计我的程序,它有多个 window,每次我通过单击新 [=15] 中的按钮来调用 window =] 不工作。有帮助吗?
from PyQt4 import QtCore, QtGui
import cv2
import pyzbar.pyzbar as pyzbar
import numpy as np
import time
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.clicked.connect(self.close_application)
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_2.clicked.connect(self.openQRreaderWindow)
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):
uber.setWindowTitle(_translate("Uber", "Uber", None))
uber.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))
def close_application(self):
sys.exit()
def openQRreaderWindow(self):
uber.hide()
QRreader.show()
class Ui_QRreader(object):
def setupUi1(self, QRreader):
self.startCapture()
self.image = None
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.pushButton5.clicked.connect(self.close_application)
self.pushButton_6 = QtGui.QPushButton(self.centralwidget)
self.pushButton_6.setEnabled(True)
self.pushButton_6.setGeometry(QtCore.QRect(19, 675, 206, 49))
self.pushButton_6.clicked.connect(self.startCapture)
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.pushButton_7.clicked.connect(self.openUberWindow)
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 close_application(self):
sys.exit()
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 = QtCore.QTimer()
self.timer.timeout.connect(self.update_frame)
self.timer.start(5)
def update_frame(self):
ret, self.image = self.capture.read()
self.image = cv2.flip(self.image,1)
self.displayImage(self.image,1)
def displayImage(self,img,window =1):
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 ==1:
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:
QRreader.hide()
uber.hide()
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 openUberWindow(self):
QRreader.hide()
uber.show()
def openMap(self):
time.sleep(2)
QRreader.show()
self.map4 = QtGui.QMainWindow()
ui1 = Ui_map4()
ui1.setupUi(self.map4)
self.map4.show()
QtCore.QTimer.singleShot(40000, self.map4.close)
self.map3 = QtGui.QMainWindow()
ui1 = Ui_map3()
ui1.setupUi(self.map3)
self.map3.show()
QtCore.QTimer.singleShot(30000, self.map3.close)
self.map2 = QtGui.QMainWindow()
ui1 = Ui_map2()
ui1.setupUi(self.map2)
self.map2.show()
QtCore.QTimer.singleShot(20000, self.map2.close)
self.map = QtGui.QMainWindow()
ui1 = Ui_map()
ui1.setupUi(self.map)
self.map.show()
QtCore.QTimer.singleShot(10000, self.map.close)
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 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 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 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 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 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))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
uber = QtGui.QMainWindow()
ui = Ui_UberMap()
ui.setupUi(uber)
uber.show()
#uber.hide()
QRreader = QtGui.QMainWindow()
ui1 = Ui_QRreader()
ui1.setupUi1(QRreader)
QRreader.show()
QRreader.hide()
good = QtGui.QMainWindow()
ui = Ui_good()
ui.setupUi(good)
good.show()
QtCore.QTimer.singleShot(3000, good.close)
sys.exit(app.exec_())
首先PyQt建议不要修改pyuic生成的.py文件,更多信息阅读
另一方面,不要使用睡眠,因为它会阻塞 GUI。
最后但同样重要的是,您必须使用信号通知其他小部件发生变化,而不是访问其他 classes 的对象,避免 classes 的耦合。
综上所述,我们得到:
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_())