Поскольку мы хотим добавить QAction
в контекстное меню по умолчанию, мы сначала перезаписываем событие contextMenuEvent
и используем QTimer
для вызова функции, которая фильтрует toplevels
и получает отображаемое QMenu
и там мы добавляем QAction
:
doublespinbox.py
from PyQt5 import QtCore, QtWidgets
class DoubleSpinBox(QtWidgets.QDoubleSpinBox):
minimize_signal = QtCore.pyqtSignal()
def __init__(self, *args, **kwargs):
super(DoubleSpinBox, self).__init__(*args, **kwargs)
self.setContextMenuPolicy(QtCore.Qt.DefaultContextMenu)
def contextMenuEvent(self, event):
QtCore.QTimer.singleShot(0, self.add_actions)
super(DoubleSpinBox, self).contextMenuEvent(event)
@QtCore.pyqtSlot()
def add_actions(self):
for w in QtWidgets.QApplication.topLevelWidgets():
if isinstance(w, QtWidgets.QMenu) and w.objectName() == "qt_edit_menu":
w.addSeparator()
minimize_action = w.addAction("minimize this parameter")
minimize_action.triggered.connect(self.minimize_signal)
if __name__ == '__main__':
import sys
app = QtWidgets.QApplication(sys.argv)
w = DoubleSpinBox()
w.show()
sys.exit(app.exec_())
Чтобы использовать DoubleSpinBox в Qt Designer, первое место doublespinbox.py рядом с вашим .ui:
├── ..
├── rvmod_gui.ui
├── doublespinbox.py
├── ...
, затем вы должны продвинуть виджет, чтобы сделать это, щелкните правой кнопкой мыши на QDoubleSpinBox и выберите опцию «Повышать до ...», добавив следующее кдиалоговое окно:
Затем нажмите кнопку «Добавить» и затем кнопку «Повышение».
Для других QDoubleSpinBox
щелкните правой кнопкой мышии выберите новую опцию Повышение до, где опция DoubleSpinBox
.
Вы можете найти пример здесь