首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QCamera不能通过for循环捕获

QCamera不能通过for循环捕获
EN

Stack Overflow用户
提问于 2022-08-12 05:21:58
回答 1查看 43关注 0票数 0

由于某些原因,我需要使用pyqt来捕获图像,而不是cv2。

我的目的是重复我的个人电脑相机,然后自动拍照。

下面的代码是通过手动更改QComboBox来工作的,但是失败的是for循环。

我尝试过很多方法,比如QThread.sleep,time.sleep,QCamera.stop,甚至是QThread发布的。

代码语言:javascript
复制
from PyQt5.QtWidgets import *
from PyQt5.QtMultimedia import *
from PyQt5.QtMultimediaWidgets import *
import os, sys, time

class MainWindow(QMainWindow):
    def __init__(self):
        super().__init__()
        self.cameras = QCameraInfo.availableCameras()

        # this part doesn't work correctly, only last one worked     
        for i, cam in enumerate(self.cameras):
            self.select_camera(i)
            time.sleep(10)

        toolbar = QToolBar("Camera Tool Bar")
        self.addToolBar(toolbar)
        camera_selector = QComboBox()
        camera_selector.addItems([f'{i}.{cam.description()}' for i, cam in enumerate(self.cameras)])
        camera_selector.currentIndexChanged.connect(self.select_camera)
        toolbar.addWidget(camera_selector)
        self.show()

    def select_camera(self, i):
        print(f"{i=:}")
        self.camera = QCamera(self.cameras[i])
        self.camera.setCaptureMode(QCamera.CaptureStillImage)
        self.camera.start()
        self.capture = QCameraImageCapture(self.camera)
        timestamp = time.strftime("%d-%b-%Y-%H_%M_%S")
        self.capture.capture(os.path.join(os.getcwd(), f"{i}.{timestamp}.jpg"))

if __name__ == "__main__":
    App = QApplication(sys.argv)
    window = MainWindow()
    sys.exit(App.exec())
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-08-12 05:27:36

您需要始终记住,Qt和所有GUI系统一样,都是事件驱动的。__init__调用中没有显示任何内容。所做的就是发送一些信息。在进入主循环之前,什么都不会显示。因此,您需要使用一个QTimer组件来每10秒获得一个回调,在这个回调中,您选择您的新相机并拍摄。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/73329566

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档