首页 > 编程知识 正文

tkinter 播放视频,tkinter视频教程

时间:2023-05-03 11:39:26 阅读:259778 作者:939

tkinter是python的界面开发包

使用tkinter显示视频流的一个办法是使用label来逐帧显示图片。

from Tkinter import *from PIL import ImageTk, Imageimport cv2root = Tk()# Create a frameapp = Frame(root, bg="white")app.grid()# Create a label in the framelmian = Label(app)lmain.grid()# Capture from cameracap = cv2.VideoCapture(0)# function for video streamingdef video_stream(): _, frame = cap.read() cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA) img = Image.fromarray(cv2image) imgtk = ImageTk.PhotoImage(image=img) lmain.imgtk = imgtk lmain.configure(image=imgtk) lmain.after(1, video_stream) video_stream()root.mainloop()

代码很简单,有几个点需要说明:

1. Lable控件

import Tkinter as tkphoto = tk.PhotoImage(file="hello.gif") Lab= tk.Label(root,text='欢迎',compound='center',font = ('微软雅黑',30),image= photo)

Lable可以显示文本和图像。

但是默认可以显示的是gif图像,如果是pngjpg可以使用PIL读取转化。如上,先把opecv的Mat转为PIL的image, 然后再转为tk适用格式。

转化后,将图像显示到label上,需要2句命令,缺一不可。(可参考:python 实现在tkinter中动态显示label图片的方法)

lmain.imgtk = imgtk

lmain.configure(image=imgtk)

2. tkinter的after函数

该函数可以使用计数器的功能,对窗口及部分控件可以使用after函数,实现定时更新的功能。

after(delay_ms, callback=None, *args)

如果指定的执行函数有参数,可以把参数卸载args的位置。如下,实现函数复用。

def video_stream(lmain): _, frame = cap.read() cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA) img = Image.fromarray(cv2image) imgtk = ImageTk.PhotoImage(image=img) lmain.imgtk = imgtk lmain.configure(image=imgtk) lmain.after(1, video_stream,lmain) video_stream(lmain1)video_stream(lmain2)

3. 布局

tkinter有3种布局,绝对布局,相对布局,表格布局。

同时,我们可以用包裹的方式,实现多样化的布局。如使用2个Frame左右布局,然后第二个frame中上下布局。

# 绝对布局,窗口的变化对位置没有影响label1.place(x=10,y=10)label2.place(x=50,y=50)label3.place(x=100,y=100)# 相对布局,窗体改变对控件有影响label1.pack(fill=tkinter.Y, side=tkinter.LEFT)label2.pack(fill=tkinter.X, side=tkinter.TOP)label3.pack()# 表格布局label1.grid(row=0,column=0)label2.grid(row=0,column=1)label3.grid(row=1,column=0)label4.grid(row=1,column=1)

 

 

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。