我有一个tkintermulti-frame在一个页面中包含多个页面/帧的应用程序我希望有一个使用open cv的摄像头,当我导航到其他屏幕/页面时,摄像头应该关闭,当屏幕上出现帧或处于焦点时,摄像头

import tkinter as tk
import connectionPage
import startPage
// it has more than 15 pages but for example I have removed others

class tkinterApp(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)
        container = tk.Frame(self)
        container.pack(side="top", fill="both", expand=True)
        self.frames = {}
        self.geometry(geometry)
        self.attributes("-fullscreen", True)
        StartPage=startPage.StartPage
        ConnectionPage=connectionPage.connect_page
        FrontCameraPage = frontCameraPage.FrontCameraPage
        for F in (StartPage, ConnectionPage,FrontCameraPage):
            frame = F(container, self)
            self.frames[F] = frame
            frame.grid(row=0, column=0, sticky="nsew")

        self.show_frame(startPage.StartPage)
    def show_frame(self, cont):
        frame = self.frames[cont]
        if hasattr(frame, 'refresh'):
            frame.refresh()
        frame.tkraise()

    def get_page(self, page_class):
        return self.frames[page_class]


if __name__ == "__main__":
    app = tkinterApp()
    app.mainloop()

相机框架

class FrontCameraPage(tk.Frame):
    def __init__(self, parent, controller):
        tk.Frame.__init__(self, parent)
        self.controller = controller

        self.label = tk.Label(self, text="FRONT CAMERA", font=MediumFont, bg="white").grid(row = 0,column = 0,columnspan=2, sticky = "nsew")
        self.cameraFrame = tk.Frame(self, bg=gray)
        self.cameraFrame.grid(row = 1,column = 0, sticky = "nsew")
        self.buttonFrame  = tk.Frame(self,bg = "white")
        self.buttonFrame.grid(row = 1,column = 1, sticky = "nsew",padx = (10,0))

        def end_trip():
            self.cameraFrame.quit()# right now i am using quit but it is closing whole applicaiton i just want to close camera 



        self.Info = tk.Label(self.buttonFrame, text="FACE NOT\n DETECTED", font=MediumFont,bg = dark_red,fg ="white")
        self.Info.grid(row=0, column=0, ipadx=8,pady = (0,5))
        
        self.switchCamera = tk.Button(self.buttonFrame, text="SWITCH CAMERA", font=small_Font, bg=dark_blue, command=lambda: self.switch_camera(),fg ="white")
        self.switchCamera.grid(row=1, column=0, ipadx=5,pady = (0,5))

        self.endTrip = tk.Button(self.buttonFrame, text="END TRIP", font=small_Font, bg=dark_blue, command=pass = "White")
        self.endTrip.grid(row=2, column=0, ipadx=10,pady = (0,5))

        self.cancelButton = tk.Button(self.buttonFrame, text="Cancel", font=small_Font, bg=dark_blue, command=pass,fg="white")
        self.cancelButton.grid(row=3, column=0, ipadx=10)
        


    def refresh(self):
        time.sleep(1)
        width, height = 200, 200
        cap = cv2.VideoCapture(0)
        cap.set(cv2.CAP_PROP_FRAME_WIDTH, width)
        cap.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
        lmain = tk.Label(self.cameraFrame)
        lmain.pack()

        def show_frame():
            _, frame = cap.read()
            frame = cv2.flip(frame, 1)
            cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
            img = PIL.Image.fromarray(cv2image)
            imgtk = ImageTk.PhotoImage(image=img)
            lmain.imgtk = imgtk
            lmain.configure(image=imgtk)
            lmain.after(10, show_frame)
        show_frame()

https://www.5axxw.com/questions/content/bgzaci

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值