python利用tkinter设计一个监控图形界面,完成以下功能:1.设计一个640x480的监控首页界面,有一个管理员登录设置,输入管理员账号及密码可以跳转到监控页面;2.登录后,首页界面消失,出现一个800x600的监控窗口;3.监控窗口有一个640x480的label用于显示usb视频画面;4.监控窗口有一个查看历史监控按钮,点击后跳转到新窗口
时间: 2023-06-25 09:02:02 浏览: 116
实现这个功能需要先安装 tkinter 库,然后按照以下步骤进行操作:
```python
import tkinter as tk
# 创建主窗口
root = tk.Tk()
root.geometry('640x480')
root.title('监控首页')
# 创建管理员登录界面
login_frame = tk.Frame(root)
login_frame.pack(side='top', padx=100, pady=50)
# 创建管理员账号密码输入框
tk.Label(login_frame, text='账号:').grid(row=0, column=0)
tk.Entry(login_frame).grid(row=0, column=1)
tk.Label(login_frame, text='密码:').grid(row=1, column=0)
tk.Entry(login_frame, show='*').grid(row=1, column=1)
# 创建登录按钮
tk.Button(login_frame, text='登录', command=lambda: show_monitor(root)).grid(row=2, column=1)
def show_monitor(root):
# 销毁登录界面
login_frame.destroy()
# 创建监控窗口
monitor_frame = tk.Frame(root)
monitor_frame.pack(side='top', padx=80, pady=60)
# 创建视频画面标签
video_label = tk.Label(monitor_frame, width=640, height=480, bg='black')
video_label.pack(side='left')
# 创建查看历史监控按钮
history_button = tk.Button(monitor_frame, text='查看历史监控', command=show_history)
history_button.pack(side='right')
def show_history():
# 创建历史监控窗口
history_window = tk.Toplevel(root)
history_window.geometry('800x600')
history_window.title('历史监控')
# 运行主窗口
root.mainloop()
```
以上代码实现了一个基本的监控界面,包括了管理员登录界面、监控窗口和历史监控窗口。其中,管理员账号密码输入框使用 Label 和 Entry 组件创建,登录按钮使用 Button 组件创建,并且绑定了一个命令,当管理员点击登录按钮时,会调用 show_monitor 函数。show_monitor 函数负责创建监控窗口,包括视频画面标签和查看历史监控按钮。历史监控按钮同样使用 Button 组件创建,并且绑定了一个命令,当管理员点击该按钮时,会调用 show_history 函数创建历史监控窗口。
注意,视频画面标签需要使用 VideoCapture 库来获取视频画面并显示在标签中。具体代码如下:
```python
import cv2
def show_video(video_label):
cap = cv2.VideoCapture(0)
while True:
ret, frame = cap.read()
if ret:
frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
img = Image.fromarray(frame)
imgtk = ImageTk.PhotoImage(image=img)
video_label.imgtk = imgtk
video_label.configure(image=imgtk)
else:
break
cap.release()
```
以上代码实现了一个 show_video 函数,该函数使用 VideoCapture 库获取摄像头画面,并将其显示在视频画面标签中。具体实现方式是,首先使用 cap.read() 函数读取摄像头画面,并将其转换为 RGB 格式;然后使用 Image.fromarray 函数将其转换为 Image 对象,并使用 ImageTk.PhotoImage 函数将其转换为 PhotoImage 对象,以便在标签中显示。最后,将 PhotoImage 对象保存在 video_label.imgtk 属性中,并使用标签的 configure 方法更新标签显示内容。
完整代码如下:
阅读全文