先描述一下要解决的两个问题和解决问题的代码:1.鼠标放在菜单栏上状态栏永久消失的问题(这个问题需要仔细观察才能注意到)#这个重写父类函数:重写方法;为了克服鼠标放在菜单栏上状态栏消失的问题;defevent(self,QEvent):ifQEvent.type()==QEvent.StatusTip:ifQEvent.tip()=="":QEvent=QStatusTipEvent("ready!")#这里是所有要显示的内容timereturnsuper().event(QEvent)2,控制状态栏的显示和隐藏deftoggleMenu(self,state):#自定义事件函数print(state)#ifstate:#self.statusBar().showMessage("ready!")#else:#self.statusBar().showMessage("")#ifstate:#控制状态栏是否显示,#self.statusbar().show()#这里是一个例子error#else:#self.statusbar().hide()ifstate:#shouldusestatusBar()insteadofstatusbarself.statusBar().show()else:self.statusBar().hide()最近学习了pyqt5tutorial,也是别人翻译的。一般来说,有很多错误。应该直接看原版,充分说明英文很重要。。。把全部代码贴上:importsysfromPyQt5.QtWidgetsimportQMainWindow,QApplication,QAction,qApp,QMenufromPyQt5.QtGuiimportQIcon,QStatusTipEventclassmain_window(QMainWindow):def__init__(self):super().__init__()self.initUI()definitUI(self):#可以设置动作图标,文字显示;powerfulexitAct=QAction(QIcon("/Users/zuozhe/PycharmProjects/Soft-Video/images/m4.png"),"&exit",self)exitAct.setShortcut("Ctrl+Q")#设置快捷键exitAct.setToolTip("ExitApplication")#提示exitAct.triggered.connect(qApp.exit)#绑定退出事件status=self.statusBar()#创建状态栏status.showMessage("ready!")#显示消息#菜单栏#文件菜单栏menubar=self.menuBar()menubar.setNativeMenuBar(False)#MACOS下需要设置这句fileMenu=menubar.addMenu("&File")#主菜单文件impMenu=QMenu("Import",self)#创建一个菜单项impAct=QAction("ImportEmail",self)#Import菜单下有一个子菜单ImportEmailimpMenu.addAction(impAct)newAct=QAction("New",self)#差不多要绑定Action(动作)触发事件fileMenu.addAction(newAct)#在File主菜单栏添加两个菜单项fileMenu.addMenu(impMenu)fileMenu.addAction(exitAct)#File下绑定菜单项#编辑菜单栏editMenu=menubar.addMenu("&Edit")#查看菜单栏viewMenu=menubar.addMenu("&View")#查看菜单viewstatAct=QAction("是否显示状态栏",self,checkable=True)viewstatAct.setToolTip("查看状态栏")viewstatAct.setChecked(True)viewstatAct.triggered.connect(self.toggleMenu)#触发链接事件;toggleMenu是一个自定义函数viewMenu.addAction(viewstatAct)#设置窗口的位置和大小self.setGeometry(300,300,500,600)self.setWindowTitle("主窗口的菜单栏和工具栏")self.show()#这会覆盖父类Function:Overridemethod;为了克服鼠标放在菜单栏上状态栏消失的问题;defevent(self,QEvent):ifQEvent.type()==QEvent.StatusTip:ifQEvent.tip()=="":QEvent=QStatusTipEvent("ready!")#这里是一直显示的内容returnsuper().event(QEvent)deftoggleMenu(self,state):#自定义事件functionprint(state)#ifstate:#self.statusBar().showMessage("ready!")#else:#self.statusBar().showMessage("")#ifstate:#控制是否显示状态栏,#self.statusbar().show()#else:#self.statusbar().hide()ifstate:#应该使用statusBar()而不是statusbarself.statusBar().show()else:self.statusBar().hide()如果__name__=="__main__":app=QApplication(sys.argv)window=main_window()sys.exit(app.exec_())
