Python 暂停for循环以等待按下按钮
我正在尝试构建一个图像分类器,需要手动为培训数据集分配分类,因此我在tkinter中构建了一个文件浏览器/媒体窗口应用程序,以显示图像并通过单击按钮为其分配分类。为了迭代文件,我使用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)
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)