如下图所示,左上角有1个用于控制菜单栏的显示与隐藏的按钮。初始化是显示菜单的,第一次点击会隐藏菜单栏,第二次点击会显示菜单栏,如此往复。
菜单栏隐藏后的效果如下图所示,这里面还加了布局,如果你对布局还不是很了解,请移步我的另一篇文章:《pyqt5控件自适应窗口知识点汇总(超详细讲解,持续更新中…)》:
下面讲下2种实现方式,第一种是最简单的,但是代码比较长,具体代码如下:
self.pushButton.clicked.connect(self.hideMenu)
self.stc = 1
def hideMenu(self):
if self.stc == 1:
self.listWidget.hide()
self.stc = 0
elif self.stc == 0:
self.listWidget.show()
self.stc = 1
这种方法就是先初始化一个值,然后根据这个值在自定义函数中进行if循环判断,就可以了。第2种方法如下:
self.pushButton.clicked.connect(lambda: self.listWidget.setVisible(not self.listWidget.isVisible()))
第2种方法只要1行代码即可,比第1种的代码要简洁很多,核心是用到了匿名函数lambda和setVisible函数。
ui文件转py的源文件代码如下:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'untitled.ui'
#
# Created by: PyQt5 UI code generator 5.15.7
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again. Do not edit this file unless you know what you are doing.
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.verticalLayout = QtWidgets.QVBoxLayout(self.centralwidget)
self.verticalLayout.setObjectName("verticalLayout")
self.widget = QtWidgets.QWidget(self.centralwidget)
self.widget.setMinimumSize(QtCore.QSize(0, 50))
self.widget.setMaximumSize(QtCore.QSize(16777215, 50))
self.widget.setStyleSheet("background-color: rgb(160, 160, 160);")
self.widget.setObjectName("widget")
self.pushButton = QtWidgets.QPushButton(self.widget)
self.pushButton.setGeometry(QtCore.QRect(15, 10, 93, 28))
self.pushButton.setObjectName("pushButton")
self.verticalLayout.addWidget(self.widget)
self.horizontalLayout = QtWidgets.QHBoxLayout()
self.horizontalLayout.setObjectName("horizontalLayout")
self.listWidget = QtWidgets.QListWidget(self.centralwidget)
self.listWidget.setMaximumSize(QtCore.QSize(150, 16777215))
self.listWidget.setObjectName("listWidget")
self.horizontalLayout.addWidget(self.listWidget)
self.frame = QtWidgets.QFrame(self.centralwidget)
self.frame.setStyleSheet("background-color: rgb(204, 204, 204);")
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.horizontalLayout.addWidget(self.frame)
self.verticalLayout.addLayout(self.horizontalLayout)
MainWindow.setCentralWidget(self.centralwidget)
self.retranslateUi(MainWindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.pushButton.setText(_translate("MainWindow", "隐藏/显示"))