2017-11-20 2 views
0

저는 PyQt5를 배우려고하고 있으며 Exit 함수와 Open 함수로 MenuBar를 만들고 있습니다. 현재 MenuBar가 작동하는 바로 가기가 표시되지만 MenuBar 위로 마우스를 가져 가면 MenuBar를 클릭 할 수 없습니다. 여기에 내 현재 코드 :PyQt MenuBar를 클릭 할 수 없습니다.

import sys 
from PyQt5.QtWidgets import QMainWindow, QAction, qApp, QApplication, QPushButton, QDesktopWidget, QLabel, QFileDialog 
from PyQt5.QtGui import QIcon 
from PyQt5.QtCore import QCoreApplication 
from win32api import GetSystemMetrics 

CURRENT_VERSION = 0.1 

class Example(QMainWindow): 

    def __init__(self): 
     super().__init__() 

     self.initUI() 

    def initUI(self): 
     self.setWindowTitle('test') 

     window_width = GetSystemMetrics(0) 
     window_height = GetSystemMetrics(1) 

     self.resize(0.6 * window_width, 0.6 * window_height) 
     self.center() 

     self.setWindowIcon(QIcon('Icon.png')) 

     #Exit on menubar 
     exitAct = QAction('&Exit', self) 
     exitAct.setShortcut('Ctrl+Q') 
     exitAct.setStatusTip('Exit applicatiion') 
     exitAct.triggered.connect(qApp.quit) 

     #Open on menubar 
     openAct = QAction('&Open', self) 
     openAct.setShortcut('Ctrl+O') 
     openAct.setStatusTip('Open Directory') 
     openAct.triggered.connect(self.openFile) 

     menubar = self.menuBar() 
     fileMenu = menubar.addMenu('&File') 
     fileMenu.addAction(exitAct) 
     fileMenu.addAction(openAct) 

     btn = QPushButton("Test", self) 
     btn.resize(btn.sizeHint()) 
     btn.move(50, 50) 

     btn.clicked.connect(self.buttonpress) 

     self.label = QLabel(self) 
     self.image = QLabel(self) 
     self.openDirectoryDialog = "" 

     self.show() 

    def center(self): 
     qr = self.frameGeometry() 
     cp = QDesktopWidget().availableGeometry().center() 
     qr.moveCenter(cp) 
     self.move(qr.topLeft()) 

    def openFile(self): 
     self.openDirectoryDialog=ddir = QFileDialog.getExistingDirectory(self, "Get Dir Path") 

    def buttonpress(self): 
     label = QLabel(self) 
     self.label.move(100,150) 
     self.label.setFixedWidth(500) 
     self.label.setFixedHeight(100) 
     self.label.setText(self.openDirectoryDialog) 


if __name__ == '__main__': 

    app = QApplication(sys.argv) 

    w = Example() 

    sys.exit(app.exec_()) 

내가 파일을 열 수있는 기능을 추가 만 exit 메뉴 항목을 가지고 전에 작동했지만, 내가 다시 작업도 것을 얻을 수 없습니다.

답변

1

이 문제는 QLabel이 메뉴 위에있어이 이벤트의 클릭 이벤트를 차단하기 때문에 발생합니다.

enter image description here

당신이 위젯을 추가 할 경우 위젯에 부모를 통과 할 때, 당신은 중앙 위젯으로 수행해야합니다,이 배치된다 QMainWindow는 다음 이미지와 같이 특정 구조를 가지고 그것과 관련하여`(0, 0) 위치에있다.

class Example(QMainWindow): 
    [...] 
    def initUI(self): 
     [...] 

     #Exit on menubar 
     exitAct = QAction('&Exit', self) 
     exitAct.setShortcut('Ctrl+Q') 
     exitAct.setStatusTip('Exit applicatiion') 
     exitAct.triggered.connect(qApp.quit) 

     #Open on menubar 
     openAct = QAction('&Open', self) 
     openAct.setShortcut('Ctrl+O') 
     openAct.setStatusTip('Open Directory') 
     openAct.triggered.connect(self.openFile) 

     menubar = self.menuBar() 

     fileMenu = menubar.addMenu('&File') 
     fileMenu.addAction(exitAct) 
     fileMenu.addAction(openAct) 

     centralwidget = QWidget(self) 
     self.setCentralWidget(centralwidget) 
     btn = QPushButton("Test", centralwidget) 
     btn.resize(btn.sizeHint()) 
     btn.move(50, 50) 

     btn.clicked.connect(self.buttonpress) 

     self.label = QLabel(centralwidget) 
     self.image = QLabel(centralwidget) 
     [...] 
:

다음을 얻을 수정하기

관련 문제