Display video camera in two tkinter windows

i want to display video camera in two different windows using tkinter. i have tried a lot but it only displays the video in one frame.
Here’s my code. is there any thing i can fixe on it?

#add the necessairy librairy
import tkinter as tk
import threading
import time
import subprocess
from imutils.video import VideoStream
import imutils
import cv2
import argparse
from PIL import Image, ImageTk

#class to construct the second video window
class PhotoBoothApp:
	def __init__(self, vs):
		# store the video stream object and output path,
		self.vs = vs
		# initialize read frame,
		self.frame = None
		# initialize the thread stop event
		self.thread = None
		self.stopEvent_2 = None
		# initialize the root window and image panel
		self.root = tk.Tk()
		self.panel = None    		
		self.but_frame = tk.Frame(self.root)
		# create a button, that when pressed, will take the current
		# frame and save it to file
		btn = tk.Button(self.but_frame, bd = '5',text=" photo ")
		self.but_frame.pack(side="left")
		# start a thread that constantly pools the video sensor for
		# the most recently read frame
		self.stopEvent_2 = threading.Event()
		self.thread = threading.Thread(target=self.videoLoop, args=())
		self.thread.start()
		# set a callback to handle when the window is closed
		self.root.wm_title("Reglage")
		self.root.wm_protocol("WM_DELETE_WINDOW", self.onClose)

	def videoLoop(self):
		# try/except statement is a pretty ugly hack to get around
		# a RunTime error that Tkinter throws due to threading
		try:
			# keep looping over frames until we are instructed to stop
			while not self.stopEvent_2.is_set():
				# grab the frame from the video stream and resize it to
				# have a maximum width of 300 pixels
				self.frame = self.vs.read()
				self.frame = imutils.resize(self.frame, width=300)   		
				# OpenCV represents images in BGR order; however PIL
				# represents images in RGB order, so we need to swap
				# the channels, then convert to PIL and ImageTk format
				image = cv2.cvtColor(self.frame, cv2.COLOR_BGR2RGB)
				image = Image.fromarray(image)
				image = ImageTk.PhotoImage(image)
		
				# if the panel is not None, we need to initialize it
				if self.panel is None:
					self.panel = tk.Label(image=image)
					self.panel.image = image
					self.panel.pack(side="left", padx=10, pady=10)
		
				# otherwise, simply update the panel
				else:
					self.panel.configure(image=image)
					self.panel.image = image
		except RuntimeError :
			print("[INFO] caught a RuntimeError")

	def onClose(self):
		# set the stop event 
		print("[INFO] closing...")
		self.stopEvent_2.set()
		#cleanup the camera, 
		self.vs.stop()
		# the quit process to continue
		self.root.quit()

def Run_video_cam2():
	#open the second frame with video is displaying on it 
	pba = PhotoBoothApp(camera)
	pba.root.mainloop() 
	
def fun_Loop():
	#add some variable
	global camera
	global frame
	panel = None
	#open the second video stream in the second window
	camera = VideoStream(0).start()
	try:
		frame = camera.read()
		# keep looping over frames until we are instructed to stop
		while not stopEvent.is_set():
			print ('----------------------------------------------')
			frame = camera.read()
			#cv2.imshow('video frame1', frame)
			# OpenCV represents images in BGR order; however PIL
			# represents images in RGB order, so we need to swap
			# the channels, then convert to PIL and ImageTk format
			image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
			image = Image.fromarray(image)
			image = ImageTk.PhotoImage(image)

			# if the panel is not None, we need to initialize it
			if panel is None:
				panel = tk.Label(image=image)
				#put the image inside the paneml
				panel.image = image
				panel.pack(side="left", padx=10, pady=10)

			# otherwise, simply update the panel
			else:
				panel.configure(image=image)
				panel.image = image
		#stop the runnig camera
		camera.release()
	except RuntimeError :
		print("+_[INFO] caught a RuntimeError_+")
			
# here's the main window
Mafenetre = tk.Tk()
#set main window title
Mafenetre.title("GUI")
Mafenetre['bg']='white' # couleur de fond
# get screen width and height
wf1= Mafenetre.winfo_screenwidth()
hf1= Mafenetre.winfo_screenheight()
A = str(wf1)
B = str(hf1)
# set the dimensions of the screen 
# and where it is placed

w = 500 # width for the Tk root
h = 500 # height for the Tk root
# get screen width and height
ws = Mafenetre.winfo_screenwidth() # width of the screen
hs = Mafenetre.winfo_screenheight() # height of the screen
# calculate x and y coordinates for the Tk master window
x = (ws/2) - (w/2)
y = (hs/2) - (h/2)
# set the dimensions of the screen 
# and where it is placed
Mafenetre.geometry('%dx%d+%d+%d' % (w, h, x, y))
# add test button to the main window
reglage = tk.Button(Mafenetre, bd = '5',text="  PARAM  ", bg='#c42034', fg ='white',font=("Helvetica", 12), command=Run_video_cam2)
reglage.pack(side=tk.TOP, padx=6,pady=35)
thread = None
stopEvent = None
# start a thread that constantly pools the video sensor for
# the most recently read frame
stopEvent = threading.Event()
thread = threading.Thread(target=fun_Loop, args=())
thread.start()
Mafenetre.mainloop()