class GuiPart: """ Independent class responsible for the GUI part of the tool """ def __init__(self, master, client, camStatus, gpsStatus, recordData, stopRecord): """ Set up of the GUI, creation of the different frames """ self.camStatus = camStatus self.gpsStatus = gpsStatus self.client = client self.frame_width = 900 self.frame_height = 800 self.frame1_width = 900 self.frame1_height = 800 self.img = None self.img1 = None style = ttk.Style() style.theme_create("ToolStyle", parent="alt", settings={ "TNotebook": { "configure": { "tabmargins": [2, 5, 2, 0] } }, "TNotebook.Tab": { "configure": { "padding": [20, 20] }, }, "TProgressbar": { "configure": { "foreground": 'red', "background": 'red' } } }) style.theme_use("ToolStyle") style.configure('TNotebook.Tab', font=('Arial Bold', '15', 'bold'), padding=[10, 10]) self.tab_parent = ttk.Notebook(master) self.recording_tab = ttk.Frame(self.tab_parent) self.video_tab = ttk.Frame(self.tab_parent) self.tab_parent.add( self.recording_tab, text="Data recording", ) self.tab_parent.add(self.video_tab, text="Video Output") self.tab_parent.pack(expand=1, fill='both') self.topFrame() self.leftFrame() self.rightFrame() self.videoFrame() self.framesCanvas() def topFrame(self): #welcome text self.topframe = Frame(self.recording_tab, borderwidth=5, relief=tkinter.GROOVE) self.topframe.pack(side=tkinter.TOP) self.welcome_text = tkinter.Label(self.topframe, text="D4RM synchronising tool", font=("Arial Bold", 20)) self.welcome_text.pack(side=tkinter.TOP) def leftFrame(self): self.leftframe = LabelFrame(self.recording_tab, text="Input devices and settings", font=("Arial Bold", 15), height=800, width=500, borderwidth=5, relief=tkinter.GROOVE) self.leftframe.pack(side=tkinter.LEFT) self.leftframe.pack_propagate(False) self.cameraLabel() self.gpsLabel() def cameraLabel(self): # First camera Label self.camera_status_label = tkinter.Label(self.leftframe, text="First Cameras Status", font=("Arial Bold", 15), padx=15, pady=15) self.camera_status_label.pack() self.camera_device_label = tkinter.Label(self.leftframe, text="Unknown", font=("Arial Bold", 20), padx=5, pady=15) self.camera_device_label.pack() # Second camera label self.camera_status_label = tkinter.Label(self.leftframe, text="Second Cameras Status", font=("Arial Bold", 15), padx=15, pady=15) self.camera_status_label.pack() self.camera1_device_label = tkinter.Label(self.leftframe, text="Unknown", font=("Arial Bold", 20), padx=5, pady=15) self.camera1_device_label.pack() def gpsLabel(self): self.gps_status_label = tkinter.Label(self.leftframe, text="GPS Status", font=("Arial Bold", 15), padx=15, pady=15) self.gps_status_label.pack() self.gps_device_label = tkinter.Label(self.leftframe, text="Unknown", font=("Arial Bold", 20), padx=5, pady=15) self.gps_device_label.pack() def rightFrame(self): self.rightframe = LabelFrame(self.recording_tab, text="System informations", font=("Arial Bold", 15), height=800, width=1300, borderwidth=5, relief=tkinter.GROOVE) self.rightframe.pack(side=tkinter.LEFT) self.rightframe.pack_propagate(False) self.systemInfo() self.recordingButtons() self.progressBar() def systemInfo(self): self.notification_label = tkinter.Label(self.rightframe, text="Unknown", font=("Arial Bold", 20), padx=5, pady=15) self.notification_label.pack(anchor=tkinter.S, expand=True) def recordingButtons(self): # Start recording Button self.btn_record = tkinter.Button(self.rightframe, text="Record Data", command=self.client.recordData, font=("Arial Bold", 20)) self.btn_record.pack(anchor=tkinter.S, expand=True) # Stop recording Button self.btn_stop = tkinter.Button(self.rightframe, text="Stop recording", command=self.client.stopRecord, font=("Arial Bold", 20)) self.btn_stop.pack(anchor=tkinter.S, expand=True) def progressBar(self): self.progress_bar = ttk.Progressbar(self.rightframe, orient='horizontal', length=350, mode='determinate') self.progress_bar.pack(anchor=tkinter.S, expand=True) def videoFrame(self): # Set up of the Right frame (Camera output) self.videoframe = LabelFrame(self.video_tab, text="Camera output", font=("Arial Bold", 15), height=self.frame_height, width=self.frame_width, borderwidth=5, relief=tkinter.GROOVE) self.videoframe.pack(side=tkinter.RIGHT) self.videoframe.pack_propagate(False) # Set up of the left frame (Camera output 1) self.videoframe1 = LabelFrame(self.video_tab, text="Second Camera output", font=("Arial Bold", 15), height=self.frame_height, width=self.frame_width, borderwidth=5, relief=tkinter.GROOVE) self.videoframe1.pack(side=tkinter.RIGHT) self.videoframe1.pack_propagate(False) def framesCanvas(self): # Set of the canvas comporting the camera output frames self.canvas = tkinter.Canvas(self.videoframe, width=self.frame_width, height=self.frame_height, highlightcolor="red", bd=5) self.canvas.pack(anchor=tkinter.CENTER) self.first_canvas = self.canvas.create_text( 0, 0, font="Times 20 italic bold", text=" Camera Not Connected !", anchor=tkinter.NW) # Set of the canvas comporting the second camera output frames self.canvas1 = tkinter.Canvas(self.videoframe1, width=self.frame1_width, height=self.frame1_height, highlightcolor="red", bd=5) self.canvas1.pack(anchor=tkinter.CENTER) self.second_canvas = self.canvas1.create_text( 0, 0, font="Times 20 italic bold", text=" Camera Not Connected !", anchor=tkinter.NW) def processIncoming(self, camStatus, gpsStatus, videoOutput, frame, frame1): """Handle the Status of the devices every 1 ms""" # If GPS connected if gpsStatus: self.gps_device_label.configure(text="Connected") else: self.gps_device_label.configure(text="Disconnected") # # if Both cameras are disconnected # if not camStatus[0] and not camStatus[2]: # self.notification_label.configure(text="Both cameras are disconnected !", fg="red") # # if one of the cameras is disconnected # if not camStatus[0] or not camStatus[2]: # self.notification_label.configure(text="One of the cameras is disconnected !", fg="red") # If First Camera connected if camStatus[0]: self.camera_device_label.configure(text="Connected") if videoOutput: if frame is not None: self.notification_label.configure( text= "No Recording in Procces, Press the record button to start recording" ) self.photo = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB) self.photo = PIL.ImageTk.PhotoImage( image=PIL.Image.fromarray( self.photo)) # Transform the frame into PIL image self.img = self.canvas.create_image( 0, 0, image=self.photo, anchor=tkinter.NW ) # Display the image into the canvas GUI #self.canvas.itemconfigure(self.first_canvas, image=self.photo) else: self.canvas.itemconfigure( self.first_canvas, text=" Can't show the video, recording in process.") self.notification_label.configure(text="Recording in Procces") else: self.camera_device_label.configure(text="Disconnected") self.canvas.itemconfigure(self.first_canvas, text=" Camera Not Connected !") # If second camera connected if camStatus[2]: self.camera1_device_label.configure(text="Connected") if videoOutput: if frame1 is not None: self.notification_label.configure( text= "No Recording in Procces, Press the record button to start recording" ) self.photo1 = cv2.cvtColor(frame1, cv2.COLOR_BGR2RGB) self.photo1 = PIL.ImageTk.PhotoImage( image=PIL.Image.fromarray( self.photo1)) # Transform the frame into PIL image self.img1 = self.canvas1.create_image( 0, 0, image=self.photo1, anchor=tkinter.NW ) # Display the image into the canvas GUI #self.canvas1.itemconfigure(self.first_canvas, image=self.photo1) else: self.canvas1.itemconfigure( self.second_canvas, text=" Can't show the video, recording in process.") self.notification_label.configure(text="Recording in Procces") else: self.camera1_device_label.configure(text="Disconnected") self.canvas1.itemconfigure(self.second_canvas, font="Times 20 italic bold", text=" Camera Not Connected !")
canvas = Canvas(root, bg="white") canvas.pack() # авторизация lf = LabelFrame(canvas, text="Аторизация", bd=4, fg="red") lf.pack() log = Entry(lf, width=WIDTH, font="Arial 14", fg="light gray") log.pack() mail = Entry(lf, width=WIDTH, font="Arial 14", fg="light gray") mail.pack() pas = Entry(lf, width=WIDTH, font="Arial 14", fg="light gray") pas.pack() rep = Entry(lf, width=WIDTH, font="Arial 14", fg="light gray") rep.pack() log.insert(0, "login, например ProV2019") mail.insert(0, "email, например [email protected]") pas.insert(0, "password, например 2019ProV") rep.insert(0, "repository, например My2") btn = Button(lf, text="Вход", fg='blue', command=authorization) btn.pack() lf2 = LabelFrame(canvas, text="Терминал", fg="red", height=250, bd=4) lf2.pack_propagate(False) lf2.pack(fill="both") text = scroll.ScrolledText(lf2, font="Arial 12") text.pack() Button(canvas, text="ВЫХОД", fg="red", command=root.destroy).pack() root.bind("1", enter) root.mainloop()
def __init__(self, vs, outputPath): # store the video stream object and output path, then initialize # the most recently read frame, thread for reading frames, and # the thread stop event self.vs = vs self.outputPath = "output" self.frame = None self.thread = None self.stopEvent = None # initialize the root window and image panel self.root = Tk() self.root.iconbitmap( "Resources/card+id+id+card+identity+identity+card+icon+icon-1320196206727682853.ico" ) self.root.title("Card Generator") self.face_cascade = cv2.CascadeClassifier( "Resources/haarcascade_frontalface_default.xml") self.root.resizable(False, False) self.panel = None # Frame Creation frame_form = LabelFrame(self.root, text="Date Personale", padx=5, pady=5, width=350, height=420) frame_form.grid_propagate(False) frame_form.grid(row=0, column=0, padx=10, pady=10) frame_video = LabelFrame(self.root, text="Captura Camera Web", padx=5, pady=5, width=500, height=420) frame_video.pack_propagate(False) frame_video.grid(row=0, column=1, padx=10, pady=10) frame_send = LabelFrame(self.root, text="Salvare & Generare", padx=5, pady=5, width=350, height=234) frame_send.grid_propagate(False) frame_send.grid(row=1, column=0, padx=10, pady=10) frame_image = LabelFrame(self.root, text="Editare Imagine", padx=5, pady=5, width=500, height=234) frame_image.grid_propagate(False) frame_image.grid(row=1, column=1, padx=10, pady=10) # --------------Frame Form-------------- # Label Init nume_label = Label(frame_form, text="Nume: ").grid(row=0, column=0, sticky="w") nume_empty_label = Label(frame_form, text="").grid(row=1, column=0) prenume_label = Label(frame_form, text="Prenume: ").grid(row=2, column=0, sticky="w") prenume_empty_label = Label(frame_form, text="").grid(row=3, column=0) cnp_label = Label(frame_form, text="CNP: ").grid(row=4, column=0, sticky="w") cnp_empty_label = Label(frame_form, text="").grid(row=5, column=0) matr_label = Label(frame_form, text="Nr. Matricol: ").grid(row=6, column=0, sticky="w") matr_empty_label = Label(frame_form, text="").grid(row=7, column=0) email_label = Label(frame_form, text="Email: ").grid(row=8, column=0, sticky="w") email_empty_label = Label(frame_form, text="").grid(row=9, column=0) uni_label = Label(frame_form, text="Universitate: ").grid(row=10, column=0, sticky="w") uni_empty_label = Label(frame_form, text="").grid(row=11, column=0) fac_label = Label(frame_form, text="Facultate: ").grid(row=12, column=0, sticky="w") fac_empty_label = Label(frame_form, text="").grid(row=13, column=0) an_label = Label(frame_form, text="An: ").grid(row=14, column=0, sticky="w") an_empty_label = Label(frame_form, text="").grid(row=15, column=0) # Entry Init matr_reg = (self.root.register(self.validate_matr), '%P') cnp_reg = (self.root.register(self.validate_cnp), '%P') email_reg = (self.root.register(self.validate_email), '%P') self.nume_entry = Entry(frame_form, width=40, borderwidth=5) self.nume_entry.grid(row=0, column=1) self.prenume_entry = Entry(frame_form, width=40, borderwidth=5) self.prenume_entry.grid(row=2, column=1) self.cnp_entry = Entry(frame_form, width=40, borderwidth=5, validate="all", validatecommand=cnp_reg) self.cnp_entry.grid(row=4, column=1) self.cnp_empty_entry = Label(frame_form, text="", fg="red") self.cnp_empty_entry.grid(row=5, column=1) self.matr_entry = Entry(frame_form, width=40, borderwidth=5, validate="all", validatecommand=matr_reg) self.matr_entry.grid(row=6, column=1) self.matr_empty_entry = Label(frame_form, text="", fg="red") self.matr_empty_entry.grid(row=7, column=1) self.email_entry = Entry(frame_form, width=40, borderwidth=5, validate="all", validatecommand=email_reg) self.email_entry.grid(row=8, column=1) self.email_empty_entry = Label(frame_form, text="", fg="red") self.email_empty_entry.grid(row=9, column=1) # Dropdown Init self.var_uni = StringVar() self.var_fac = StringVar() self.var_an = StringVar() uni_drop = OptionMenu(frame_form, self.var_uni, "UPT", "UVT", "UBB", command=lambda x: self.pick(frame_form)) uni_drop.grid(row=10, column=1, sticky="ew") print(self.var_uni.get()) self.fac_drop = OptionMenu(frame_form, self.var_fac, "").grid(row=12, column=1, sticky="ew") an_drop = OptionMenu(frame_form, self.var_an, "1", "2", "3", "4").grid(row=14, column=1, sticky="w") # --------------Frame Save & Export-------------- # Label Init imagine_label = Label(frame_send, text="Imagine de fundal: ").grid(row=0, column=0, sticky="w") imagine_empty_label = Label(frame_send, text="").grid(row=1, column=0) save_db_label = Label(frame_send, text="Salvare DB: ").grid(row=2, column=0, sticky="w") save_empty_label = Label(frame_send, text="").grid(row=3, column=0) generate_label = Label(frame_send, text="Generare card: ").grid(row=4, column=0, sticky="w") generate_empty_label = Label(frame_send, text="").grid(row=5, column=0) # Button Init search = Button(frame_send, text="Cauta Imagine", padx=5, pady=5, command=lambda: self.search_im(frame_send)) search.grid(row=0, column=1) self.photo_save = ImageTk.PhotoImage( Image.open("Resources/save.png").resize((75, 50))) save_btn = Button(frame_send, image=self.photo_save, command=self.db_save) save_btn.grid(row=2, column=1) self.photo_generate = ImageTk.PhotoImage( Image.open( "Resources/card+id+id+card+identity+identity+card+icon+icon-1320196206727682853.png" ).resize((75, 50))) self.generate_btn = Button(frame_send, image=self.photo_generate, padx=5, pady=5, state=DISABLED, command=self.generate) self.generate_btn.grid(row=4, column=1) # Descriptions self.var_preview = IntVar() preview = Checkbutton(frame_send, text="Previzualizare", variable=self.var_preview) preview.grid(row=4, column=2) # --------------Frame Webcam-------------- # Inits web_btn = Button(frame_video, text="Activare camera web", command=self.Open_cam).pack() self.black_placeholder = ImageTk.PhotoImage( Image.open("Resources/placeholder.png").resize((400, 300))) self.web_feed = Label(frame_video, image=self.black_placeholder) self.web_feed.pack() self.take_btn = Button(frame_video, text="Faceti poza", padx=40, pady=40, state=DISABLED, command=self.takeSnapshot) self.take_btn.pack() # --------------Frame Image-------------- # Inits self.black_placeholder_image = ImageTk.PhotoImage( Image.open("Resources/placeholder.png").resize((200, 200))) self.image_feed = Label(frame_image, image=self.black_placeholder_image) self.image_feed.grid(row=0, column=0, rowspan=4) self.filter1 = Button(frame_image, text="Blur", padx=5, pady=5, state=DISABLED, command=self.fil1) self.filter1.grid(row=0, column=1, padx=10) self.filter2 = Button(frame_image, text="Sepia", padx=5, pady=5, state=DISABLED, command=self.fil2) self.filter2.grid(row=0, column=2) self.filter3 = Button(frame_image, text="Gray", padx=5, pady=5, state=DISABLED, command=self.fil3) self.filter3.grid(row=0, column=3, padx=10) self.filter4 = Button(frame_image, text="Sharpening", padx=5, pady=5, state=DISABLED, command=self.fil4) self.filter4.grid(row=0, column=4) selected_filter = Label(frame_image, text="Selected filter:").grid(row=1, column=1, columnspan=4) self.selected_filter_name = Label(frame_image, text="No Filter Selected") self.selected_filter_name.grid(row=2, column=1, columnspan=4) self.root.wm_protocol("WM_DELETE_WINDOW", self.onClose)