Я не понимаю, почему в книге Rapid GUI программирования с Python и Qt, контекстное меню добавляется в центральный виджет, вызвав addActions()
в главном окне (self
), например, так (стр 180.)Qt: лучший способ добавить контекстное меню в центральный виджет?
self.addActions(self.imageLabel,
(editInvertAction, …))
где self
является QMainWindow
и imageLabel
является QLabel
набор в качестве центрального виджета с
self.imageLabel.setContextMenuPolicy(Qt.ActionsContextMenu) # Added actions will be put in a context menu
self.setCentralWidget(self.imageLabel)
Теперь, почему главное окно должно быть связано каким-то образом (через self.addActions()
) в контекстное меню центрального виджета? Не достаточно ли позвонить addActions()
прямо на центральный виджет? Фактически, следующее создает контекстное меню:
self.imageLabel.addActions((editInvertAction, …))
Почему книга не иллюстрирует контекстное меню таким образом? разве это не эквивалентно более формальной форме self.addActions(…)
?
PS: Я даже вижу, что documentation for QMainWindow.addActions() даже не говоря уже о какой-либо первый аргумент (self.imageLabel
выше)! Я полностью потерял, почему книга использует первый фрагмент выше, а не последний ... Помогите! :)
Спасибо! Действия, переданные центральному виджету, уже используются дочерними элементами QMainWindow (меню и т. Д.), И я не вижу контекстного меню вне центрального виджета. Итак, я не уверен, чтобы понять ваш ответ ... :) – EOL
Хм, извините, я не видел «self.imageLabel» внутри первого self.addActions. Возможно, книга просто ошибается. (Что-то вроде QWidget.addAction (self.imageLabel, (editInvertAction, ...)), вероятно, будет работать, но это уродливо). Используйте self.imageLabel.addActions или, лучше, customContextMenuRequested сигнал. – iksaif
Код книги, похоже, делает то, что предназначено. Спасибо за ваш полезный вклад! – EOL