Wxpython пропускает вызов моей функции и переходит непосредственно к следующей строке. почему?

Моя функция SwapImage отлично работает в 5 областях моего скрипта, за исключением одной части.

Когда вызывается CompileImages, он начинает обработку изображений. Я хочу переключить изображение в строке до, которая вызывает функцию, но кажется, что интерфейс немедленно блокируется и не переключается.

Есть ли способ заставить его запустить функцию переключения изображения до того, как оно продолжит работу (и заблокируется)?

#the button I’m using…
genButton = wx.lib.buttons.GenButton(panel2, -1, label='Generate', pos=(8, 66), size=(136, 26))
genButton.Bind(wx.EVT_BUTTON, self.RunCompileFunction)

#… calls this function
def RunCompileFunction(self, event):

        self.SwapImage(image_fileprogress)
        self.CompileImages(self)

#this SwapImage function works at every other point EXCEPT in the above function, it seems to skip over it as if it has more important things to do.
#Curiously if I comment out the call to CompileImages function it DOES swap the image.
def SwapImage(self, imagename):
    self.bitmap1 = wx.StaticBitmap(panel1, -1, imagename, (0, 0))
    backgroundimage = imagename

#This function just starts processing images and causes the interface lockup
def CompileImages(self, event):

            if len(MyFrame.filenames) > 8 and len(MyFrame.maskfiles) <= 2:
        print("Ensure you've dropped your mask files too!")


    #myCursor = wx.StockCursor(wx.CURSOR_WAIT)
    #frame.SetCursor(myCursor)

    global coloralphareq
    global opacityalphareq

    # get first image size and save to variable
    getsize = Image.open(MyFrame.filenames[0])
    mwidth, mheight = getsize.size

    # get its .extension format
    # imgformat = str(x)[-3:]
    # imgformat = (str(MyFrame.filenames[0].format))
    # print(imgformat)

    # for each image in the list...
    for map in maptypes:

        # print(map)

        # files = any file with the current mapname in it
        files = [s for s in MyFrame.filenames if map in s]
        # print(files)

        if len(files) > 0:

            map = map[:-1]

            # remove names that are clashing
            if map == "Normal": self.RemoveFiles(files, "Normal_OpenGL.")
            if map == "Normal_OpenGL": self.RemoveFiles(files, "Normal.")
            if map == "AO": self.RemoveFiles(files, "Mixed_AO.")
            if map == "Metallic": self.RemoveFiles(files, "MetallicSmoothness.")
            if map == "MetallicSmoothness": self.RemoveFiles(files, "Metallic.")

            if len(files) > 0:
                # find mode, format, size

                # choose the background alphaColor
                if map == "Base_Color" or map == "BaseColor" or map == "Diffuse":
                    if self.coloralphareq == 1:
                        self.CompileTheseImagesRGBA(map, files, (0, 0, 0, 0), 'RGBA', 0, (0, 0, 0, 0), mwidth,
                                                    mheight)
                    elif self.coloralphareq == 0:
                        self.CompileTheseImagesRGB(map, files, (0, 0, 0))
                elif map == "Opacity":
                    if self.opacityalphareq == 1:
                        self.CompileTheseImagesRGBA(map, files, (0, 0, 0, 0), 'RGBA', 0, (0, 0, 0, 0), mwidth,
                                                    mheight)
                    elif self.opacityalphareq == 0:
                        self.CompileTheseImagesRGB(map, files, (256, 256, 256))
                elif map == "Normal_OpenGL" or map == "Normal":
                    self.CompileTheseImagesRGB(map, files, (128, 128, 255))
                elif map == "AlbedoTransparency" or map == "MetallicSmoothness" or map == "SpecularSmoothness":
                    self.CompileTheseImagesRGB(map, files, (0, 0, 0, 0))
                elif map == "Height":
                    self.CompileTheseImagesRGB(map, files, (128, 128, 128))
                elif map == "Roughness":
                    self.CompileTheseImagesRGB(map, files, (136, 136, 136))
                elif map == "Mixed_AO" or map == "Reflection" or map == "AO":
                    self.CompileTheseImagesRGB(map, files, (256, 256, 256))
                elif map == "Glossiness" or map == "f0" or map == "ior":
                    self.CompileTheseImagesRGB(map, files, (187, 187, 187))
                else:
                    self.CompileTheseImagesRGBA(map, files, (0, 0, 0, 0), 'RGBA', 0, (0, 0, 0, 0), mwidth, mheight)

Можете еще и CompileTheseImagesRGB показать?

all or None 10.09.2018 07:34

Обратите внимание, что строка backgroundimage = imagename ничего не делает (если только backgroundimage не имеет глобальной области видимости).

all or None 10.09.2018 07:35

@ 101 Я отредактировал, чтобы включить функцию CompileImages (которую я случайно назвал CompileTheseImagesRGB (только здесь, а не в исходном скрипте). Вы правы насчет фонового изображения - это для другой цели.

JackNapier 10.09.2018 09:28

@ 101 для пояснения - CompileImages - это функция, которая затем запускает другую функцию, которая, в свою очередь, запускает открытие и вставку изображений друг в друга с использованием PIL. Проблема вовсе не в этих функциях, а в том, что они блокируют интерфейс во время выполнения своей работы. Могу ли я использовать временную задержку, чтобы убедиться, что строка SwapImages выполняется на 100% до того, как будет выполнена следующая строка?

JackNapier 10.09.2018 09:30

Я вижу пару потенциальных проблем. Вы вызываете self.SwapImage(image_fileprogress), но image_fileprogress, похоже, не определен. SwapImage ожидает аргумента imagename. Убедитесь, что аргумент, который вы действительно передаете, верен. Вы вызываете self.CompileImages(self), но функция ожидает аргумент event, а не self (self автоматически передается методам экземпляра).

all or None 11.09.2018 02:03
0
5
26
0

Другие вопросы по теме