Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/34: Рейтинг темы: голосов - 34, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 10.03.2011
Сообщений: 27

Pyqt5 или Pyqt4 как работать с QHBoxLayout и QVBoxLayout

07.02.2016, 15:08. Показов 7416. Ответов 5
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Подскажите как правильно с ними работать,
Python
1
QHBoxLayout  QVBoxLayout
потому что везде советуют использовать именно слои а не передвижения типа
Python
1
move()
но как в мануале так и в ответах на вопросы, делают самый простой пример из которого нечего не понятно.

Например как поделить окно на 2 слоя, левый и правый и для наглядности дать им разные цвета, чтобы было видно визуально.

Или возможно ли по примеру макета сайта сделать так

Шапка
2 колонки, первая меню 200px , второй слой всю остальную ширину
И подвал. и тоже с разными цветами.

Возможно такое сделать ? , можно без всяких вписываний туда элементов
Python
1
addWidget
, это и так понятно, а вот как управлять слоями непонятно и сами их настройки тоже
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.02.2016, 15:08
Ответы с готовыми решениями:

QHBoxLayout внутри QVBoxLayout убрать растяжение
Заранее прошу прощения, если данная тема уже поднималась на форуме. Если я упустил данную тему, то пожалуйста киньте линк. Задача: ...

Обращение к отдельным Stretch в QVBoxLayout/QHBoxLayout
Коллеги, совсем новичок. Надеюсь на Ваши подсказки. Итак, импортировал всё, что необходимо: import sys from PyQt5 import QtWidgets ...

Переписать код с PyQt4 на PyQt5
Добрый день, форумчане! Только-только начал учить PyQt5, но тут столкнулся с проблемой: модуль, который мне очень нужен (взял из этой...

5
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
07.02.2016, 15:22
Цитата Сообщение от kvins1 Посмотреть сообщение
Например как поделить окно на 2 слоя, левый и правый и для наглядности дать им разные цвета, чтобы было видно визуально.
Делают не 2 layout, а добавляют 2 разных виджета в 1 QHBoxLayout. Вообще все всегда по разному делается, по этому покажи, что сделать хочешь и с помощью каких виджетов, тогда и поговорим.
0
0 / 0 / 0
Регистрация: 10.03.2011
Сообщений: 27
07.02.2016, 19:30  [ТС]
Например хочу сделать, вверху шапку в виде фото на весь экран с высотой в 200px
Левая колонка список контактов.
Справа по нажатию на левый список, отдается информация.
Потом внизу подвал с копирайтами и контактами.

Такое подобие шаблона сайта.

Добавлено через 3 часа 51 минуту
PS: мне не обязательно как я написал выше, я просто хочу понять как распоряжатся слоями, больше 1 и их расстановкой.

Есть у кого нить пример, 2-ный 3-4-но слойных приложений, или все всегда используют 1 слой и внутри него работают ??
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
07.02.2016, 20:56
Цитата Сообщение от kvins1 Посмотреть сообщение
или все всегда используют 1 слой и внутри него работают
В простых случаях да, когда сложный шаблон, то есть куча вложенных виджетов имеющих свои layout.
Цитата Сообщение от kvins1 Посмотреть сообщение
Есть у кого нить пример, 2-ный 3-4-но слойных приложений
Вот пример
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
import random
 
from PyQt4 import QtCore, QtGui
 
 
class ConfigProgram(QtGui.QWidget):
    """
    Окно настроек программы
    """
    def __init__(self, parent=None):
        super().__init__(parent)
 
        self.section1 = Section(self)
        self.section2 = Section(self)
 
        # атрибуты куда будут помещены создаваемые виджеты
        self.stack = None
 
        self.build_widget()
 
    def build_widget(self):
        self.setWindowTitle('Настройки')
 
        # Виджет в котором мы выбираем раздел настроек
        tree = QtGui.QTreeWidget()
        tree.setIconSize(QtCore.QSize(24, 24))
        tree.setMaximumWidth(200)
        tree.setMinimumHeight(200)
        tree.setHeaderHidden(True)
 
        item_account = QtGui.QTreeWidgetItem(tree, ['Раздел 1'])
        item_general = QtGui.QTreeWidgetItem(tree, ['Раздел 2'])
        self.connect(tree, QtCore.SIGNAL('itemClicked(QTreeWidgetItem*, int)'),
                     self.select_item)
 
        # Этот виджет показывает только один из добавленных в него виджетов
        self.stack = QtGui.QStackedWidget()
        self.stack.addWidget(self.section1)
        self.stack.addWidget(self.section2)
 
        button_panel = self.create_button_panel()
 
        main_layout = QtGui.QGridLayout()  # Главный компановщик элементов окна
        main_layout.addWidget(tree, 0, 0)
        main_layout.addWidget(self.stack, 0, 1)
        main_layout.addWidget(button_panel, 1, 1)
 
        self.setLayout(main_layout)
 
    def create_button_panel(self):
        """
        Создает виджет, в котором размещается кнопка выхода
        """
        button_panel = QtGui.QWidget()
        button_panel.setContentsMargins(0, 0, 0, 0)
 
        layout = QtGui.QHBoxLayout()
        layout.addStretch(1)
        layout.setContentsMargins(0, 0, 0, 0)
 
        button_close = QtGui.QPushButton('Закрыть')
        button_close.clicked.connect(self.close)
        layout.addWidget(button_close)
        button_panel.setLayout(layout)
        return button_panel
 
    def select_item(self, item, column):
        """
        Запускается при выборе какого либо пункта QTreeWidget
        """
        if item.text(column) == 'Аккаунт':
            self.stack.setCurrentWidget(self.section1)
        else:
            self.stack.setCurrentWidget(self.section2)
 
 
class Section(QtGui.QWidget):
    def __init__(self, parent=None):
        super(Section, self).__init__(parent)
 
        self.line_edit = []
        self.build_widget()
 
    def build_widget(self):
        form = QtGui.QFormLayout()
 
        for i in range(random.randint(2, 10)):
            line_edit = QtGui.QLineEdit()
            form.addRow('Поле {}'.format(i), line_edit)
 
        self.setLayout(form)
 
app = QtGui.QApplication([])
window = ConfigProgram()
window.show()
app.exec_()
P.S
Цитата Сообщение от kvins1 Посмотреть сообщение
слоями
Слово layout с натяжкой можно перевести как слой и тем более в данном контексте. Более близкий по смыслу перевод это "макет".
1
0 / 0 / 0
Регистрация: 10.03.2011
Сообщений: 27
07.02.2016, 21:14  [ТС]
Спс за пример, тока жаль он на 4 версии, я думал ты что то простое скинешь, квадратики макетов,а там бы я уже с ними учился создавать чето новое, а переделать под 5-ую не получается, попробую разобратся.

Добавлено через 5 минут
Я кстати почти перевел ваш код на 5 версию, тока не знаю как этот кусок

self.connect(tree, SIGNAL('itemClicked(QTreeWidgetItem*, int)'),
self.select_item)

перевести чтобы работалов 5-ке, без нее все работает, но как раз она данные передает_)

Добавлено через 36 секунд
Python
1
2
3
  File "C:\Python34\test\del2.py", line 38, in build_widget
    self.connect(tree.clicked.connect('itemClicked(QTreeWidgetItem*, int)'),
AttributeError: 'ConfigProgram' object has no attribute 'connect'
0
2742 / 2341 / 620
Регистрация: 19.03.2012
Сообщений: 8,830
07.02.2016, 21:28
Все правится очень просто, там править то нечего
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
import random
 
from PyQt5 import QtCore, QtWidgets
 
 
class ConfigProgram(QtWidgets.QWidget):
    """
    Окно настроек программы
    """
    def __init__(self, parent=None):
        super().__init__(parent)
 
        self.section1 = Section(self)
        self.section2 = Section(self)
 
        # атрибуты куда будут помещены создаваемые виджеты
        self.stack = None
 
        self.build_widget()
 
    def build_widget(self):
        self.setWindowTitle('Настройки')
 
        # Виджет в котором мы выбираем раздел настроек
        tree = QtWidgets.QTreeWidget()
        tree.setIconSize(QtCore.QSize(24, 24))
        tree.setMaximumWidth(200)
        tree.setMinimumHeight(200)
        tree.setHeaderHidden(True)
 
        item_account = QtWidgets.QTreeWidgetItem(tree, ['Раздел 1'])
        item_general = QtWidgets.QTreeWidgetItem(tree, ['Раздел 2'])
        tree.itemClicked.connect(self.select_item)
 
        # Этот виджет показывает только один из добавленных в него виджетов
        self.stack = QtWidgets.QStackedWidget()
        self.stack.addWidget(self.section1)
        self.stack.addWidget(self.section2)
 
        button_panel = self.create_button_panel()
 
        main_layout = QtWidgets.QGridLayout()  # Главный компановщик элементов окна
        main_layout.addWidget(tree, 0, 0)
        main_layout.addWidget(self.stack, 0, 1)
        main_layout.addWidget(button_panel, 1, 1)
 
        self.setLayout(main_layout)
 
    def create_button_panel(self):
        """
        Создает виджет, в котором размещается кнопка выхода
        """
        button_panel = QtWidgets.QWidget()
        button_panel.setContentsMargins(0, 0, 0, 0)
 
        layout = QtWidgets.QHBoxLayout()
        layout.addStretch(1)
        layout.setContentsMargins(0, 0, 0, 0)
 
        button_close = QtWidgets.QPushButton('Закрыть')
        button_close.clicked.connect(self.close)
        layout.addWidget(button_close)
        button_panel.setLayout(layout)
        return button_panel
 
    def select_item(self, item, column):
        """
        Запускается при выборе какого либо пункта QTreeWidget
        """
        if item.text(column) == 'Раздел 1':
            self.stack.setCurrentWidget(self.section1)
        else:
            self.stack.setCurrentWidget(self.section2)
 
 
class Section(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super(Section, self).__init__(parent)
 
        self.line_edit = []
        self.build_widget()
 
    def build_widget(self):
        form = QtWidgets.QFormLayout()
 
        for i in range(random.randint(2, 10)):
            line_edit = QtWidgets.QLineEdit()
            form.addRow('Поле {}'.format(i), line_edit)
 
        self.setLayout(form)
 
app = QtWidgets.QApplication([])
window = ConfigProgram()
window.show()
app.exec_()
Цитата Сообщение от kvins1 Посмотреть сообщение
я думал ты что то простое скинешь, квадратики макетов
Сейчас ерундой некогда было маяться. Это пример одного из моих проектов, только всякие сложности и подробности выкинуты, а оставлена общая идея создания раздела настроек, ну и есть пример использования layout.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.02.2016, 21:28
Помогаю со студенческими работами здесь

Добавление QComboBox в QTableWidget или QVBoxLayout в QGridLayout
Привет! Мне нужно добавить QComboBox в QTableWidget. Однако, как я поняла QTableWidget такой тип не принимает и привидение типов мне не...

Как установить PyQt5 или 5 кругов ада
Добрый день! Помогите, пожалуйста, установить PyQt5. При попытке запустить простейшую программу вылезает ошибка (скрин прикрепляю). Не могу...

Как может сервер-сайд код работать или не работать на конкретном компе?
Всем привет! Вот такая проблема. Есть сайт, все работает ок, но - один из компов имеющий Win98 и IE6.0 and service pack 1 работает очень...

Как в QHBoxLayout удалить все виджеты?
Доброго времени суток. Задача такая, имеется QHBoxLayout в нем несколько виджетов. Так как мне полностью удалить все виджеты в QHBoxLayout?...

Как показать виджеты Qt(QHBoxLayout) на форме QML?
Ето поять Я. здрава всем. Как можно показать на форме QML, через Qt QHLayout? т.е у меня есть форма созданная в QML, а надо на...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru