菜单栏无法点击
MenuBar cannot be clicked
我正在尝试学习 PyQt5,目前正在制作一个带有 Exit
函数和 Open
函数的 MenuBar。我目前有 MenuBar 显示,其中包含可用的快捷方式,但是当我将鼠标悬停在 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
菜单项之前它一直在工作,但我什至无法再次工作。
问题是因为QLabels在菜单上方,挡住了这个的点击事件。 QMainWindow 有一个特殊的结构,如下图所示:
如果你想添加一个小部件,你必须对 Central Widget 进行,当你将父级传递给一个小部件时,它被放置在相对于它的位置 `(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)
[...]
我正在尝试学习 PyQt5,目前正在制作一个带有 Exit
函数和 Open
函数的 MenuBar。我目前有 MenuBar 显示,其中包含可用的快捷方式,但是当我将鼠标悬停在 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
菜单项之前它一直在工作,但我什至无法再次工作。
问题是因为QLabels在菜单上方,挡住了这个的点击事件。 QMainWindow 有一个特殊的结构,如下图所示:
如果你想添加一个小部件,你必须对 Central Widget 进行,当你将父级传递给一个小部件时,它被放置在相对于它的位置 `(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)
[...]