Russian Qt Forum
Май 06, 2024, 04:52 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Питон, QAction и функция вложенного объекта  (Прочитано 1700 раз)
str-ms
Гость
« : Май 09, 2017, 21:35 »

Привет мастерам Qt!
Разбираюсь с QMainWindow, пытаюсь создать в нем меню. Создал QAction со ссылкой на функцию во вложенном в QMainWindow объекте:

Код
Python
       self.upScaleAct = QAction("Zoom &In (10%)", self.previewArea, shortcut="Ctrl++",
               enabled=True, triggered=self.previewArea.upScale)
 

Сама функция:

Код
Python
   def upScale(self):
       self.settings.picWidth = int(1.1 * self.settings.picWidth)
       self.settings.picHeight = int(1.1 * self.settings.picHeight)
       maxSize = min(self.scrollArea.viewport().width(), self.scrollArea.viewport().height())
       if self.settings.picWidth > maxSize or self.settings.picHeight > maxSize:
           self.settings.picWidth = maxSize
           self.settings.picHeight = maxSize
       self.curColumns = self.maxColumns()
       self.fillViewport(resizeMode = True)
       self.scrollArea.ensureWidgetVisible(self.pixmapLabels[self.settings.currentPic],
           self.settings.picSpacing, self.settings.picSpacing)
 

Не работает... Злой Непонимающий Когда эта функция вызывается из контекста самого previewArea (по событиям) - всё отлично, функция видит атрибуты этого объекта (например, список self.pixmapLabels). Когда же я пытаюсь запустить эту же функцию через меню основного окна - полный игнор, функция все атрибуты объекта previewArea не видит. Что-то я упускаю. Как из родительского объекта запускать функцию (метод) вложенного объекта? Не пинайте сильно, я только пытаюсь разобраться и в Питоне, и в Qt.
Записан
str-ms
Гость
« Ответ #1 : Май 10, 2017, 08:55 »

Дабы никто не наступал на подобные грабли, отпишусь сам.
Проблему решил, точнее обошёл. Я не очень понимаю, что происходит при инициализации QAction, метод зачем-то вызывается, но данные в подчиненном объекте ещё не заполнены, он пустой. Я просто в QAction поставил ссылку на метод самого главного окна, а из него уже вызываю метод вложенного объекта:
Код
Python
   def upScale(self):
       print("test upScale")
       self.previewArea.upScale()
 
Так всё работает.
Если кто-то может мне объяснить логику инициализации QAction - буду благодарен.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.087 секунд. Запросов: 21.