Python 暂停for循环以等待按下按钮

Python 暂停for循环以等待按下按钮,python,for-loop,tkinter,Python,For Loop,Tkinter,我正在尝试构建一个图像分类器,需要手动为培训数据集分配分类,因此我在tkinter中构建了一个文件浏览器/媒体窗口应用程序,以显示图像并通过单击按钮为其分配分类。为了迭代文件,我使用for循环,但我需要它暂停并等待输入。这是我的密码: def setKnownData(self): training_sample = self.dataset.sample(frac = .1) print(training_sample)

我正在尝试构建一个图像分类器,需要手动为培训数据集分配分类,因此我在tkinter中构建了一个文件浏览器/媒体窗口应用程序,以显示图像并通过单击按钮为其分配分类。为了迭代文件,我使用for循环,但我需要它暂停并等待输入。这是我的密码:

def setKnownData(self):
    training_sample = self.dataset.sample(frac = .1)
    print(training_sample)                                                                                
    for i, row in training_sample.iterrows():                                              
        print(row)                                                                                
        global img                                                                                       
        file = Image.open(row['ID'])                                                            
        resized = file.resize((500,600))                                                            
        img = ImageTk.PhotoImage(resized)                                                  
        self.media_window.create_image(0,0, anchor = 'nw', image = img)                           
        self.event_var.get()                                                                    
        while True:                                              
            if self.event_var.get() == 0:                                                         
                print(self.event_var.get())                                                          
                return                                        
            if self.event_var.get() == 1:                                                      
                training_sample.loc[row]['class'] = 'cartoon'                                            
                break                                                                     
            elif self.event_var.get() ==2:                                                       
                training_sample.loc[row]['class'] = 'photo'                                   
                break
            self.event_var.set(0)
        
def stateSwitch(self, action):
    print('state switching....')
    if action == 'toon':
        print(self.event_var.get())
        self.event_var.set(1)
        print('classification: TOON', self.event_var.get())
    elif action == 'photo':
        self.event_var.set(2)
        print('classification: PHOTO')

我已经检查了IntVar、tkinter和for循环搜索的每个组合,但找不到可行的解决方案,所以如果这是一个重复的问题,我很抱歉。如何暂停循环,等待推杆按下,然后继续列表中的下一张图像?

您需要改变暂停循环的想法。这是过程编程,但GUI比“事件驱动编程”好得多,整个程序只是无休止地等待事件(如按下按钮)发生。这意味着除了tkinter主回路之外,没有回路。它意味着为每一个事件创建一个新功能

def setKnownData(self):
    training_sample = self.dataset.sample(frac = .1)
    print(training_sample)
    self.training_sample = training_sample.iterrows()

def on_button_click(self):                                                      
    i, row = next(self.training_sample)                            
    print(row)                                                                                
    global img                                                                                       
    file = Image.open(row['ID'])                                                            
    resized = file.resize((500,600))                                                            
    img = ImageTk.PhotoImage(resized)                                                  
    self.media_window.create_image(0,0, anchor = 'nw', image = img)                           
    self.event_var.get()                                                                    
    while True:                                              
        if self.event_var.get() == 0:                                                         
            print(self.event_var.get())                                                          
            return                                        
        if self.event_var.get() == 1:                                                      
            training_sample.loc[row]['class'] = 'cartoon'                                            
            break                                                                     
        elif self.event_var.get() ==2:                                                       
            training_sample.loc[row]['class'] = 'photo'                                   
            break
        self.event_var.set(0)