Границы wx.Panel не уничтожаются методом Destroy () - PullRequest
0 голосов
/ 05 мая 2011

Так что я начал использовать wx для генерации моего GUI. Я создал пользовательскую таблицу, используя FlexGridSizer, и затем я хотел очистить таблицу, когда я нажимаю кнопку. Итак, мой метод:

def clearPressed(self,event):
    self.label_ID.Destroy()
    self.label_NAME.Destroy()
    self.label_ADMIN.Destroy()
    self.label_SELECTED.Destroy()
    self.label_OPERATION.Destroy()
    self.label_STRUCTURE.Destroy()
    i = 0
    while i < self.nrEntries:
        self.idsGUI[i].Destroy()
        self.pidsGUI[i].Destroy()
        self.aidsGUI[i].Destroy()
        self.sidsGUI[i].Destroy()
        self.nidsGUI[i].Destroy()
        self.stidsGUI[i].Destroy()
        i = i + 1
    self.clearBut.Destroy()
    self.tableTitleLabel.Destroy()
    self.tableGrid.Layout() 

Это в основном все компоненты, которые есть у меня в таблице. Этот метод прекрасно работает для радиобутонов кнопок StaticText. Но это не дает мне взглянуть на стол. Поэтому я немного погуглил и обнаружил, что вы не можете нарисовать границы сетки. Таким образом, я добавил панель в каждой ячейке сетки, поверх которой я рисую компоненты своей таблицы. Таблица выглядит лучше, но теперь метод уничтожения не очищает границы панелей.

Я создаю свои компоненты так:

        panel = wx.Panel(self, -1, style=wx.BORDER_SIMPLE)
        wx.RadioButton(panel,-1,self.sids[i])
        self.sidsGUI.append(panel)

Метод clearPressed теперь уничтожает все компоненты и даже часть границ, но не все. Моя основная структура графического интерфейса выглядит следующим образом:

Frame-> MainFlexGridSizer-> OneVerticalBoxSizer (это содержит некоторые другие кнопки и вещи, которые я не хочу удалять) -------------------------------------> TableArrangementFlexGridSizer-> VetricalBoxSizer (содержит заголовок таблицы и некоторую информацию) -------------------------------------------------- ---------------------------------> TableFlexGrid (содержит фактические панели для таблицы, границы которой не исчезают при уничтожении) -------------------------------------------------- ---------------------------------> VerticalBoxSizer (некоторые другие кнопки нижнего колонтитула и информация)

С уважением, Богдан

Ответы [ 2 ]

1 голос
/ 05 мая 2011

Это кажется очень сложным подходом. Вы смотрели на использование wxGrid? Вы можете потерять немного гибкости, но вы избавите себя от необходимости писать огромное количество кода, чтобы заботиться о рутинных задачах управления сеткой, таких как эта.

0 голосов
/ 05 мая 2011

Что вы имеете в виду, когда говорите: «Метод clearPressed теперь уничтожает все компоненты и даже часть границ, но не все из них»?Означает ли это, что вы видите некоторые артефакты на кадре после уничтожения всех компонентов?Если это так, попробуйте вызвать метод Refresh () вашего верхнего фрейма после метода clearPressed.Этот метод перерисовывает фрейм и все его дочерние элементы.

...