MenuBar单击事件

时间:2015-12-15 18:43:13

标签: python pyqt

我想在菜单栏点击后打开一个窗口(不是菜单栏项目)。下面的代码有什么问题:

self.menuHelp.triggered.connect(lambda : HelpWindow().exec_())

1 个答案:

答案 0 :(得分:-1)

如果我理解正确,那么你想在菜单栏点击上打开新窗口,trigger event与点击事件不同,所以你需要实现自己的菜单栏,我有一个工作的例子,但不知道是什么这一点:) 还有一些代码我从上面回答了这个问题,抱歉是懒惰。

import sys
# This is bad, but was stealing code from above answer
from PyQt4.QtCore import *
from PyQt4.QtGui import *

class HelpWindow(QtGui.QDialog):
    def __init__(self):
        super(HelpWindow, self).__init__()
        self.setObjectName("self")
        self.resize(500, 350)
        layout = QtGui.QVBoxLayout()
        textLbl = QtGui.QLabel("REally ?")
        layout.addWidget(textLbl)
        self.setLayout(layout)

    def exec_(self):
        super(HelpWindow, self).exec_()
        return "Blaaa"

class CustomMB(QMenuBar):
    mbClick = pyqtSignal(str)
    def __init__(self, parent=None):
        super(CustomMB, self).__init__()

    @pyqtSlot()
    def mouseReleaseEvent(self, event):
        self.mbClick.emit('clicked')

class MyWindow(QMainWindow):
    def __init__(self):
        super(MyWindow, self).__init__()
        self.main_menu = CustomMB()
        self.main_menu.mbClick.connect(lambda : HelpWindow().exec_())
        self.setMenuBar(self.main_menu)
        self.create_menu()

    def create_menu(self):
        menu2 = self.main_menu.addMenu('Menu 1')

        Action1=QAction('Menu 1 0',self)
        Action1.triggered.connect(self.action_1)
        menu2.addAction(Action1)

        Action2=QAction('Menu 1 1',self)
        Action2.triggered.connect(self.action_2)
        menu2.addAction(Action2)

    def menu_1(self):
        new=MyWindow()
        new.setMinimumSize(320,160)
        new.show()

    def action_1(self):
        print('Menu 1 0')

    def action_2(self):
        print('Menu 1 1')


if __name__ == '__main__':
    app=QApplication(sys.argv)
    new=MyWindow()
    new.show()
    app.exec_()