Невозможно добавить флажок в графический интерфейс wxpython во время выполнения

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

Я попытался выполнить сообщение ‹ Добавить флажок в wxPython во время выполнения >, но так и не смог заставить его работать. Я также использовал wxFormBuilder, чтобы посмотреть, как он добавляет флажок во время инициализации; Я смог убедиться, что self.mainWindow.p_SelectionPanel — это место, где я хочу добавить флажок. Я также проверил с помощью отладчика, чтобы убедиться, что каждая строка кода выполняется хотя бы один раз.

Немного подробнее о приложении: это графический интерфейс wxPython со встроенным в него графиком matplotlib. Я пытаюсь сгенерировать флажки из входящего потока последовательного порта, чтобы пользователь мог показывать/скрывать серию во время выполнения. точка — это словарь с ключом в качестве имени серии и значением серии в качестве значения словаря.

Пожалуйста, дайте мне знать, если вам нужно больше контекста.

Заранее спасибо за помощь.

 def addNewCheckBoxes(self,point):
        sizer = self.mainWindow.p_SelectionPanel.GetSizer()
        addedCheckBox = False

        for key in point.keys():
            if key not in self.cbList.keys():
                self.cbList[key] = wx.CheckBox(self.mainWindow.p_SelectionPanel)
                sizer.Add(self.cbList[key])
                addedCheckBox = True

        if addedCheckBox:
            self.mainWindow.p_SelectionPanel.SetSizer(sizer)
            self.mainWindow.p_SelectionPanel.Layout()

person apandit    schedule 06.01.2015    source источник
comment
вызовите Layout в mainWindow, так как его размер мог измениться   -  person stark    schedule 07.01.2015
comment
Спасибо за предложение Старк! Я пробовал это, но флажок не отображается в графическом интерфейсе. Я думаю, проблема может заключаться в том, что я использую два потока: основной поток и поток для управления последовательным поиском/обновлением данных. Буду разбираться дальше...   -  person apandit    schedule 09.01.2015
comment
Не уверен насчет wx, но в tk все операции с графическим интерфейсом должны быть в одном потоке. Вообще нет причин делать GUI многопоточным.   -  person stark    schedule 09.01.2015


Ответы (1)


Эта проблема вызвана использованием нескольких потоков; см. комментарии выше. Мне удалось «передать» добавление флажков в основной поток, используя описанные здесь методы: ‹ Обмен данными между потоками в Python >.

Тем не менее, здесь предлагается лучший, потокобезопасный способ структурировать мою программу: ">WxPython: периодически устанавливаемое значение в TextCtrl не работает >. Существует также способ, который также позволяет избежать использования нескольких потоков.

person apandit    schedule 11.01.2015