【发布时间】:2018-09-24 05:19:16
【问题描述】:
我想将网络摄像头图像添加到我的主 GUI 窗口,并且该图像将发送到电子邮件 ID。如果这是不可能的,我还想保存该图像,并且该保存的图像将发送到我的电子邮件 ID,并且在倒计时到 3、2、1 时,微笑它会通过网络摄像头单击图像。 这是我的代码:
import sys
from PyQt5 import QtCore
from PyQt5 import QtWidgets, QtGui
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.base import MIMEBase
from email import encoders
import cv2, time
DURATION_INT = 5
class MyMainWindow(QtWidgets.QMainWindow):
def __init__(self):
super().__init__()
self.time_left_int = DURATION_INT
self.widget_counter_int = 0
central_widget = QtWidgets.QWidget()
self.setCentralWidget(central_widget)
vbox = QtWidgets.QVBoxLayout()
central_widget.setLayout(vbox)
self.pages_qsw = QtWidgets.QStackedWidget()
vbox.addWidget(self.pages_qsw)
self.time_passed_qll = QtWidgets.QLabel()
vbox.addWidget(self.time_passed_qll)
self.pushButton = QtWidgets.QPushButton()
self.pushButton.setText("Push to start")
self.yesbutton = QtWidgets.QToolButton()
self.yesbutton.setText("yes")
self.Nobutton = QtWidgets.QToolButton()
self.Nobutton.setText("No")
self.imageframe = QtWidgets.QLabel()
self.imageframe.setText("fghkfhh")
vbox.addWidget(self.Nobutton)
vbox.addWidget(self.yesbutton)
vbox.addWidget(self.pushButton)
vbox.addWidget(self.imageframe)
self.pushButton.clicked.connect(self.timer_start)
self.yesbutton.clicked.connect(self.capturing_image)
self.update_gui()
def gmail_alert(self):
email_user = 'user email_id'
email_send = 'receiver email_id'
subject = 'Alert system'
msg = MIMEMultipart()
msg['From'] = email_user
msg['To'] = email_send
msg['Subject'] = subject
msg.preamble = "test"
body = 'Hi there, sending this email from Python!'
msg.attach(MIMEText(body, 'plain'))
filename = 'alert.png'
attachment = open(filename, 'rb')
part = MIMEBase('application', 'octet-stream')
part.set_payload((attachment).read())
encoders.encode_base64(part)
part.add_header('Content-Disposition', "attachment;
filename= " + filename)
msg.attach(part)
text = msg.as_string()
server = smtplib.SMTP('smtp.gmail.com', 587)
server.starttls()
server.login(email_user, 'user email_id password')
server.sendmail(email_user, email_send, text)
server.quit()
def timer_start(self):
self.time_left_int = DURATION_INT
self.my_qtimer = QtCore.QTimer(self)
self.my_qtimer.timeout.connect(self.timer_timeout)
self.my_qtimer.start(1000)
self.update_gui()
def timer_timeout(self):
if self.time_left_int > 0:
self.time_left_int -= 1
else:
self.gmail_alert()
self.update_gui()
def update_gui(self):
self.time_passed_qll.setText((str(self.time_left_int) if self.time_left_int >=1 else "Smile..!"))
def capturing_image(self):
video =cv2.VideoCapture(0)
check, frame = video.read()
print(check)
print(frame)
cv2.imshow("capturing", frame)
video.release()
app = QtWidgets.QApplication(sys.argv)
main_window = MyMainWindow()
main_window.show()
sys.exit(app.exec_()
【问题讨论】:
-
您遇到的错误是什么?你不能做什么?看看这里stackoverflow.com/help/how-to-ask
-
我想通过在倒计时 3 上单击“是”按钮来保存图像,相同的图像将发送到该电子邮件。
-
我如何合并这两个文件以创建单个 GUI 窗口。就像我创建了一个 .py 文件一样。只需运行一个 .py 文件即可完成所有工作
标签: python pyqt pyqt5 opencv3.0