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

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

17.05.2022, 16:34. Показов 8060. Ответов 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
Сообщений: 937
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
Сообщений: 937
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
Ответ Создать тему
Новые блоги и статьи
сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
Модель микоризы: классовый агентный подход 3
anaschu 06.01.2026
aa0a7f55b50dd51c5ec569d2d10c54f6/ O1rJuneU_ls https:/ / vkvideo. ru/ video-115721503_456239114
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR
ФедосеевПавел 06.01.2026
Owen Logic: О недопустимости использования связки «аналоговый ПИД» + RegKZR ВВЕДЕНИЕ Введу сокращения: аналоговый ПИД — ПИД регулятор с управляющим выходом в виде числа в диапазоне от 0% до. . .
Модель микоризы: классовый агентный подход 2
anaschu 06.01.2026
репозиторий https:/ / github. com/ shumilovas/ fungi ветка по-частям. коммит Create переделка под биомассу. txt вход sc, но sm считается внутри мицелия. кстати, обьем тоже должен там считаться. . . .
Расчёт токов в цепи постоянного тока
igorrr37 05.01.2026
/ * Дана цепь постоянного тока с сопротивлениями и источниками (напряжения, ЭДС и тока). Найти токи и напряжения во всех элементах. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа и. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru