Tkinter按钮在exe文件中不起作用,但在脚本执行时起作用

2024-09-27 23:23:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我是这个论坛的新成员,我需要你的帮助。 我正在尝试创建一个GUI。当我用Python2.7运行这个文件时,我的程序运行得非常好,但是由于pyinstaller的帮助,当我创建一个exe文件时,其中一个按钮不能工作。在

我的程序非常简单:我在可用的摄像头列表中选择一个摄像头,点击“显示”按钮,所选摄像头的视频帧将显示在一个新窗口中,这要归功于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并卸载了python2.7来安装python3.6,但是我仍然有同样的问题。。。我的代码也更简单:

^{pr2}$

我已经附上了在python中运行脚本和运行.exe时的屏幕截图 pythonexe


Tags: selfdefcolumnrootcv2按钮exeframe

热门问题