#python #tkinter
Вопрос:
мой код работает так, как я хочу, но у меня возникает проблема, когда я уничтожаю свой корень, появляется серое окно, которое я также должен закрыть, чтобы остальная часть моего кода работала и функционировала, это небольшая проблема, которую я хотел бы исправить, может ли кто-нибудь помочь мне с устранением этой небольшой проблемы, потому что это действительно меня раздражает, вот мой код:
import face_recognition
import os
import cv2
from face_recognition.api import face_locations
import tkinter as tk
used_list = []
image_list= os.listdir("Faces")
class_names = []
add_key = 0
width = '400'
height = '700'
width_int = int(width)
height_int = int(height)
but_height = height_int / len(image_list)
but_width = width_int / len(image_list)
lbl_add = but_height / 2
but_width = int(but_width)
but_height = int(but_height)
root = tk.Tk()
root.geometry(f"{width}x{height}")
for fle in image_list:
def fun2(fle):
if len(used_list) < 2:
used_list.append(fle)
if len(used_list) == 2:
root.destroy()
cur_but = tk.Button(root,width = but_width,height = height_int,bg='#8a081e',command = lambda i=fle:fun2(i))
cur_but.place(x = 0,y = add_key)
add_key = but_height
for thing in image_list:
txt = tk.Label(root,text = f"{thing}",bg='#8a081e',fg = 'white')
txt.place(x = (width_int / 2) - 30,y =lbl_add)
lbl_add = but_height
big_text = tk.Label(root,text = ' Pick Two Files to see if both people have matching faces',width = 100,height = 5, anchor='w')
big_text.place(x=0,y=0)
root.mainloop()
image_list= os.listdir("Faces")
add_key = 0
width = '400'
height = '800'
width_int = int(width)
height_int = int(height)
but_height = height_int / len(image_list)
but_width = width_int / len(image_list)
but_width = int(but_width)
root = tk.Tk()
root.geometry(f"{width}x{height}")
for file_name in image_list:
tk.Button(root,text = f'{file_name}',width = but_width,height = height_int)
root.mainloop()
print()
img1 = used_list[0]
img2 = used_list[1]
def check_two_faces(image1,image2):
class_names = []
image1 = 'Faces/' image1
image2 = 'Faces/' image2
read_image = cv2.imread(image1)
Steve_image = face_recognition.load_image_file(image1)
Steve_image = cv2.cvtColor(Steve_image,cv2.COLOR_BGR2RGB)
second_pic = face_recognition.load_image_file(image2)
second_pic = cv2.cvtColor(second_pic,cv2.COLOR_BGR2RGB)
face_loc = face_recognition.face_locations(Steve_image)[0]
face_enc = face_recognition.face_encodings(Steve_image)[0]
cv2.rectangle(Steve_image, (face_loc[3],face_loc[0]), ( face_loc[1],face_loc[2]), (0, 255, 0), 2)
second_loc = face_recognition.face_locations(second_pic)[0]
second_enc = face_recognition.face_encodings(second_pic)[0]
cv2.rectangle(second_pic, (second_loc[3],second_loc[0]), ( second_loc[1],second_loc[2]), (0, 255, 0), 2)
comparision = face_recognition.compare_faces([face_enc],second_enc)
print()
name = os.path.splitext(image1)[0]
if comparision == [False]:
print("Both pictures are different people.")
else:
print(f"""Both pictures are the same people.
""")
check_two_faces(image1=img1,image2=img2)
Комментарии:
1. Не могли бы вы, пожалуйста, удалить весь ненужный код? Я не думаю, что нам нужно видеть весь ваш код. Пожалуйста, удалите все ненужные детали.
2. Также вы знаете, что создаете второе
tkinter
окно, вызываетеroot.geometry(f"{width}x{height}")
, а затем создаете кучу кнопок, не вызывая.place
их. Это почему? Я ссылаюсь на эту часть вашего кода:root = tk.Tk(); root.geometry(f"{width}x{height}"); for file_name in image_list: tk.Button(...); root.mainloop()