Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 27, 2016 12:38:11

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Pyqt лейауты

PyQt (не важно 4 или 5)
В общем имеется вертикальный бокс, для того, чтобы установить объект в окно виджета мы применяем setLayout(вертикальный бокс).
Все. Теперь у нас объект имеется в окне.
Вопрос, как “выгрузить\удалить\убрать\скрыть” этот вертикальный бокс с окна виджета?
Несколько пояснений по вопросу: помимо setLayout есть setLayoutDirection(), так вот, чтобы его убрать есть метод unsetLayoutDirection(), однако, к setLayout я такого не нашел, может быть кто знает, как решить проблему?
P.S.
Предлагать скрывать компоненты по одиночке с помощью метода hide() или удалять из контейнера объекты методами removeWidget() и removeItem() не стоит, это не совсем то, что нужно.

Отредактировано Lestoroer (Апрель 27, 2016 12:39:03)

Офлайн

#2 Апрель 27, 2016 18:51:30

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Pyqt лейауты

Ладно, тогда может быть кто-нибудь знает, как из компонента “сетка” все виджеты и итемы выкинуть ? В общем что нужно-то, метод какой-нибудь, который все компоненты в рабочем окне удалит разом (они у меня в сетке, поэтому вот надо придумать как из сетки выкинуть). Как-то надо очистить окно QWidget за один метод.

Отредактировано Lestoroer (Апрель 27, 2016 18:58:51)

Офлайн

#3 Апрель 28, 2016 12:41:08

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Pyqt лейауты

from PyQt4.Qt import *
def on_click():
    if btn.text() == 'Hide':
        w1.hide()
        btn.setText('Show')
    elif btn.text() == 'Show':
        w1.show()
        btn.setText('Hide')
        
app = QApplication([])
w = QWidget()
w1 = QWidget()
lbl1 = QLabel('lbl1')
lbl2 = QLabel('lbl2')
lbl3 = QLabel('lbl3')
lay1 = QVBoxLayout(w1)
lay1.addWidget(lbl1)
lay1.addWidget(lbl2)
lay1.addWidget(lbl3)
lay = QHBoxLayout(w)
btn = QPushButton('Hide')
btn.clicked.connect(on_click)
lay.addWidget(w1)
lay.addWidget(btn)
w.move(0,0)
w.show()
app.exec_()

Отредактировано vic57 (Апрель 28, 2016 12:48:23)

Офлайн

#4 Апрель 28, 2016 16:30:38

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Pyqt лейауты

Слушай, а создавать окно в которое вложен контейнер с окном неплохая тема, я еще подумаю над этим. . Я, кстати, решил проблему, правда не “одним кликом”, пришлось список составить, но все же. Создал список - вложил туда все элементы и прогнал их циклом фор с установкой setVisible(False) тоже неплохо, но на первый взгляд твой метод перспективнее, быстрее и удобнее

vic57

Отредактировано Lestoroer (Апрель 28, 2016 16:34:28)

Офлайн

#5 Апрель 29, 2016 17:39:35

vic57
Зарегистрирован: 2015-07-07
Сообщения: 913
Репутация: +  127  -
Профиль  

Pyqt лейауты

методы hide()/show() имеют все объекты, унаследованные от QWidget - GroupBox например. я им чаще пользуюсь

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version