Я новичок на этом форуме и в Tkinter, и мне нужна ваша помощь.Я пытаюсь создать графический интерфейс.Моя программа отлично работает, когда я запускаю файл с Python 2.7, но одна кнопка не работает, когда я создаю исполняемый файл благодаря pyinstaller.
Моя программа довольно проста: я выбираю камеру всписок доступных, нажмите на кнопку «Показать» и видеорамка с выбранной камеры должна отобразиться в новом окне, благодаря opencv.Кнопка «Выход» предназначена для выхода из приложения.
Когда я создаю исполняемый файл благодаря pyinstaller, отображается окно, я могу выбрать камеру, но кнопка «Дисплей» не работает.Я действительно не понимаю, почему, и сообщение об ошибке не отображается.
Большое спасибо за вашу помощь
import cv2
from Tkinter import *
class Gui:
def __init__(self):
self.root = Tk()
self.root.title("Rééducation posturale")
self.root.config(background="#FA8066")
self.root.rowconfigure(0, weight=1)
self.root.rowconfigure(1, weight=1)
self.root.columnconfigure(0, weight=1)
self.root.columnconfigure(1, weight=1)
self.boutonquitter=Button(self.root,text='Quit',font=("Helvetica", 10),command=self.Quitapp)
self.boutonquitter.pack()
self.boutonquitter.grid(row=1, column=1)
camIndices=self.detectNumCameras()
camIndex = []
for n in xrange(camIndices):
camIndex.append(n)
# LIST OF AVAILABLE CAMERA
Label(self.root, text="Camera",font=("Helvetica", 10), bg="#ECA7A6").grid(row=0, column=0)
self.cameraIndex = StringVar(self.root)
self.cameraIndex.set("Choose camera")
dropCamera = apply(OptionMenu, (self.root, self.cameraIndex) + tuple(camIndex))
dropCamera.grid(row=0, column=1)
#CLICK TO DISPLAY
self.bouton = Button(self.root, text="Display", font=("Helvetica", 10), command=self.checkCamera)
self.bouton.pack()
self.bouton.grid(row=1, column=0)
imageFrame = Frame(self.root, width=600, height=400)
self.display = Label(imageFrame)
self.root.mainloop()
# DETECT CAMERAS
def detectNumCameras(self):
ind = 0
while True:
vc = cv2.VideoCapture(ind)
if (vc.isOpened()):
ind += 1
vc.release()
else:
break
return(ind)
def checkCamera(self):
try:
self.cam.release()
except:
pass
self.cam=cv2.VideoCapture(int(self.cameraIndex.get()))
_,frame=self.cam.read()
self.display.after(10,self.show_frame)
#CLOSE THE APP
def Quitapp(self):
self.root.destroy()
cv2.destroyAllWindows()
#DISPLAY FRAME IN A NEW WINDOW
def show_frame(self):
ret,frame = self.cam.read()
if ret is True:
cv2.imshow('Video',frame)
cv2.waitKey(1)
self.display.after(10, self.show_frame)
Gui()
Редактировать: я пытался с py2exe и удалил python 2.7 для установкиPython 3.6 и у меня все еще есть та же проблема ... Мой код также проще:
import cv2
import tkinter as tk
from PIL import Image, ImageTk
class Gui:
def __init__(self):
self.root = tk.Tk()
width, height = 800, 600
self.cam = cv2.VideoCapture(0)
self.cam.set(cv2.CAP_PROP_FRAME_WIDTH, width)
self.cam.set(cv2.CAP_PROP_FRAME_HEIGHT, height)
self.root.title("Test")
#CLICK TO DISPLAY
self.bouton = tk.Button(self.root, text="Display", font=("Helvetica", 10), command=self.CreateNewWindow)
self.bouton.pack()
self.boutonquitter=tk.Button(self.root,text='Quit',font=("Helvetica", 10),command=self.Quitapp)
self.boutonquitter.pack()
self.root.mainloop()
def CreateNewWindow(self):
self.top = tk.Toplevel()
self.top.title("window")
self.lmain = tk.Label(self.top)
self.lmain.pack()
self.lmain.after(10, self.show_frame)
#CLOSE THE APP
def Quitapp(self):
self.root.destroy()
cv2.destroyAllWindows()
#DISPLAY FRAME IN A NEW WINDOW
def show_frame(self):
ret, frame = self.cam.read()
if ret is True:
cv2image = cv2.cvtColor(frame, cv2.COLOR_BGR2RGBA)
img = Image.fromarray(cv2image)
imgtk = ImageTk.PhotoImage(image=img)
self.lmain.imgtk = imgtk
self.lmain.configure(image=imgtk)
self.lmain.after(10, self.show_frame)
Gui()
Я прикрепил скриншоты, когда я запускаю скрипт в python и когда я запускаю .exe python exe