赞
踩
本篇的内容是学习的这一位博主的:程序界面设计_Doc_Cheng的博客-CSDN博客。
这是我见过很详细的教你如何使用的PyQt5来完成UI界面设计的,专注于UI界面设计。对我而言,这教程就像是一个实用工具,因为我只需要能够显示图像并展示模型推理的结果即可。
最近一直在努力改进网络和编写脚本,已经有一段时间没写博客了。因此,我打算重新整理这位博主的内容,争取以更简单的方式呈现。
预览图如下所示:
这里我们主要讲解代码部分,UI文件我会直接的提供给大家,大家可以下载下来后再对照着学习。
当我们使用PyUIC生成代码的时候,一般情况下这个类下有两个函数:setupUi和retranslateUi。
一般而言,这两个方法用于设置用户界面的初始化和翻译文本。在 setupUi 中,会设置窗口、布局、按钮、文本框等元素的属性和初始状态;而在 retranslateUi 中,会设置用户界面元素的文本内容。
如果我们只是想要一个像上面的一个浏览图,你可以直接使用下面的代码直接进行预览,它本身并没有任何的功能,只是将UI界面的布局展示出来了,要想做更多的事情,那就需要给这个类补充更多的功能。
- from OboardCamDisp import Ui_MainWindow
-
- import sys
- from PyQt5.QtWidgets import QApplication, QMainWindow
-
- class CamShow(QMainWindow, Ui_MainWindow):
- def __init__(self, parent=None):
- super(CamShow, self).__init__(parent)
- self.setupUi(self)
-
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- ui=CamShow()
- ui.show()
- sys.exit(app.exec_())
你随意的点击滑动这些控件是没有任何用的,这里的CamShow 类继承自 QMainWindow 和 Ui_MainWindow,通过调用 setupUi 方法初始化界面。
当我运行上面的文件时候,我们发现移动滑动条或者给微调框调整是各改各的,这里我们可以通过将滑块的 valueChanged 信号连接到对应微调框的 setValue 槽,以及将微调框的 valueChanged 信号连接到对应滑块的 setValue 槽。
- def PrepSliders(self):
- self.RedColorSld.valueChanged.connect(self.RedColorSpB.setValue)
- self.RedColorSpB.valueChanged.connect(self.RedColorSld.setValue)
- self.GreenColorSld.valueChanged.connect(self.GreenColorSpB.setValue)
- self.GreenColorSpB.valueChanged.connect(self.GreenColorSld.setValue)
- self.BlueColorSld.valueChanged.connect(self.BlueColorSpB.setValue)
- self.BlueColorSpB.valueChanged.connect(self.BlueColorSld.setValue)
- self.ExpTimeSld.valueChanged.connect(self.ExpTimeSpB.setValue)
- self.ExpTimeSpB.valueChanged.connect(self.ExpTimeSld.setValue)
- self.GainSld.valueChanged.connect(self.GainSpB.setValue)
- self.GainSpB.valueChanged.connect(self.GainSld.setValue)
- self.BrightSld.valueChanged.connect(self.BrightSpB.setValue)
- self.BrightSpB.valueChanged.connect(self.BrightSld.setValue)
- self.ContrastSld.valueChanged.connect(self.ContrastSpB.setValue)
- self.ContrastSpB.valueChanged.connect(self.ContrastSld.setValue)
这里通信成功,像上面的self.RedColorSld和self.RedColorSpB都是继承的Ui_MainWindow下面的,名字,还有数值都需要自己去修改。
其实也就是这下面的两个地方:
这里通过 cv2.VideoCapture 初始化了相机,并设置了一些相机参数,例如曝光时间、增益、亮度和对比度。通过连接滑动条和微调框,能使用户能够动态地调整这些参数。
- def PrepCamera(self):
- try:
- self.camera = cv2.VideoCapture(0)
- self.MsgTE.clear()
- self.MsgTE.append('Oboard camera connected.')
- self.MsgTE.setPlainText()
- except Exception as e:
- self.MsgTE.clear()
- self.MsgTE.append(str(e))
-
- def PrepParameters(self):
- self.RecordPath='D:/PythonProject/pythonProject1/OpencvPyQt5/'
- self.FilePathLE.setText(self.RecordPath) # 默认显示
- self.RecordFlag=0
- self.Image_num=0
- self.R=1
- self.G=1
- self.B=1
-
- self.ExpTimeSld.setValue(self.camera.get(15))
- self.SetExposure()
- self.GainSld.setValue(self.camera.get(14))
- self.SetGain()
- self.BrightSld.setValue(self.camera.get(10))
- self.SetBrightness()
- self.ContrastSld.setValue(self.camera.get(11))
- self.SetContrast()
- self.MsgTE.clear()
在这一步中,为界面上的按钮添加了一些功能,例如启动相机、停止相机、录像等。通过连接这些按钮的点击事件,我们实现了相应的功能。特别是,通过 CallBackFunctions 函数,我们将按钮的点击事件与后台函数进行了关联。
- def StartCamera(self):
- self.ShowBt.setEnabled(False)
- self.StopBt.setEnabled(True)
- self.RecordBt.setEnabled(True)
- self.GrayImgCkB.setEnabled(True)
- if self.GrayImgCkB.isChecked() == 0:
- self.RedColorSld.setEnabled(True)
- self.RedColorSpB.setEnabled(True)
- self.GreenColorSld.setEnabled(True)
- self.GreenColorSpB.setEnabled(True)
- self.BlueColorSld.setEnabled(True)
- self.BlueColorSpB.setEnabled(True)
- self.ExpTimeSld.setEnabled(True)
- self.ExpTimeSpB.setEnabled(True)
- self.GainSld.setEnabled(True)
- self.GainSpB.setEnabled(True)
- self.BrightSld.setEnabled(True)
- self.BrightSpB.setEnabled(True)
- self.ContrastSld.setEnabled(True)
- self.ContrastSpB.setEnabled(True)
- self.RecordBt.setText('录像')
- self.Timer.start(1)
- self.timelb = time.perf_counter()
在最开始运行的时候,有些需要禁用,比如,比如在上面的地方灰度的checkbox没有被点击可以调试R、G、B。
- def StopCamera(self):
- if self.StopBt.text()=='暂停':
- self.StopBt.setText('继续')
- self.RecordBt.setText('保存')
- self.Timer.stop()
- elif self.StopBt.text()=='继续':
- self.StopBt.setText('暂停')
- self.RecordBt.setText('录像')
- self.Timer.start(1)
这是一个很简单的逻辑,在这个函数中,如果当前按钮的文本为 ‘暂停’,则将其设置为 ‘继续’ ,并将录像按钮的文本设置为 ‘保存’,最后停止计时器;如果当前按钮的文本为 ‘继续',则将其设置为 ‘暂停’,将录像按钮的文本设置为 ‘录像’ ,并重新启动计时器。
- def RecordCamera(self):
- tag=self.RecordBt.text()
- if tag=='保存':
- try:
- image_name=self.RecordPath+'image'+time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))+'.jpg'
- print(image_name)
- cv2.imwrite(image_name, self.Image)
- self.MsgTE.clear()
- self.MsgTE.setPlainText('Image saved.')
- except Exception as e:
- self.MsgTE.clear()
- self.MsgTE.setPlainText(str(e))
- elif tag == '录像':
- self.RecordBt.setText('停止')
-
- video_name = self.RecordPath + 'video' + time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())) + '.avi'
- fps = self.FmRateLCD.value()
- size = (self.Image.shape[1],self.Image.shape[0])
- fourcc = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
- self.video_writer = cv2.VideoWriter(video_name, fourcc,self.camera.get(5), size)
- self.RecordFlag=1
- self.MsgTE.setPlainText('Video recording...')
- self.StopBt.setEnabled(False)
- self.ExitBt.setEnabled(False)
- elif tag == '停止':
- self.RecordBt.setText('录像')
- self.video_writer.release()
- self.RecordFlag = 0
- self.MsgTE.setPlainText('Video saved.')
- self.StopBt.setEnabled(True)
- self.ExitBt.setEnabled(True)
如果按钮的文本为 '保存',则执行保存图片的操作。首先构造图片文件名,使用 cv2.imwrite 将当前图像保存为 JPG 文件,然后清空消息显示框并显示保存成功或者错误信息。如果按钮的文本为 '录像',则执行开始录像的操作。构造视频文件名,设置录像相关参数(帧率、大小等),创建 cv2.VideoWriter 对象开始录像,并在消息显示框中显示录像信息。同时禁用停止按钮和退出按钮,防止在录像时进行其他操作。如果按钮的文本为 '停止',则执行停止录像的操作。将按钮文本设置为 '录像',释放 cv2.VideoWriter 对象,停止录像标志,显示录像保存成功的消息,并启用停止按钮和退出按钮。
- def ColorAdjust(self, img):
- try:
- B = img[:, :, 0]
- G = img[:, :, 1]
- R = img[:, :, 2]
-
- # 根据滑动条的值进行颜色通道的调整
- B = B * self.B
- G = G * self.G
- R = R * self.R
-
- img_adjusted = img.copy()
- img_adjusted[:, :, 0] = B
- img_adjusted[:, :, 1] = G
- img_adjusted[:, :, 2] = R
-
- return img_adjusted
- except Exception as e:
- self.MsgTE.setPlainText(str(e))
-
- def DispImg(self):
- if self.GrayImgCkB.isChecked():
- img = cv2.cvtColor(self.Image, cv2.COLOR_BGR2GRAY)
- else:
- img = cv2.cvtColor(self.Image, cv2.COLOR_BGR2RGB)
- qimg = qimage2ndarray.array2qimage(img)
- self.DispLb.setPixmap(QPixmap(qimg))
- self.DispLb.show()
ColorAdjust函数用于进行颜色调整。然后,通过 qimage2ndarray 将处理后的图像转换为 QImage,最后使用 QPixmap 在界面上的 DispLb 标签上显示图像。这样,我们完成了图像处理与显示的步骤。
- def CallBackFunctions(self):
- self.FilePathBt.clicked.connect(self.SetFilePath)
- self.ShowBt.clicked.connect(self.StartCamera)
- self.StopBt.clicked.connect(self.StopCamera)
- self.RecordBt.clicked.connect(self.RecordCamera)
- self.ExitBt.clicked.connect(self.ExitApp)
- self.GrayImgCkB.stateChanged.connect(self.SetGray)
- self.ExpTimeSld.valueChanged.connect(self.SetExposure)
- self.GainSld.valueChanged.connect(self.SetGain)
- self.BrightSld.valueChanged.connect(self.SetBrightness)
- self.ContrastSld.valueChanged.connect(self.SetContrast)
- self.RedColorSld.valueChanged.connect(self.SetR)
- self.GreenColorSld.valueChanged.connect(self.SetG)
- self.BlueColorSld.valueChanged.connect(self.SetB)
- def SetR(self):
- R=self.RedColorSld.value()
- self.R=R/255
- def SetG(self):
- G=self.GreenColorSld.value()
- self.G=G/255
- def SetB(self):
- B=self.BlueColorSld.value()
- self.B=B/255
- def SetContrast(self):
- contrast_toset=self.ContrastSld.value()
- try:
- self.camera.set(11,contrast_toset)
- self.MsgTE.setPlainText('The contrast is set to ' + str(self.camera.get(11)))
- except Exception as e:
- self.MsgTE.setPlainText(str(e))
- def SetBrightness(self):
- brightness_toset=self.BrightSld.value()
- try:
- self.camera.set(10,brightness_toset)
- self.MsgTE.setPlainText('The brightness is set to ' + str(self.camera.get(10)))
- except Exception as e:
- self.MsgTE.setPlainText(str(e))
- def SetGain(self):
- gain_toset=self.GainSld.value()
- try:
- self.camera.set(14,gain_toset)
- self.MsgTE.setPlainText('The gain is set to '+str(self.camera.get(14)))
- except Exception as e:
- self.MsgTE.setPlainText(str(e))
- def SetExposure(self):
- try:
- exposure_time_toset=self.ExpTimeSld.value()
- self.camera.set(15,exposure_time_toset)
- self.MsgTE.setPlainText('The exposure time is set to '+str(self.camera.get(15)))
- except Exception as e:
- self.MsgTE.setPlainText(str(e))
- def SetGray(self):
- if self.GrayImgCkB.isChecked():
- self.RedColorSld.setEnabled(False)
- self.RedColorSpB.setEnabled(False)
- self.GreenColorSld.setEnabled(False)
- self.GreenColorSpB.setEnabled(False)
- self.BlueColorSld.setEnabled(False)
- self.BlueColorSpB.setEnabled(False)
- else:
- self.RedColorSld.setEnabled(True)
- self.RedColorSpB.setEnabled(True)
- self.GreenColorSld.setEnabled(True)
- self.GreenColorSpB.setEnabled(True)
- self.BlueColorSld.setEnabled(True)
- self.BlueColorSpB.setEnabled(True)
如果报错PyQt下载不了,是缺少了C++,下一个Visual Studio然后安装一个C++桌面开发就可以了。
如果运行出现:
DeprecationWarning: sipPyTypeDict() is deprecated, the extension module should use sipPyTypeDictRef() instead class CamShow(QMainWindow, Ui_MainWindow):
说的是sip版本不对,这个不影响运行,可以不用理会。
PyQt5-opencv-UIdesign/Camshow at main · Auorui/PyQt5-opencv-UIdesign (github.com)
主函数文件:
- from OboardCamDisp import Ui_MainWindow
- import sys
- from PyQt5.QtWidgets import QApplication,QMainWindow,QFileDialog
- from PyQt5.QtCore import QTimer,QCoreApplication
- from PyQt5.QtGui import QPixmap
- import cv2
- import qimage2ndarray
- import time
-
- class CamShow(QMainWindow,Ui_MainWindow):
- def __del__(self):
- try:
- self.camera.release() # 释放资源
- except:
- return
-
- def __init__(self,parent=None):
- super(CamShow,self).__init__(parent)
- self.setupUi(self)
- self.PrepSliders()
- self.PrepWidgets()
- self.PrepParameters()
- self.CallBackFunctions()
- self.Timer=QTimer()
- self.Timer.timeout.connect(self.TimerOutFun)
-
- # 滑动条与微调框的连接
- def PrepSliders(self):
- self.RedColorSld.valueChanged.connect(self.RedColorSpB.setValue)
- self.RedColorSpB.valueChanged.connect(self.RedColorSld.setValue)
- self.GreenColorSld.valueChanged.connect(self.GreenColorSpB.setValue)
- self.GreenColorSpB.valueChanged.connect(self.GreenColorSld.setValue)
- self.BlueColorSld.valueChanged.connect(self.BlueColorSpB.setValue)
- self.BlueColorSpB.valueChanged.connect(self.BlueColorSld.setValue)
- self.ExpTimeSld.valueChanged.connect(self.ExpTimeSpB.setValue)
- self.ExpTimeSpB.valueChanged.connect(self.ExpTimeSld.setValue)
- self.GainSld.valueChanged.connect(self.GainSpB.setValue)
- self.GainSpB.valueChanged.connect(self.GainSld.setValue)
- self.BrightSld.valueChanged.connect(self.BrightSpB.setValue)
- self.BrightSpB.valueChanged.connect(self.BrightSld.setValue)
- self.ContrastSld.valueChanged.connect(self.ContrastSpB.setValue)
- self.ContrastSpB.valueChanged.connect(self.ContrastSld.setValue)
-
- # 相机的初始化和参数设置
- def PrepCamera(self):
- try:
- self.camera=cv2.VideoCapture(0)
- self.MsgTE.clear()
- self.MsgTE.append('Oboard camera connected.')
- self.MsgTE.setPlainText()
- except Exception as e:
- self.MsgTE.clear()
- self.MsgTE.append(str(e))
-
- def PrepParameters(self):
- self.RecordFlag = 0
- self.RecordPath ='D:/PythonProject/pythonProject1/OpencvPyQt5/Camshow'
- self.FilePathLE.setText(self.RecordPath)
- self.Image_num = 0
- self.R = 1
- self.G = 1
- self.B = 1
-
- self.ExpTimeSld.setValue(self.camera.get(15))
- self.SetExposure()
- self.GainSld.setValue(self.camera.get(14))
- self.SetGain()
- self.BrightSld.setValue(self.camera.get(10))
- self.SetBrightness()
- self.ContrastSld.setValue(self.camera.get(11))
- self.SetContrast()
- self.MsgTE.clear()
-
- # 相机的初始化和参数设置
- def StartCamera(self):
- self.ShowBt.setEnabled(False)
- self.StopBt.setEnabled(True)
- self.RecordBt.setEnabled(True)
- self.GrayImgCkB.setEnabled(True)
- if self.GrayImgCkB.isChecked() == 0:
- self.RedColorSld.setEnabled(True)
- self.RedColorSpB.setEnabled(True)
- self.GreenColorSld.setEnabled(True)
- self.GreenColorSpB.setEnabled(True)
- self.BlueColorSld.setEnabled(True)
- self.BlueColorSpB.setEnabled(True)
- self.ExpTimeSld.setEnabled(True)
- self.ExpTimeSpB.setEnabled(True)
- self.GainSld.setEnabled(True)
- self.GainSpB.setEnabled(True)
- self.BrightSld.setEnabled(True)
- self.BrightSpB.setEnabled(True)
- self.ContrastSld.setEnabled(True)
- self.ContrastSpB.setEnabled(True)
- self.RecordBt.setText('录像')
-
- self.Timer.start(1)
- self.timelb=time.perf_counter()
-
- def StopCamera(self):
- if self.StopBt.text()=='暂停':
- self.StopBt.setText('继续')
- self.RecordBt.setText('保存')
- self.Timer.stop()
- elif self.StopBt.text()=='继续':
- self.StopBt.setText('暂停')
- self.RecordBt.setText('录像')
- self.Timer.start(1)
-
- def RecordCamera(self):
- tag = self.RecordBt.text()
- if tag == '保存':
- try:
- image_name=self.RecordPath+'image'+time.strftime('%Y%m%d%H%M%S',time.localtime(time.time()))+'.jpg'
- print(image_name)
- cv2.imwrite(image_name, self.Image)
- self.MsgTE.clear()
- self.MsgTE.setPlainText('Image saved.')
- except Exception as e:
- self.MsgTE.clear()
- self.MsgTE.setPlainText(str(e))
- elif tag == '录像':
- self.RecordBt.setText('停止')
-
- video_name = self.RecordPath + 'video' + time.strftime('%Y%m%d%H%M%S',time.localtime(time.time())) + '.avi'
- fps = self.FmRateLCD.value()
- size = (self.Image.shape[1],self.Image.shape[0])
- fourcc = cv2.VideoWriter_fourcc('M', 'J', 'P', 'G')
- self.video_writer = cv2.VideoWriter(video_name, fourcc,self.camera.get(5), size)
- self.RecordFlag=1
- self.MsgTE.setPlainText('Video recording...')
- self.StopBt.setEnabled(False)
- self.ExitBt.setEnabled(False)
- elif tag == '停止':
- self.RecordBt.setText('录像')
- self.video_writer.release()
- self.RecordFlag = 0
- self.MsgTE.setPlainText('Video saved.')
- self.StopBt.setEnabled(True)
- self.ExitBt.setEnabled(True)
-
- # 图像处理与显示
- def ColorAdjust(self, img):
- try:
- B = img[:, :, 0]
- G = img[:, :, 1]
- R = img[:, :, 2]
-
- # 根据滑动条的值进行颜色通道的调整
- B = B * self.B
- G = G * self.G
- R = R * self.R
-
- img_adjusted = img.copy()
- img_adjusted[:, :, 0] = B
- img_adjusted[:, :, 1] = G
- img_adjusted[:, :, 2] = R
-
- return img_adjusted
- except Exception as e:
- self.MsgTE.setPlainText(str(e))
-
- def DispImg(self):
- if self.GrayImgCkB.isChecked():
- img = cv2.cvtColor(self.Image, cv2.COLOR_BGR2GRAY)
- else:
- img = cv2.cvtColor(self.Image, cv2.COLOR_BGR2RGB)
- qimg = qimage2ndarray.array2qimage(img)
- self.DispLb.setPixmap(QPixmap(qimg))
- self.DispLb.show()
-
- def TimerOutFun(self):
- success, img = self.camera.read()
- if success:
- self.Image = self.ColorAdjust(img)
- self.DispImg()
- self.Image_num += 1
- if self.RecordFlag:
- self.video_writer.write(img)
- if self.Image_num % 10 == 9:
- frame_rate = 10/(time.perf_counter()-self.timelb)
- self.FmRateLCD.display(frame_rate)
- self.timelb = time.perf_counter()
- self.ImgWidthLCD.display(self.camera.get(3))
- self.ImgHeightLCD.display(self.camera.get(4))
- else:
- self.MsgTE.clear()
- self.MsgTE.setPlainText('Image obtaining failed.')
-
- def PrepWidgets(self):
- self.PrepCamera()
- self.StopBt.setEnabled(False)
- self.RecordBt.setEnabled(False)
- self.GrayImgCkB.setEnabled(False)
- self.RedColorSld.setEnabled(False)
- self.RedColorSpB.setEnabled(False)
- self.GreenColorSld.setEnabled(False)
- self.GreenColorSpB.setEnabled(False)
- self.BlueColorSld.setEnabled(False)
- self.BlueColorSpB.setEnabled(False)
- self.ExpTimeSld.setEnabled(False)
- self.ExpTimeSpB.setEnabled(False)
- self.GainSld.setEnabled(False)
- self.GainSpB.setEnabled(False)
- self.BrightSld.setEnabled(False)
- self.BrightSpB.setEnabled(False)
- self.ContrastSld.setEnabled(False)
- self.ContrastSpB.setEnabled(False)
-
- def SetR(self):
- R=self.RedColorSld.value()
- self.R=R/255
-
- def SetG(self):
- G=self.GreenColorSld.value()
- self.G=G/255
-
- def SetB(self):
- B=self.BlueColorSld.value()
- self.B=B/255
-
- def SetContrast(self):
- contrast_toset=self.ContrastSld.value()
- try:
- self.camera.set(11,contrast_toset)
- self.MsgTE.setPlainText('The contrast is set to ' + str(self.camera.get(11)))
- except Exception as e:
- self.MsgTE.setPlainText(str(e))
-
- def SetBrightness(self):
- brightness_toset=self.BrightSld.value()
- try:
- self.camera.set(10,brightness_toset)
- self.MsgTE.setPlainText('The brightness is set to ' + str(self.camera.get(10)))
- except Exception as e:
- self.MsgTE.setPlainText(str(e))
-
- def SetGain(self):
- gain_toset=self.GainSld.value()
- try:
- self.camera.set(14,gain_toset)
- self.MsgTE.setPlainText('The gain is set to '+str(self.camera.get(14)))
- except Exception as e:
- self.MsgTE.setPlainText(str(e))
-
- def SetExposure(self):
- try:
- exposure_time_toset=self.ExpTimeSld.value()
- self.camera.set(15,exposure_time_toset)
- self.MsgTE.setPlainText('The exposure time is set to '+str(self.camera.get(15)))
- except Exception as e:
- self.MsgTE.setPlainText(str(e))
-
- def SetGray(self):
- if self.GrayImgCkB.isChecked():
- self.RedColorSld.setEnabled(False)
- self.RedColorSpB.setEnabled(False)
- self.GreenColorSld.setEnabled(False)
- self.GreenColorSpB.setEnabled(False)
- self.BlueColorSld.setEnabled(False)
- self.BlueColorSpB.setEnabled(False)
- else:
- self.RedColorSld.setEnabled(True)
- self.RedColorSpB.setEnabled(True)
- self.GreenColorSld.setEnabled(True)
- self.GreenColorSpB.setEnabled(True)
- self.BlueColorSld.setEnabled(True)
- self.BlueColorSpB.setEnabled(True)
-
- def SetFilePath(self):
- dirname = QFileDialog.getExistingDirectory(self, "浏览", '.')
- if dirname:
- self.FilePathLE.setText(dirname)
- self.RecordPath=dirname+'/'
-
- def CallBackFunctions(self):
- self.FilePathBt.clicked.connect(self.SetFilePath)
- self.ShowBt.clicked.connect(self.StartCamera)
- self.StopBt.clicked.connect(self.StopCamera)
- self.RecordBt.clicked.connect(self.RecordCamera)
- self.ExitBt.clicked.connect(self.ExitApp)
- self.GrayImgCkB.stateChanged.connect(self.SetGray)
- self.ExpTimeSld.valueChanged.connect(self.SetExposure)
- self.GainSld.valueChanged.connect(self.SetGain)
- self.BrightSld.valueChanged.connect(self.SetBrightness)
- self.ContrastSld.valueChanged.connect(self.SetContrast)
- self.RedColorSld.valueChanged.connect(self.SetR)
- self.GreenColorSld.valueChanged.connect(self.SetG)
- self.BlueColorSld.valueChanged.connect(self.SetB)
-
- def ExitApp(self):
- self.Timer.Stop()
- self.camera.release()
- self.MsgTE.setPlainText('Exiting the application..')
- QCoreApplication.quit()
-
- if __name__ == '__main__':
- app = QApplication(sys.argv)
- ui=CamShow()
- ui.show()
- sys.exit(app.exec_())
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。