Выпадающий список PyQt4 с действиями - PullRequest
3 голосов
/ 02 июля 2010

Я хочу создать выпадающий список в PyQt4, который выполняет действие при выборе элемента. Кроме того, некоторые параметры могут быть недоступны в какое-то время. Они все еще должны быть в списке, но затенены.

Я пытался прикрепить меню к QToolButton, но я даже не вижу меню. Как это сделать?

Спасибо! Nathan

Ответы [ 2 ]

2 голосов
/ 02 июля 2010

Используйте всплывающее окно.Вы можете вызвать всплывающее окно в любом месте, используя метод QMenu.exec_ и пройдя точку, в которой вы хотите, чтобы меню появилось.

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

class MemoryButton(QPushButton):
    def __init__(self, *args, **kw):
        QPushButton.__init__(self, *args, **kw)
        self.last_mouse_pos = None

    def mousePressEvent(self, event):
        self.last_mouse_pos = event.pos()
        QPushButton.mousePressEvent(self, event)

    def mouseReleaseEvent(self, event):
        self.last_mouse_pos = event.pos()
        QPushButton.mouseReleaseEvent(self, event)

    def get_last_pos(self):
        if self.last_mouse_pos:
            return self.mapToGlobal(self.last_mouse_pos)
        else:
            return None

button = MemoryButton("Click Me!")

def popup_menu():
    popup = QMenu()
    menu = popup.addMenu("Do Action")

    def _action(check):
        print "Action Clicked!"

    menu.addAction("Action").triggered.connect(_action)                                                             
    popup.exec_(button.get_last_pos())

button.clicked.connect(popup_menu)
0 голосов
/ 02 июля 2010

QToolButton имеет перечисление ToolButtonPopupMode , которое управляет его обработкой меню и несколькими действиями.Если установлено значение QToolButton::MenuButtonPopup, на нем будет отображаться стрелка, типичная для кнопок с параметрами меню.

Чтобы использовать его, установите соответствующий режим всплывающего окна, а затем вы можете добавить меню в QToolButton, используя setMenu или вы можете добавить действия, используя addAction .Затем QToolButton должен реагировать, как и ожидалось, на щелчки в меню, будь то сгенерированное действие или действительное QMenu.

...