2017-02-22 11 views
0

Я новичок в Python и wxpython. Я попытался написать код, в котором мне нужно создать флажки на основе пользовательского ввода Combobox. Я могу это сделать. Но когда я меняю выбор, старые флажки все еще существуют, и я не могу найти способ их уничтожить или обновить. Любая помощь будет высоко оценен. Вот мой код:Удаление динамически созданных флажков в wxpython

import wx 
class Form1(wx.Panel): 
    def __init__(self, parent): 
     wx.Panel.__init__(self, parent) 
     wx.EVT_COMBOBOX(self, 30, self.EvtComboBox) 
     self.lblhear = wx.StaticText(self,-1,"APPLICATION",wx.Point(30, 295)) 
     self.lblhear3 = wx.StaticText(self, -1, "TASKS TO BE DONE", wx.Point(30, 370)) 
     self.sampleList = ['ABC', 'PQR'] 
     self.edithear=wx.ComboBox(self, 30, "", 
      wx.Point(110, 290), wx.Size(95, -1), 
      self.sampleList, wx.CB_DROPDOWN) 
     self.Bind(wx.EVT_COMBOBOX, self.AppSelect, self.edithear) 
    def AppSelect(self, event): 
     if event.GetString() == "ABC": 
      self.Application = 'ABC' 
      self.cb_list = [] 
      act_list = ['Task1','Task2'] 
     elif event.GetString() == "PQR": 
      self.Application = 'PQR' 
      self.cb_list = [] 
      act_list = ['Task3','Task4'] 
     pos_y = 380 
     id_cb = 100 
     for i in act_list: 
      pos_y += 20 
      id_cb += 20 
      self.cb = wx.CheckBox(self, id_cb, label=i, pos=(50, pos_y)) 
      self.cb.SetValue(False) 
      self.cb_list.append(self.cb) 
    def EvtComboBox(self, event): 
     if event.GetId() == 30: 
      self.Application = self.event.GetString() 
app = wx.PySimpleApp() 
frame = wx.Frame(None, size=(1200,800)) 
Form1(frame) 
frame.Show(1) 
app.MainLoop() 
+0

Я подозреваю, что ваш код не доходит до места, где вы создаете CheckBoxes. Попробуйте просмотреть выход программы и устранить ошибки один за другим. Тогда мы можем продолжить. Кроме того, у вас есть больше шансов получить ответ, если вы разместите минимальный пример своего кода. –

+0

Привет, Петр, Спасибо, что посмотрели в код. Но я не уверен, что вы имели в виду, «не доходя до места, где вы создаете CB». Я могу создать CB, но не могу удалить или уничтожить старые. Я отредактировал сценарий, как вы предложили. – Surjith

+0

Можете ли вы предоставить [mcve]? Возможно, вы забудете перерисовать рамку после удаления флажка –

ответ

1

Вы можете уничтожить существующий флажок виджеты, вызвав их метод Destroy. Возможно, что-то вроде этого:

for cb in self.cb_list: 
    cb.Destroy() 
+0

Привет, Робин, спасибо, что заглянул в мой код. Я пробовал ваше предложение раньше, но безрезультатно. Проблема в том, что когда я перемещаю курсор над CheckBoxes, старое значение становится видимым. – Surjith

+0

Surjith, если я добавлю именно эти строки вверху вашего AppSelect, а также self.cb_list = [] где-нибудь в costructor, он работает. –

+0

В отношении несвязанной ноты, если можно предложить, загляните в sizers в будущем. Абсолютное позиционирование виджетов работает, но когда вы сталкиваетесь с разными настройками размера DPI или размера шрифта, все может показаться странным. Например, в моей настройке я вижу только APPLICATIO, N попадает в поле со списком. –