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

Как реализовать раскрывающийся список в Qt Designer

17.05.2022, 16:34. Показов 8340. Ответов 11

Студворк — интернет-сервис помощи студентам
Здравствуйте! пытаюсь подружиться с Qt DesignerОМ. Подскажите, как можно реализовать такую штуку в виде плюсика, который раскрывает список? К примеру 2000 год, нажал на него или на плюсик рядом слева и раскрылись месяца: январь, февраль, март... и так возле каждого года 2001, 2002... может также раскрывать месяца и т.д.? Можете подскажите хороший ресурс/книгу по этой программе Qt Designer?
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
17.05.2022, 16:34
Ответы с готовыми решениями:

Как реализовать плавный раскрывающийся список, со смещением нижестоящих элементов
так как на этой странице https://neetcode.io/practice

Как сделать раскрывающийся список
<div class="container-unit"> <div class="subcategories"> <ul class="tag-slider sub-links-2 row1 open"> <li> <a...

Как сделать такой раскрывающийся список
Добрый день. Подскажите, как можно сделать такой список как по ссылке http://palchiki.com/menyu-uslug/manikyur.html мало того, что надо...

11
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
17.05.2022, 17:20
Добрый день!
Цитата Сообщение от Andreu83 Посмотреть сообщение
пытаюсь подружиться с Qt DesignerОМ
Зря. Все примеры в книгах будут на основе того что весь GUI набран руками. Лучше не приучайтесь к Qt Designer, чем больше будете строить все руками, быстрее въедете в тему.
Цитата Сообщение от Andreu83 Посмотреть сообщение
Подскажите, как можно реализовать такую штуку в виде плюсика, который раскрывает список? К примеру 2000 год, нажал на него или на плюсик рядом слева и раскрылись месяца: январь, февраль, март... и так возле каждого года 2001, 2002... может также раскрывать месяца и т.д.
Не понял, чего вы хотели...

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
import sys
from PyQt5.QtWidgets import (QWidget, QLabel,
    QComboBox, QApplication)
 
class Example(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()
 
 
    def initUI(self):
 
        combo = QComboBox(self)
        combo.addItems(["Январь", "Февраль",
                        "Март", "Апрель", "Май"])
 
        combo.move(50, 50)
 
        self.setGeometry(300, 300, 300, 200)
        self.setWindowTitle('QComboBox')
        self.show()
 
if __name__ == '__main__':
 
    app = QApplication(sys.argv)
    ex = Example()
    sys.exit(app.exec_())
Попробуйте посмотреть основные виджеты тут

Цитата Сообщение от Andreu83 Посмотреть сообщение
Можете подскажите хороший ресурс/книгу
Например если читаете на англ.языке, и или есть на русском книга Python 3 и PyQt Разработка приложений.

И еще ресурс пошаговый.

Добавлено через 11 минут
Цитата Сообщение от Andreu83 Посмотреть сообщение
Подскажите, как можно реализовать такую штуку
Или вы об этом:

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
import sys
 
from PyQt5 import QtCore, QtWidgets
 
 
def create_menu(d, menu):
    if isinstance(d, list):
        for e in d:
            create_menu(e, menu)
    elif isinstance(d, dict):
        for k, v in d.items():
            sub_menu = QtWidgets.QMenu(k, menu)
            menu.addMenu(sub_menu)
            create_menu(v, sub_menu)
    else:
        action = menu.addAction(d)
        action.setIconVisibleInMenu(False)
 
 
class Widget(QtWidgets.QWidget):
    def __init__(self, parent=None):
        super().__init__(parent)
 
        d = ["1", "2", "3", {"4": ["5", "6", {"7": ["8", "9"]}]}, {"10": "11"}]
 
        menu = QtWidgets.QMenu(self)
        create_menu(d, menu)
 
        button = QtWidgets.QPushButton()
        button.setMenu(menu)
 
        menu.triggered.connect(lambda action: button.setText(action.text()))
 
        lay = QtWidgets.QHBoxLayout(self)
        lay.addWidget(button)
        lay.addStretch()
 
        self.resize(640, 480)
 
 
if __name__ == "__main__":
 
    app = QtWidgets.QApplication(sys.argv)
    w = Widget()
    w.show()
    sys.exit(app.exec_())
2
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 34
18.05.2022, 07:56  [ТС]
Цитата Сообщение от Михалыч Посмотреть сообщение
Не понял, чего вы хотели...
Имелось ввиду такое как в файле я приложил.
Спасибо за информацию, сейчас буду все это смотреть и щупать
Миниатюры
Как реализовать раскрывающийся список в Qt Designer  
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
18.05.2022, 09:26
Лучший ответ Сообщение было отмечено Andreu83 как решение

Решение

Andreu83, это называется QTreeWidget

Добавлено через 9 минут
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
import sys
from PySide6 import QtWidgets
 
 
YEARS = range(2000, 2023)
MONTHS = [
    "January",
    "February",
    "March",
    "April",
    "May",
    "June",
    "July",
    "August",
    "September",
    "October",
    "November",
    "December"
]
 
class Example(QtWidgets.QTreeWidget):
 
    def __init__(self, parent: QtWidgets.QWidget = None) -> None:
        QtWidgets.QTreeWidget.__init__(self, parent)
        self.setHeaderHidden(True)
 
        for year in YEARS:
            root = QtWidgets.QTreeWidgetItem(self, [str(year)])
            for month in MONTHS:
                QtWidgets.QTreeWidgetItem(root, [month])
            self.addTopLevelItem(root)
        
        if not parent:
            self.show()
 
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = Example()
    sys.exit(app.exec())
2
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 34
18.05.2022, 12:43  [ТС]
Цитата Сообщение от Fudthhh Посмотреть сообщение
это называется QTreeWidget
Большущее Спасибо!!! То, что я и хотел!!!
0
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 34
18.05.2022, 13:52  [ТС]
Цитата Сообщение от Fudthhh Посмотреть сообщение
это называется QTreeWidget
Можно вас еще раз потревожить, пожалуйста!)
Как реализовать еще такое, чтоб было слева область с этим списком, справа окошко, (там хочу выводить результаты при выборе в левом списке), возможно снизу еще похожее окошко. И подскажите, где я могу это все сам поузнавать, чтоб морочить только себе голову?

Типа такого...
Миниатюры
Как реализовать раскрывающийся список в Qt Designer  
0
 Аватар для Михалыч
1011 / 355 / 59
Регистрация: 28.02.2013
Сообщений: 939
18.05.2022, 13:58
Цитата Сообщение от Andreu83 Посмотреть сообщение
И подскажите, где я могу это все сам поузнавать, чтоб не морочить только себе голову?
Цитата Сообщение от Михалыч Посмотреть сообщение
Например если читаете на англ.языке, и или есть на русском книга Python 3 и PyQt Разработка приложений. И еще ресурс пошаговый.
Мало?

Не пытайтесь съесть слона целиком. Изучите основные виджеты и пытайтесь их компоновать и взаимодействовать с ними.
0
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 34
18.05.2022, 14:23  [ТС]
Цитата Сообщение от Михалыч Посмотреть сообщение
Мало?
Маловато) На англ. вообще не понятно, на русском, маловато и то, что мне надо там не нашел (или плохо искал).
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
18.05.2022, 14:36
Лучший ответ Сообщение было отмечено Andreu83 как решение

Решение

Andreu83,
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
import sys
from PySide2 import QtWidgets, QtCore
 
 
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self, parent: QtWidgets.QWidget = None) -> None:
        QtWidgets.QMainWindow.__init__(self, parent, QtCore.Qt.Window)
 
        menuBar = QtWidgets.QMenuBar(self)
        menuBar.addMenu("Файл")
        menuBar.addMenu("Параметры")
        self.setMenuBar(menuBar)
 
        tabBar = QtWidgets.QTabWidget(self)
        tabBar.addTab(QtWidgets.QWidget(self), "Окно 1")
        tabBar.addTab(QtWidgets.QWidget(self), "Окно 2")
        tabBar.addTab(QtWidgets.QWidget(self), "Окно 3")
        self.setCentralWidget(tabBar)
 
        treeWidget = QtWidgets.QTreeWidget(self)
        treeWidget.setHeaderHidden(True)
        dockWidget_treeWidget = QtWidgets.QDockWidget("Древо параметров", self)
        dockWidget_treeWidget.setWidget(treeWidget)
        self.addDockWidget(QtCore.Qt.LeftDockWidgetArea, dockWidget_treeWidget)
 
        textBrowser = QtWidgets.QTextBrowser(self)
        dockWidget_textBrowser = QtWidgets.QDockWidget("Логгер", self)
        dockWidget_textBrowser.setWidget(textBrowser)
        self.addDockWidget(QtCore.Qt.BottomDockWidgetArea, dockWidget_textBrowser)
 
        if not parent:
            self.show()
 
 
if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    main = MainWindow()
    sys.exit(app.exec_())
Добавлено через 4 минуты
Andreu83, есть офф. сайт qt, там есть и для питона примеры и для си, я учась использовал доки именно от си, т.к. отличий практически нет (только в синтаксисе, и парочке мелочей).
1
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 34
18.05.2022, 15:12  [ТС]
Цитата Сообщение от Andreu83 Посмотреть сообщение
Fudthhh
А это ваши личные готовые шаблоны, или вы где то берете, или так быстро можете "наклепать" решение?
0
Модератор
Эксперт Python
 Аватар для Fudthhh
2695 / 1601 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
18.05.2022, 15:39
Andreu83, опыт, когда пару тройку больших проектов руками накидаешь (не важно си или питон), там уже как семечки щелкать можно.

Добавлено через 4 минуты
QtDesigner может быть и хорош, для удобства составления формы и ее редактирования, но потом по факту получается быдло код, который через год не сможешь и сам отредачить, не говоря уже о передаче проекта кому то.

Поэтому легче создавать все руками, это как минимум даст более красивый исходный код, а как максимум понимание того, как, где и что работает.

Добавлено через 4 минуты
Элементарный пример:

Задача: Создать 20 кнопок

Как сделает это QtDesigner:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
6
7
8
9
10
11
pushButton1 = QPushButton()
pushButton1.setObjectName("pushButton1")
...
pushButton20 = QPushButton()
pushButton20 .setObjectName("pushButton20")
 
 
layout = QVBoxLayout()
layout.addWidget(pushButton1)
...
layout.addWidget(pushButton20)


Как можно сделать ручками:
Кликните здесь для просмотра всего текста

Python
1
2
3
4
5
layout = QVBoxLayout()
for i in range(20):
    pushButton = QPushButton()
    pushButton.setObjectName(f"pushButton{i + 1}")
    layout.addWidget(pushButton)
3
0 / 0 / 0
Регистрация: 19.04.2016
Сообщений: 34
18.05.2022, 15:42  [ТС]
Цитата Сообщение от Fudthhh Посмотреть сообщение
Andreu83, опыт, когда пару тройку больших проектов руками накидаешь (не важно си или питон), там уже как семечки щелкать можно.
Я Вас благодарю за помощь и содержательные ответы!
Вы мне сильно помогли и мотивировали!
Желаю Вам успехов и удачи!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.05.2022, 15:42
Помогаю со студенческими работами здесь

Как сделать раскрывающийся список определений
Здравствуйте. <dl> <dt>Термин 1</dt> <dd>Определение термина 1</dd> <dt>Термин 2</dt> ...

Сделать раскрывающийся список как на сайте
Сделать раскрывающийся список как на сайте http://www.internet-technologies.ru/articles/article_907.html#subscribeCansel (находится ниже...

Можно как-то организовать раскрывающийся список с автоподстановкой?
Есть список, например фамилий... Можно как-то организовать раскрывающийся список с автоподстановкой? Чтобы при вводе первых символов...

Раскрывающийся список в Access 2007. Как создать?
Есть список, есть поле со списком, а как Раскрывающийся список создать? :scratch: Подскажите. Добавлено через 1 час 18 минут ...

Как в DbGrid поместить любой компонент (раскрывающийся список или маску)?
как поместить компонент в дбгрид


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

Или воспользуйтесь поиском по форуму:
12
Ответ Создать тему
Новые блоги и статьи
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
[Owen Logic] Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора
ФедосеевПавел 14.03.2026
Поддержание уровня воды в резервуаре количеством включённых насосов: моделирование и выбор регулятора ВВЕДЕНИЕ Выполняя задание на управление насосной группой заполнения резервуара,. . .
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru