2016-01-30 9 views
0

Я хочу удалить конкретную Qwidget из QSplitter (или QSplitter с этим является лучшим выбором i вещи) после того, как я создаю 2-3 из них.Удалите определенный QWidget из QSplitter

Для этого мне нужно, чтобы я получил индекс каждого виджета, который я создаю.

Это мой код:

class Windows(self): 
    list1 = [widget1, widget2, widget3] 
    counter = 0 
    def __init__(self): 
    #A lot of stuff in here 

    self.splitter = QSplitter(Qt.Vertical) 

    self.spliiter_2 = QSplitter(Qt.Horizontal) 
    self.splitter_2.addwidget(self.splitter) 

    def addWidget(self): 
    if counter == 1: 
     self.splitter.addWidget(Windows.list1[0]) 
     counter += 1 

    if counter == 2: 
     counter += 1 
     self.splitter.addWidget(Windows.list1[1]) 

    if counter == 3: 
     self.splitter.addWidget(Windows.list1[2]) 
     counter += 1 


    def deleteWidget(self): 
    ?????????????? 

Как вы можете видеть выше, я создать QSplitter в классе Windows, а затем я создать еще один (self.splitter_2), где я положил первый.

Каждый раз, когда я нажимаю комбинацию клавиш, я вызываю метод addWidget и добавляет виджет (который зависит от счетчика переменных) из списка1.

Если я хочу удалить второй виджет (например), как я могу это сделать, не удаляя первый виджет ?. Я считаю, что мне нужен индекс, но я не знаю, как его получить.

Я создал кнопку, которая вызывает метод deleteWidget, между прочим.

Я читал о форме hide(), но я не знаю, как ее указать. Но я бы предпочел полностью удалить его.

Надеюсь, вы можете мне помочь.

+0

Возможный дубликат [Как удалить QWidgets из QSplitter] (http://stackoverflow.com/questions/371599/how-to-remove-qwidgets-from-qsplitter) – ahmed

+0

Спасибо за совет, но это не дубликат, потому что я прошу удалить «конкретный» виджет. Тот, который вы показываете (я видел это), удаляет весь виджет. –

+0

Сначала вам нужно получить виджет, указатель или поиск в дочерних, а затем скрыть его. – ahmed

ответ

1

Ваш deleteWidget() функция может выглядеть следующим образом:

def deleteWidget(self, index): 
    delete_me = self.splitter.widget(index) 
    delete_me.hide() 
    delete_me.deleteLater() 

Нам нужно hide(), потому что в соответствии с documentation

Когда вы скрываете() ребенка, его место будет распределено среди других дети.

+0

Спасибо за ваш ответ и извините за поздний ответ. Это сработало для меня. Еще раз спасибо. –