微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

循环开始时 Tkinter GUI 冻结

如何解决循环开始时 Tkinter GUI 冻结

我在移动舞台并显示来自 CCD 的实时更新图像的同时从 CCD 获取数据。现场情节有效,但只要我按下开始按钮开始舞台,整个 GUI 就会冻结。我想在舞台移动时从 CCD 获取实时图像。任何帮助解决此问题将不胜感激。

循环的最少代码如下

    movepos = np.linspace(startpos,endpos,Np1)
    dm = movepos[1]-movepos[0]
    
    tic = time.time()
    act_pos = motor.position
    
    def start():
        global diffposvec
        motor.move_to(movepos[0])
        for count in range(0,Np1):
            movetopos = movepos[count]
            motor.move_to(movetopos)
            # while motor.is_in_motion: #having this while statement makes it stop before it moves again
            #     toc = time.time()
                
            # def live_spectrum2():
            global framer
            ax2.cla()
            framer= cammer.grab_image(timeout='1s',copy=True,n_frames=1,exposure_time='5ms',cx=420,left=200,cy=600,top=300)
            ax2.imshow(framer)
            canvas2.draw()
            canvas2.get_tk_widget().place(x=5,y=5)
            # fig_plot.after(50,live_spectrum2)
                    
            # fig_plot=tk.Frame(self)
            # tk.Frame(live_spectrum2()).pack()
                            
            framer = cammer.grab_image(timeout='1s',top=300)
            heighter = np.shape(framer)[0]
            widther = np.shape(framer)[1]
            framemat = np.zeros((heighter,widther,Np1))
            horzmat = np.zeros((Np1,widther))
            horzmat[count,:] = np.sum(framer[300:400,:],0)
            act_pos = motor.position
            diffpos = movetopos-act_pos
            diffposvec = []
            diffposvec = np.append(diffposvec,diffpos)
            if np.mod(count,10)==0:
                print('Step number %.0f' % (count+1),' of %.0f' % Np1,'  %.4f s' % (tic),'   %.3f um' % (act_pos*1000),'   %.3f um' % (movetopos*1000),'   %.3f nm' % (diffpos*1e6))
                
    start_btn=Button(self,text="START",font=(normalFont,'16'),height=36,borderless=5,foreground="#161327",background="#707087",command=lambda: start())
    start_btn.place(x=350,y=650)

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。