Испытывал ли кто-нибудь из вас временную задержку при запуске программы на Python? Мое приложение предполагает одновременное отображение звукового эффекта и изображения сразу после нажатия кнопки. Но иногда после того, как я нажал кнопку, сразу же воспроизводится только звук, а изображение не отображается, и мне нужно провести пальцем в другое окно (я использую Mac) и снова повернуть окно программы, затем изображение показывает . Итак, очевидно, что есть проблема с задержкой во времени. Но время от времени это случается. Я не уверен, что не так в моем коде.
Вот мой код (я сокращаю исходный код, чтобы поместить его сюда):
self.choiceA = self.master.bind('a', self.run1)
self.choiceB = self.master.bind('l', self.run2)
def run1(self, event=None):
self.draw_confirmation_button1()
t = Timer(1, self.run1_s2)
t.start()
def run1_s2(self):
self.clickPreProcess(False)
def run2(self, event=None):
self.draw_confirmation_button2()
t = Timer(1, self.run2_s2)
t.start()
def run2_s2(self):
self.clickPreProcess(True)
def clickPreProcess(self, human_choice):
self.showResult()
def showResult(self):
#show sounds#
if self.value < 0:
pygame.mixer.init()
pygame.mixer.music.load("/Users/kezhang/Desktop/cues/sounds/loss/Trimed/2_matched.wav")
pygame.mixer.music.play()
elif self.value > 0:
pygame.mixer.init()
pygame.mixer.music.load("/Users/kezhang/Desktop/cues/sounds/wins/coin2_matched.wav")
pygame.mixer.music.play()
else:
None
#show images#
if 1<=self.value<6:
imgFile = Image.open('/Users/kezhang/Desktop/cues/images/c1_rs.png')
self.imDisplay = ImageTk.PhotoImage(imgFile)
self.image = self.w.create_image(653, 384, image=self.imDisplay, anchor='center')
#self.coin1 = Label(self.w, image=imgFile)
if 6<=self.value<12:
imgFile = Image.open('/Users/kezhang/Desktop/cues/images/c2_rs.png')
self.imDisplay = ImageTk.PhotoImage(imgFile)
self.image = self.w.create_image(653, 384, image=self.imDisplay, anchor='center')
#self.coin2 = Label(self.w, image=imgFile)
if 12<=self.value<18:
imgFile = Image.open('/Users/kezhang/Desktop/cues/images/c3_rs.png')
self.imDisplay = ImageTk.PhotoImage(imgFile)
self.image = self.w.create_image(653, 384, image=self.imDisplay, anchor='center')
#self.coin3 = Label(self.w, image=imgFile)
if 18<=self.value<24:
imgFile = Image.open('/Users/kezhang/Desktop/cues/images/c4_rs.png')
self.imDisplay = ImageTk.PhotoImage(imgFile)
self.image = self.w.create_image(653, 384, image=self.imDisplay, anchor='center')
#self.coin4 = Label(self.w, image=imgFile)
if 24<=self.value<=30:
imgFile = Image.open('/Users/kezhang/Desktop/cues/images/c5_rs.png')
self.imDisplay = ImageTk.PhotoImage(imgFile)
self.image = self.w.create_image(653, 384, image=self.imDisplay, anchor='center')
#self.coin5 = Label(self.w, image=imgFile)
if -1>=self.value>-6:
imgFile = Image.open('/Users/kezhang/Desktop/cues/images/c1_loss_rs.png')
self.imDisplay = ImageTk.PhotoImage(imgFile)
self.image = self.w.create_image(653, 384, image=self.imDisplay, anchor='center')
if -6>=self.value>-12:
imgFile = Image.open('/Users/kezhang/Desktop/cues/images/c2_loss_rs.png')
self.imDisplay = ImageTk.PhotoImage(imgFile)
self.image = self.w.create_image(653, 384, image=self.imDisplay, anchor='center')
if -12>=self.value>-18:
imgFile = Image.open('/Users/kezhang/Desktop/cues/images/c3_loss_rs.png')
self.imDisplay = ImageTk.PhotoImage(imgFile)
self.image = self.w.create_image(653, 384, image=self.imDisplay, anchor='center')
if -18>=self.value>-24:
imgFile = Image.open('/Users/kezhang/Desktop/cues/images/c4_loss_rs.png')
self.imDisplay = ImageTk.PhotoImage(imgFile)
self.image = self.w.create_image(653, 384, image=self.imDisplay, anchor='center')
if -24>=self.value>=-30:
imgFile = Image.open('/Users/kezhang/Desktop/cues/images/c5_loss_rs.png')
self.imDisplay = ImageTk.PhotoImage(imgFile)
self.image = self.w.create_image(653, 384, image=self.imDisplay, anchor='center')
Я использовал множество функций IF / ELSE, чтобы определить, какое изображение и звук должны отображаться при определенных условиях. Может быть, это причина задержки во времени? Очень признателен за вашу помощь!
Спасибо!
if
. Даже если обнаружено условиеTrue
, напримерif -1>=self.value>-6:
вы продолжите тестировать другие условия, которые не могут бытьTrue
. Это неэффективно, используйтеif/elif
. Я не уверен, достаточно ли этого, чтобы вызвать задержку. - person roganjosh   schedule 09.02.2017if
проверки в основном делают одно и то же, но просто загружают немного другой файл. Все это можно сжать. Также подумайте, можете ли вы использовать словарь для сопоставления этих вещей. - person roganjosh   schedule 09.02.2017def showResult(self)
. Еще один уточняющий вопрос. Поскольку мне нужно очистить изображения / звук через 2 секунды и обновить новый вопрос, на который пользователи должны ответить, я написалdef clearResult(self): self.w.itemconfigure(self.image, state='hidden') self.displayQuestion()
. Но иногда программа не может показать новый вопрос и четкое изображение (застревает на экране с задержкой по времени). Я не уверен, почему он задерживается, и почему он задерживается (например, выглядит случайным?). Не могли бы вы помочь мне? Действительно ценю это! - person key   schedule 10.02.2017