Уведомления

Группа в Telegram: @pythonsu
  • Начало
  • » GUI
  • » как в главном окне PyQt5 правильно создать триггер пункта меню из модульного файла? [RSS Feed]

#1 Дек. 8, 2018 07:29:58

eldev
Зарегистрирован: 2018-02-20
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

как в главном окне PyQt5 правильно создать триггер пункта меню из модульного файла?

Добрый день.
есть основной файл main.py с главным окном приложения mainmdi.py (инициализируемый генератором pyuic), содержащий menubar с меню uvedoml_menu и mdi форму mdiArea

  import mainmdi
class MyWin(QtWidgets.QMainWindow):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.ui = mainmdi.Ui_MainWindow()
        self.ui.setupUi(self)
        # self.setWindowFlag(Qt.MSWindowsFixedSizeDialogHint)
        date_time = QDateTime.currentDateTime()
        self.ui.Period.setDate(date_time.date())
есть модульный файл, расположенный в подпапке subfolder, с такими функциями:
 def NewUvedoml_ur_clicked(parent):
    ur_w = NewUvedomlenie()
    # w.ui.get_data_btn.setHidden(False)
    sWindow = QtWidgets.QMdiSubWindow(parent.mdiArea)
    sWindow.setWidget(ur_w)
    parent.mdiArea.addSubWindow(sWindow)
    sWindow.setAttribute(Qt.WA_DeleteOnClose)
    sWindow.setWindowFlag(Qt.MSWindowsFixedSizeDialogHint)
    sWindow.setWindowTitle("Новое уведомление по юридическим лицам и приравненным")
    sWindow.adjustSize()
    ur_w.ui.comboTypePotr.setCurrentIndex(0)
    sWindow.show()
def add_menus_to_main(parent):  # parent = self.ui
    # создаем подменю модуля
    parent.new_sub_menu = QtWidgets.QMenu("&Новые уведомления")
    parent.uvedoml_menu.insertMenu(parent.uvedoml_menu.actions()[0], parent.new_sub_menu)
    # добавляем новую кнопку (юр) в меню и выставляем на исполнение
    parent.ur_new_uvedoml_action = QtWidgets.QAction("Новое уведомление &Юр")
    parent.ur_new_uvedoml_action.setShortcut("Ctrl+U")
    #clicked_ur = NewUvedoml_ur_clicked(parent)
    #parent.ur_new_uvedoml_action.triggered.connect(clicked_ur)
    parent.new_sub_menu.insertAction(parent.uvedoml_menu.actions()[0], parent.ur_new_uvedoml_action)
class NewUvedomlenie(QtWidgets.QDialog):
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        self.setWindowFlag(Qt.MSWindowsFixedSizeDialogHint)
        self.ui = new_uvedoml.Ui_Dialog()

в данный момент при добавлении в main.py строки
 import subfolder.new_uvedoml_form as new_uvedoml_form
и добавлением в dev __init__ строки
 new_uvedoml_form.add_menus_to_main(self.ui) 
нужные пункты меню отрисовываются как положено, но имеется проблема при раскомментировании строк с
 clicked_ur 
и
 parent.ur_new_uvedoml_action.triggered.connect(clicked_ur)
подскажите, как правильно передать в функцию NewUvedoml_ur_clicked параметр parent, чтобы полученные пункты меню стали реагировать на нажатия с созданием субокна. в данный момент программа вылетает с ошибкой: File “E:\Python_Programming\Limits\subfolder\new_uvedoml_form.py”, line 58, in add_menus_to_main
parent.ur_new_uvedoml_action.triggered.connect(clicked_ur)
TypeError: argument 1 has unexpected type ‘NoneType’

Ранее функция NewUvedoml_ur_clicked была в файле main.py и была частью класса MyWin и отрабатывалась как положено без параметра (вместо param был self ну и на местах параметра было self.ui. триггер тоже был частью __init__ и отрабатывался как надо (NewUvedoml_ur_clicked вызывалась без скобок) захотел перенести все в файл модуля для дальнейшего минимального редактирования основного файла и более простой масштабируемости (все настройки делать в модулях и потом просто двумя строками подключать их)

“косметика” вроде как получилась, а вот функционал нет

Отредактировано eldev (Дек. 8, 2018 07:51:37)

Офлайн

  • Начало
  • » GUI
  • » как в главном окне PyQt5 правильно создать триггер пункта меню из модульного файла?[RSS Feed]

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version