说明
求助了百度和chatGPT并没有找到Qmenu直接绑定信号槽函数
Qmenu中的QAction
注意,Qmenu在QMainWindow中使用效果较好
# 导入PySide6模块
import sys
from PySide6.QtGui import QAction
from PySide6.QtWidgets import QApplication, QMainWindow, QMenuBar, QWidget
from PySide6.QtCore import Qt
# 定义一个自定义的窗口类,继承自QMainWindow
class MyWindow(QMainWindow):
def __init__(self):
super(MyWindow, self).__init__(parent=None)
self.centralwidget = QWidget() # QMainWindow必须
# 菜单栏
self.menuBar = QMenuBar(self.centralwidget)
self.setMenuBar(self.menuBar)
self.menu = QMenu(self.centralwidget)
self.menu.addAction(self.action_1)
self.menu.addAction(self.action_3)
self.menu.addAction(self.action_4)
if __name__ == '__main__':
app = QApplication([])
window = MyWindow()
window.show()
app.exec()
解决
经过测试,可以通过以下方法直接绑定信号槽函数到一级菜单栏
# 建立一个菜单栏
menubar = self.menuBar()
# 建立关于工具栏
aboutAction = QAction('&关于', self)
aboutAction.triggered.connect(self.open_url2)
# 建立事件
menubar.addAction(aboutAction)
def open_url2(self):
QDesktopServices.openUrl('http://www.baidu.com/')
Qmenu中增加窗口置顶选项
import sys
from PySide6.QtGui import QAction
from PySide6.QtWidgets import QApplication, QMainWindow, QMenuBar, QWidget
from PySide6.QtCore import Qt
class MyWindow(QMainWindow):
def __init__(self):
super(MyWindow, self).__init__(parent=None)
self.centralwidget = QWidget() # QMainWindow必须
# 菜单栏
self.menuBar = QMenuBar(self.centralwidget)
self.setMenuBar(self.menuBar)
self.topAction = QAction('&窗口置顶', self.centralwidget)
self.topAction.triggered.connect(self.toggle_topmost)
self.menuBar.addAction(self.topAction)
def toggle_topmost(self):
# 切换窗口的置顶状态
if self.windowFlags() & Qt.WindowType.WindowStaysOnTopHint:
self.topAction.setText("窗口置顶")
self.setWindowFlags(self.windowFlags() & ~Qt.WindowType.WindowStaysOnTopHint)
else:
self.setWindowFlags(self.windowFlags() | Qt.WindowType.WindowStaysOnTopHint)
self.topAction.setText("取消置顶")
# 更新窗口的显示
self.show()
if __name__ == '__main__':
app = QApplication([])
window = MyWindow()
window.show()
app.exec()