Разместить обработчики в другой файл

theRoone

Новичок
Пользователь
Май 1, 2021
3
0
1
25
1. Windows 10
2. Python 3.8.5
3. PySide 6

Доброго времени суток, делаю программу с несколькими страницами, при помощи компонента stackedWidget. Имеется основной файл main.py. Но, хотелось бы, чтобы обработчики, события кнопок и т.п., каждой страницы(stackedWidget-а) были в разных файлах, в отдельной папке. Страницы в stackedWidget-е page1, page2, page3.

Дерево каталога должно выглядеть так:
-main.py
handler/
- page1.py
- page2.py
- page3.py

И, чтобы в этих page*.py были обработчики кнопок, событии. Пример содержимого page*.py:

...
...
...
self.btn_save.clicked.connect(self.buttonClick_Save)

def buttonClick_Save(self):
....


main.py:
Python:
import sys
import platform

from modules import *
from widgets import *

widgets = None

class MainWindow(QMainWindow):
    def __init__(self):
        QMainWindow.__init__(self)

        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        global widgets
        widgets = self.ui

        Settings.ENABLE_CUSTOM_TITLE_BAR = True

        self.setWindowTitle(title)
        widgets.titleRightInfo.setText(description)

        widgets.toggleButton.clicked.connect(lambda: UIFunctions.toggleMenu(self, True))

        UIFunctions.uiDefinitions(self)

        widgets.tableWidget.horizontalHeader().setSectionResizeMode(QHeaderView.Stretch)

        widgets.btn_home.clicked.connect(self.buttonClick)
        widgets.btn_widgets.clicked.connect(self.buttonClick)
        widgets.btn_new.clicked.connect(self.buttonClick)
        widgets.btn_save.clicked.connect(self.buttonClick)

        def openCloseLeftBox():
            UIFunctions.toggleLeftBox(self, True)
        widgets.toggleLeftBox.clicked.connect(openCloseLeftBox)
        widgets.extraCloseColumnBtn.clicked.connect(openCloseLeftBox)

        def openCloseRightBox():
            UIFunctions.toggleRightBox(self, True)
        widgets.settingsTopBtn.clicked.connect(openCloseRightBox)


        self.show()

        widgets.stackedWidget.setCurrentWidget(widgets.home)
        widgets.btn_home.setStyleSheet(UIFunctions.selectMenu(widgets.btn_home.styleSheet()))


if __name__ == "__main__":
    app = QApplication(sys.argv)
    app.setWindowIcon(QIcon("icon.ico"))
    window = MainWindow()
    sys.exit(app.exec_())
 

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
почитайте про модульность в питоне...

P.S.
а так не понятно, зачем слоты и сигналы в разных модулях? обычно слоты и сигналы делаются в том файле, где создается окно...
во первых это упрощает отладку...
во вторых - это лишние расходы на подключение модуля...
вы не в с++, где линковщик все соберет в кучу и компилятор сделает вам исполняемый файл, это питон - интерпретируемый язык, он работает немного иначе...
 
Последнее редактирование:

theRoone

Новичок
Пользователь
Май 1, 2021
3
0
1
25
почитайте про модульность в питоне...

P.S.
а так не понятно, зачем слоты и сигналы в разных модулях? обычно слоты и сигналы делаются в том файле, где создается окно...
во первых это упрощает отладку...
во вторых - это лишние расходы на подключение модуля...
вы не в с++, где линковщик все соберет в кучу и компилятор сделает вам исполняемый файл, это питон - интерпретируемый язык, он работает немного иначе...
Я подумал, будет намного понятнее, если весь код, связанный с каждой страницей stackedWidget-а будет в разных файлах, т.к.

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

regnor

Модератор
Команда форума
Модератор
Июл 7, 2020
2 580
457
83
виджеты можно создать в конструкторе класса, который вы импортируете...
у вас получиться очень сложная архитектура кода...
 

theRoone

Новичок
Пользователь
Май 1, 2021
3
0
1
25
виджеты можно создать в конструкторе класса, который вы импортируете...
у вас получиться очень сложная архитектура кода...
Не могли бы вы помочь это реализовать? Я понимаю что мне требуется сделать, но, я не понимаю как мне сделать, чтобы я мог взаимодействовать с компонентами в другом файле, исходя из того, что у меня имеется в main.py
 

Форум IT Специалистов