Я хочу создать приложение с PyQt5 на Python, но я получил несколько ошибок, которые пытался решить много раз, но не могу.
Сначала я хочу открыть экран камеры.На экране мы увидим экран нашей веб-камеры и внизу появятся 2 кнопки (Пуск и Захват).Пока я нажимаю Пуск, веб-камера будет включена, и если я нажму кнопку Capture, я хочу сделать снимок.
Я собрал рабочий код до этого момента.
После нажатия кнопки «Захват» и создания снимка я хочу изменить экран, чтобы перейти на 2-й экран (или очистить главный экран), и он будет простопокажите основное предложение «Hello World» в центре, а внизу будет кнопка.
Вот мой код, где моя вина?Вы можете это исправить?
import os
import cv2
import numpy as np
from PyQt5 import QtCore, QtGui, QtWidgets, uic
from PyQt5.QtWidgets import QApplication, QMainWindow, QPushButton, QWidget
class video (QtWidgets.QDialog):
def __init__(self):
super(video, self).__init__()
uic.loadUi('test2.ui',self)
self.control_bt.clicked.connect(self.start_webcam)
self.capture.clicked.connect(self.capture_image)
self.capture.clicked.connect(self.startUIWindow())
self.image_label.setScaledContents(True)
self.capture = None
self.timer = QtCore.QTimer(self, interval=5)
self.timer.timeout.connect(self.update_frame)
self._image_counter = 0
@QtCore.pyqtSlot()
def start_webcam(self):
if self.capture is None:
self.capture =cv2.VideoCapture(0)
self.capture.set(cv2.CAP_PROP_FRAME_HEIGHT, 480)
self.capture.set(cv2.CAP_PROP_FRAME_WIDTH, 640)
self.timer.start()
@QtCore.pyqtSlot()
def update_frame(self):
ret, image=self.capture.read()
simage = cv2.flip(image, 1)
self.displayImage(image, True)
@QtCore.pyqtSlot()
def capture_image(self):
flag, frame= self.capture.read()
path = r'D:\Users\ardad\PycharmProjects\testtest'
if flag:
QtWidgets.QApplication.beep()
name = "my_image.jpg"
cv2.imwrite(os.path.join(path, name), frame)
self._image_counter += 1
def displayImage(self, img, window=True):
qformat = QtGui.QImage.Format_Indexed8
if len(img.shape)==3 :
if img.shape[2]==4:
qformat = QtGui.QImage.Format_RGBA8888
else:
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.image_label.setPixmap(QtGui.QPixmap.fromImage(outImage))
def startUIWindow(self):
self.Window = UIWindow(self)
self.setWindowTitle("UIWindow")
self.setCentralWidget(self.Window)
self.show()
class UIWindow(QWidget):
def __init__(self, parent=None):
super(UIWindow, self).__init__(parent)
self.ToolsBTN = QPushButton('text', self)
self.ToolsBTN.move(50, 350)
if __name__=='__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
window = video()
window.setWindowTitle('main code')
window.show()
sys.exit(app.exec_())
Я добавляю .py файл, преобразованный из "test2.ui"
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(525, 386)
self.horizontalLayout = QtWidgets.QHBoxLayout(Form)
self.horizontalLayout.setObjectName("horizontalLayout")
self.verticalLayout = QtWidgets.QVBoxLayout()
self.verticalLayout.setObjectName("verticalLayout")
self.image_label = QtWidgets.QLabel(Form)
self.image_label.setText("")
self.image_label.setObjectName("image_label")
self.verticalLayout.addWidget(self.image_label)
self.control_bt = QtWidgets.QPushButton(Form)
self.control_bt.setObjectName("control_bt")
self.verticalLayout.addWidget(self.control_bt)
self.capture = QtWidgets.QPushButton(Form)
self.capture.setObjectName("capture")
self.verticalLayout.addWidget(self.capture)
self.horizontalLayout.addLayout(self.verticalLayout)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Cam view"))
self.control_bt.setText(_translate("Form", "Start"))
self.capture.setText(_translate("Form", "Capture"))
Когда я запускаю этот код, он показывает;
AttributeError: у объекта 'video' нет атрибута 'setCentralWidget'