Форум сайта python.su
Имеется PyQt4 приложение. Хочу, чтобы при расширении все элементы интерфейса тоже расширялись.
Собственно выглядит все так (надеюсь рофляночек по поводу названий узлов не будет):
Текущий код выглядит так:
Левый нижний блок с кнопками:
left_column_buttons_layout = QHBoxLayout(self) left_column_buttons_layout.addWidget(self.ui.select_all_nodes) left_column_buttons_layout.addWidget(self.ui.clear_all_nodes) left_column_buttons_layout.addWidget(self.ui.add_node) left_column_buttons_layout.addWidget(self.ui.remove_nodes)
left_column_layout = QVBoxLayout(self) left_column_layout.addWidget(self.ui.search_line) left_column_layout.addWidget(self.ui.nodes_list) left_column_layout.addLayout(left_column_buttons_layout)
middle_top_buttons = QHBoxLayout(self) middle_top_buttons.addWidget(self.ui.select_all) middle_top_buttons.addWidget(self.ui.clear_all) middle_top_buttons.addWidget(self.ui.add_variant) middle_top_buttons.addWidget(self.ui.remove_variant) middle_top_buttons.addWidget(self.ui.delete_variant)
middle_generate_buttons_layout = QHBoxLayout(self) middle_generate_buttons_layout.addWidget(self.ui.generate) middle_generate_buttons_layout.addWidget(self.ui.count_results) middle_generate_buttons_layout.addWidget(self.ui.label) middle_generate_buttons_layout.addWidget(self.ui.to_clipboard)
middle_column_layout = QVBoxLayout() middle_column_layout.addLayout(middle_top_buttons) middle_column_layout.addWidget(self.ui.variants_list) middle_column_layout.addLayout(middle_generate_buttons_layout) middle_column_layout.addWidget(self.ui.text_output)
layout = QHBoxLayout(self) layout.addLayout(left_column_layout) layout.addLayout(middle_column_layout) layout.addWidget(self.ui.title_tree)
Отредактировано Razor (Апрель 17, 2016 01:24:31)
Офлайн
я определял виджет, а в нем собственный layout
box = QGroupBox() grid = QGridLayout(box) grid.addWidget(............ box1 = QGroupBox() grid1 = QGridLayout(box1) grid1.addWidget............ w = QWidget() maingrid = QGridLayout(w) maingrid.addWidget(0,0,box) maingrid.addWidget(0,1,box1)
Отредактировано vic57 (Апрель 17, 2016 08:48:59)
Офлайн
vic57
и у вас ошибка же идет - layout уже есть
ver_layout = QVBoxLayout(self) ver_layout.addWidget(self.ui.label) ver_layout.addWidget(self.ui.values_list) ver_layout.addWidget(self.ui.replace_in) ver_layout.addWidget(self.ui.replace_out)
hor_checkbox_layout = QHBoxLayout(self) hor_checkbox_layout.setContentsMargins(0, 15, 0, 0) # left, top, right, bottom hor_checkbox_layout.addWidget(self.ui.match_case) hor_checkbox_layout.addWidget(self.ui.regexp_enable) hor_checkbox_layout.addWidget(self.ui.one_word) hor_checkbox_layout.addWidget(self.ui.only_selected_node)
hor_buttons_layout = QHBoxLayout(self) hor_buttons_layout.setContentsMargins(0, 15, 0, 0) hor_buttons_layout.addWidget(self.ui.replace) hor_buttons_layout.addWidget(self.ui.replace_all) hor_buttons_layout.addWidget(self.ui.replace_selected) hor_buttons_layout.addWidget(self.ui.exclude)
ver_layout.addLayout(hor_checkbox_layout) ver_layout.addLayout(hor_buttons_layout)
Отредактировано Razor (Апрель 17, 2016 11:58:56)
Офлайн
QSizePolicy может быть?
http://230100.msiu.ru/files/49355-qt_basics.html#менеджеры-размещения
ИМХО родительский лэйаут должен быть один (parent=self), для вложенных self определять не надо (parent=None) вроде по дефолту
Сначала создаётся родительский виджет. Потом дочерние виджеты (нет необходимости указывать выстраивать родственные отношения между родителем и детьми во время конструирования). Далее создаётся экземпляр менеджера размещения, дочерние виджеты помещаются в него как в контейнер. На последнем этапе менеджер размещения устанавливается в родительский виджет с помощью метода setLayout(). Некоторые менеджеры размещения так же могут быть вложены друг в друга; тогда вложенный менеджер трактуется обрамляющим менеджером как обычный виджет, хотя экземпляры QLayout не являются виджетами как таковые.
#!/usr/bin/env python #-*-coding:utf8-*- from PyQt4.Qt import * class W(QWidget): def __init__(self): QWidget.__init__(self) self.btn1 = QPushButton('Click') self.lbl1= QLabel('Label') self.lay1 = QHBoxLayout() self.lay1.setMargin(0) self.lay1.addWidget(self.lbl1) self.lay1.addWidget(self.btn1) self.btn = QPushButton('Press') self.edit = QPlainTextEdit() self.lay = QVBoxLayout(self) #parent layout self.lay.setMargin(0) self.lay.addLayout(self.lay1) self.lay.addWidget(self.edit) self.lay.addWidget(self.btn) app = QApplication([]) w = W() w.edit.insertPlainText('Hello !') w.move(0,0) w.show() app.exec_()
Отредактировано vic57 (Апрель 18, 2016 13:16:40)
Офлайн