задержка времени / задержка python при использовании pygame

Испытывал ли кто-нибудь из вас временную задержку при запуске программы на 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, чтобы определить, какое изображение и звук должны отображаться при определенных условиях. Может быть, это причина задержки во времени? Очень признателен за вашу помощь!

Спасибо!


person key    schedule 09.02.2017    source источник
comment
В настоящее время оцениваются все операторы if. Даже если обнаружено условие True, например if -1>=self.value>-6: вы продолжите тестировать другие условия, которые не могут быть True. Это неэффективно, используйте if/elif. Я не уверен, достаточно ли этого, чтобы вызвать задержку.   -  person roganjosh    schedule 09.02.2017
comment
Кроме того, вы должны использовать здесь подход DRY и избавиться от всех повторений. Все эти if проверки в основном делают одно и то же, но просто загружают немного другой файл. Все это можно сжать. Также подумайте, можете ли вы использовать словарь для сопоставления этих вещей.   -  person roganjosh    schedule 09.02.2017
comment
Предварительно загрузите свои изображения и звуковые файлы. Вы действительно не хотите ждать, чтобы прочитать с диска нажатием кнопки.   -  person cmd    schedule 09.02.2017
comment
Спасибо за вашу помощь! Я предварительно загружаю изображения и звуки в init и получаю соответствующее изображение / звук в def showResult(self). Еще один уточняющий вопрос. Поскольку мне нужно очистить изображения / звук через 2 секунды и обновить новый вопрос, на который пользователи должны ответить, я написал def clearResult(self): self.w.itemconfigure(self.image, state='hidden') self.displayQuestion(). Но иногда программа не может показать новый вопрос и четкое изображение (застревает на экране с задержкой по времени). Я не уверен, почему он задерживается, и почему он задерживается (например, выглядит случайным?). Не могли бы вы помочь мне? Действительно ценю это!   -  person key    schedule 10.02.2017