Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.67/3: Рейтинг темы: голосов - 3, средняя оценка - 4.67
30 / 23 / 7
Регистрация: 19.09.2018
Сообщений: 196
PyQt5

Как динамически добавлять страницы в QStackedWidget?

20.09.2022, 17:01. Показов 851. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Первая идея реализации динамического добавления страниц в QStackedWidget - создавать объекты со страницами и всем содержимым, а потом прикреплять к QStackedWidget основного окна. Но реализовать это не получается.
Как можно прикрепить объект страницы к QStackedWidget? Может есть другие идеи по динамическому добавлению страниц?



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
#!/usr/bin/python3
 
 
from PyQt5.QtWidgets import (QWidget,
                                QApplication, 
                                QDesktopWidget,
                                QGridLayout,
                                QStackedWidget,
                                QPushButton,
                                )
 
 
 
class Gui(QWidget):
    def __init__(self):
        super().__init__()
        self.gui_create()
        self.move_center()
 
    def gui_create(self):
        self.resize(800, 600)
        self.setWindowTitle('Тест')
 
        self.grid = QGridLayout(self)
 
        self.stack = QStackedWidget(self)
        self.grid.addWidget(self.stack, 0, 1)
 
        # self.page = QWidget()
        # self.stack.addWidget(self.page)
        # self.grid2 = QGridLayout(self.page)
        # self.pushButton = QPushButton()
        # self.grid2.addWidget(self.pushButton, 0, 0)
        # self.pushButton.setText('Кнопка')
        # print('page1', type(self.page))
 
        self.page2 = Page()
        print('page2', type(self.page2))
        self.stack.addWidget(self.page2)
 
    
    
    def move_center(self):
        fg = self.frameGeometry()
        ac = QDesktopWidget().availableGeometry().center()
        fg.moveCenter(ac)
        self.move(fg.topLeft())
 
class Page(QWidget):
    def __init__(self):
        super().__init__()
        self.page = QWidget()
        self.grid = QGridLayout(self.page)
        self.pushButton = QPushButton()
        self.pushButton.setText('Кнопка2')
        self.grid.addWidget(self.pushButton, 0, 0)
 
 
 
def show_gui():
    app = QApplication([])
    gui = Gui()
    print('main', type(gui))
    gui.show()
    app.exec_()
 
 
show_gui()
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
20.09.2022, 17:01
Ответы с готовыми решениями:

Как на страницы TabStrip добавлять динамически элементы?
Как на страницы TabStrip добавлять динамически элементы? Нужно сделать TabStrip с рисунками, причём число рисунков и сами изображения...

Как динамически добавлять/удалять страницы ViewPager
Добрый день Всем! как можно добавлять и удалять страницы во ViewPager? пытаюсь делать так: MainActiv: ...

Как динамически добавлять PathCurve?
Как динамически можно добавить точки в property list<PathCurve> _curvePath: ???

2
Модератор
Эксперт Python
 Аватар для Fudthhh
2696 / 1602 / 513
Регистрация: 21.02.2017
Сообщений: 4,210
Записей в блоге: 1
21.09.2022, 11:25
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
from PySide6 import QtWidgets, QtCore
 
 
class Example(QtWidgets.QWidget):
    def __init__(self, parent: QtWidgets.QWidget = None) -> None:
        QtWidgets.QWidget.__init__(self, parent, QtCore.Qt.Window)
    
        self.stackedWidget = QtWidgets.QStackedWidget(self)
        
        self.comboBox = QtWidgets.QComboBox(self)
 
        self.comboBox.currentIndexChanged.connect(self.stackedWidget.setCurrentIndex)
 
        self.dialogButtonBox = QtWidgets.QDialogButtonBox(QtCore.Qt.Vertical, self)
        self.add_PushButton = self.dialogButtonBox.addButton(
            "Append", QtWidgets.QDialogButtonBox.ActionRole)
        self.add_PushButton.clicked.connect(self.add_PushButton_Event)
        self.del_PushButton = self.dialogButtonBox.addButton(
            "Remove", QtWidgets.QDialogButtonBox.ActionRole)
        self.del_PushButton.clicked.connect(self.del_PushButton_Event)
 
        layout = QtWidgets.QGridLayout(self)
        layout.addWidget(self.stackedWidget,   0, 0, 2, 1)
        layout.addWidget(self.comboBox,        0, 1, 1, 1)
        layout.addWidget(self.dialogButtonBox, 1, 1, 1, 1)
        layout.setColumnMinimumWidth(1, 100)
 
    def add_PushButton_Event(self) -> None:
        index = self.comboBox.count()
        alias = f"Window {index}"
        self.comboBox.addItem(alias)
        self.stackedWidget.addWidget(QtWidgets.QGroupBox(alias, self))
        self.comboBox.setCurrentIndex(index)
 
    def del_PushButton_Event(self) -> None:
        self.comboBox.removeItem(self.comboBox.currentIndex())
        self.stackedWidget.removeWidget(self.stackedWidget.currentWidget())
 
 
app = QtWidgets.QApplication()
w = Example()
w.show()
app.exec()
1
30 / 23 / 7
Регистрация: 19.09.2018
Сообщений: 196
21.09.2022, 18:25  [ТС]
Большое спасибо.
Я планировал сделать отдельные модули для всех страниц и все сведения о каждой странице будут подгружаться из внешнего файла. Если для формирования страницы использовать внешнюю функцию это не будет кривым решением?

Добавлено через 8 минут
На всякий случай уточню, что из внешнего py файла.

Добавлено через 3 часа 18 минут
И как можно связать QGroupBox с элементом QTreeWidgetItem с помощью setCurrentIndex?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
21.09.2022, 18:25
Помогаю со студенческими работами здесь

Как добавлять динамически элементы
Здравствуйте! У меня основная форма сделана через конструктор(форма и фрейм во всю форму). Как добавить прямоугольную область справа, что...

Как добавлять класс динамически
Люди, возникла проблема в следующем ,если кто знает подскажите плиз. Допустим есть некий объект А типа class, нужно создать...

Как добавлять в ConfigurationSettings динамически?
Через System.Configuration.ConfigurationSettings.AppSettings.Add('Name', Value) не получается (AppSettings - readonly). Но ведь...

Как динамически добавлять данные в dxgrid?
Смотрите , у меня есть главная форма на которой есть dxgrid. При нажатии на кнопку добавить появляется окно в котором вводятся данные об...

Как динамически создавать и добавлять виджеты?
Допустим, имеется QMainWindow с единственной кнопкой. Как сделать так, чтобы по нажатии кнопки создавался и добавлялся какой-нибудь виджет,...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru