- 继续
我们继续上篇文章继续贴代码,以下部分是如何用诺基亚的QT5来创建一个界面应用程序,带输入框、按钮、文本区,以及视频显示区。
class ClientDemo(QWidget):
def __init__(self):
super().__init__()
#Init SDK
self.sdk = HCNetSDK()
self.sdk.NET_DVR_Init()
self.sdk.NET_DVR_SetReconnect()
self.lUserID = -1
self.lRealHandle = -1
#Dialog
self.resize(1300, 850)
self.setWindowTitle('ClientDemo')
#Layout
self.hbl = QHBoxLayout()
self.hbl2 = QHBoxLayout()
self.hbl3 = QHBoxLayout()
self.hbl4 = QHBoxLayout()
self.vbl = QVBoxLayout()
self.vbl.addLayout(self.hbl)
self.vbl.addLayout(self.hbl2)
self.vbl.addLayout(self.hbl3)
self.vbl.addLayout(self.hbl4)
self.setLayout(self.vbl)
#Login Infomation
self.lbIP = QLabel('IP')
self.eIP = QLineEdit()
self.lbPort = QLabel('Port')
self.ePort = QLineEdit()
self.lbUser = QLabel('User')
self.eUser = QLineEdit()
self.lbPassword = QLabel('Password')
self.ePassword = QLineEdit()
self.ePassword.setEchoMode(QLineEdit.Password)
self.lbChannel = QLabel('Channel')
self.eChannel = QLineEdit()
self.hbl.addWidget(self.lbIP)
self.hbl.addWidget(self.eIP)
self.hbl.addWidget(self.lbPort)
self.hbl.addWidget(self.ePort)
self.hbl.addWidget(self.lbUser)
self.hbl.addWidget(self.eUser)
self.hbl.addWidget(self.lbPassword)
self.hbl.addWidget(self.ePassword)
self.hbl.addWidget(self.lbChannel)
self.hbl.addWidget(self.eChannel)
#Button
self.btnVersion = QPushButton('Version')
self.btnVersion.clicked.connect(self.onVersion)
self.hbl2.addWidget(self.btnVersion)
self.btnLogin = QPushButton('Login')
self.btnLogin.clicked.connect(self.onLogin)
self.hbl2.addWidget(self.btnLogin)
self.btnLogout = QPushButton('Logout')
self.btnLogout.clicked.connect(self.onLogout)
self.hbl2.addWidget(self.btnLogout)
self.btnLive = QPushButton('Live')
self.btnLive.clicked.connect(self.onLive)
self.hbl2.addWidget(self.btnLive)
self.btnCloseLive = QPushButton('Close Live')
self.btnCloseLive.clicked.connect(self.onCloseLive)
self.hbl2.addWidget(self.btnCloseLive)
#Screen
self.Screen = QTextEdit()
self.vbl.addWidget(self.Screen)
#Load Config
self.LoadConfig()
def text(self, info):
self.Screen.setText(info)
def closeEvent(self, event):
self.SaveConfig()
event.accept()
def checkLoginInfo(self):
ip = self.eIP.text()
port = self.ePort.text()
user = self.eUser.text()
password = self.ePassword.text()
if '' == ip or '' == port or '' == user or '' == password:
return False
if not port.isdigit():
return False
return True
def checkChannelInfo(self):
channel = self.eChannel.text()
if '' == channel or not channel.isdigit():
return False
return True
def checkVideoParams(self):
bright = self.eBright.text()
contrast = self.eContrast.text()
saturation = self.eSaturation.text()
hue = self.eHue.text()
if '' == bright or not bright.isdigit():
return False
if '' == contrast or not contrast.isdigit():
return False
if '' == saturation or not saturation.isdigit():
return False
if '' == hue or not hue.isdigit():
return False
return True
def SaveConfig(self):
if self.checkLoginInfo() and self.checkLoginInfo():
ip = self.eIP.text()
port = self.ePort.text()
user = self.eUser.text()
password = self.ePassword.text()
channel = self.eChannel.text()
di = dict(ip=ip, port=port, user=user, password=password, channel=channel)
path = APP_PATH + 'clientdemo.conf'
with open(path, 'wb') as f:
pickle.dump(di, f)
def LoadConfig(self):
try:
path = APP_PATH + 'clientdemo.conf'
with open(path, 'rb') as f:
di = pickle.load(f)
self.eIP.setText(di['ip'])
self.ePort.setText(di['port'])
self.eUser.setText(di['user'])
self.ePassword.setText(di['password'])
self.eChannel.setText(di['channel'])
except Exception as e:
print(str(e))
def onVersion(self):
self.Screen.clear()
ver = hex(self.sdk.NET_DVR_GetSDKVersion())
build = hex(self.sdk.NET_DVR_GetSDKBuildVersion())
self.text('SDK Version: ' + str(ver) + '' + 'Build Version: ' + str(build))
def onLogin(self):
if -1 == self.lUserID:
if self.checkLoginInfo():
self.lUserID = self.sdk.NET_DVR_Login(self.eIP.text(), int(self.ePort.text()), self.eUser.text(), self.ePassword.text())
if -1 != self.lUserID:
self.text('Login was successful')
else:
self.text('Login was failed, Error Code: ' + str(self.sdk.NET_DVR_GetLastError()))
else:
self.text('Please input the correct parameters before login')
else:
self.text('You have already logined')
def onLogout(self):
if -1 != self.lUserID:
self.sdk.NET_DVR_Logout(self.lUserID)
self.lUserID = -1
self.text('Logout was successful')
else:
self.text('Now you are in logout status')
def onLive(self):
if -1 != self.lUserID:
if self.checkChannelInfo():
if -1 != self.lRealHandle:
self.sdk.NET_DVR_StopRealPlay(self.lRealHandle)
self.lRealHandle = -1
self.lRealHandle = self.sdk.NET_DVR_RealPlay(self.lUserID, int(self.eChannel.text()), self.Screen.winId())
if -1 != self.lRealHandle:
self.text('Live was successful')
else:
self.text('Live was failed, Error Code: ' + str(self.sdk.NET_DVR_GetLastError()))
else:
self.text('Please input the correct parameters before live')
else:
self.text('You have to login first')
def onCloseLive(self):
if -1 != self.lRealHandle:
self.sdk.NET_DVR_StopRealPlay(self.lRealHandle)
self.lRealHandle = -1
self.Screen.clear()
self.text('Live closed')
else:
self.text('No any live opened')
app = QApplication(sys.argv)
dlg = ClientDemo()
dlg.show()
sys.exit(app.exec_())
- 如何使用
所有 test.py 的代码,全部贴出,你只需要拷贝运行即可,运行后会得到如上图的一个对话框,输入摄像机的IP地址、端口、用户名、密码、通道号,首先点击 Login 登录,成功后,然后点击 Live按钮查看实时预览,就可以看到视频了。
- 结语
今天的内容来得简单粗暴,如果有问题可以在留言区留言,向你们要个大大的红星赞可以吗?