PyQt中可单击的QLabel?

2024-10-04 05:24:47 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pyqt4创建一个侧菜单。在

我把QLabel(burgermenu)变成了一个汉堡菜单的图片,但是我很难让它点击。在

我的意思是,当我单击burgermenu图像时,内部框架(innerframe)会完全隐藏,当我再次单击burgermenu时,innerframe会显示其内容。在

我怎么才能做到呢?在

这是我的代码:

from PyQt4 import QtCore, QtGui
from PyQt4.QtGui import *

try:
    _fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
    def _fromUtf8(s):
        return s
try:
    _encoding = QtGui.QApplication.UnicodeUTF8
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
    def _translate(context, text, disambig):
        return QtGui.QApplication.translate(context, text, disambig)

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName(_fromUtf8("MainWindow"))
        MainWindow.resize(479, 381)
        self.centralwidget = QtGui.QWidget(MainWindow)
        self.centralwidget.setObjectName(_fromUtf8("centralwidget"))
        self.outerframe = QtGui.QFrame(self.centralwidget)
        self.outerframe.setGeometry(QtCore.QRect(190, 80, 151, 211))
        self.outerframe.setFrameShape(QtGui.QFrame.StyledPanel)
        self.outerframe.setFrameShadow(QtGui.QFrame.Raised)
        self.outerframe.setObjectName(_fromUtf8("outerframe"))
        self.burgermenu = QtGui.QLabel(self.outerframe)
        self.burgermenu.setGeometry(QtCore.QRect(70, 10, 71, 20))
        self.burgermenu.setObjectName(_fromUtf8("burgermenu"))
        self.innerframe = QtGui.QFrame(self.outerframe)
        self.innerframe.setGeometry(QtCore.QRect(10, 60, 131, 141))
        self.innerframe.setFrameShape(QtGui.QFrame.StyledPanel)
        self.innerframe.setFrameShadow(QtGui.QFrame.Raised)
        self.innerframe.setObjectName(_fromUtf8("innerframe"))
        self.widget = QtGui.QWidget(self.innerframe)
        self.widget.setGeometry(QtCore.QRect(20, 30, 91, 99))
        self.widget.setObjectName(_fromUtf8("widget"))
        self.verticalLayout = QtGui.QVBoxLayout(self.widget)
        self.verticalLayout.setMargin(0)
        self.verticalLayout.setObjectName(_fromUtf8("verticalLayout"))
        self.label_2 = QtGui.QLabel(self.widget)
        self.label_2.setObjectName(_fromUtf8("label_2"))
        self.verticalLayout.addWidget(self.label_2)
        self.dateEdit = QtGui.QDateEdit(self.widget)
        self.dateEdit.setObjectName(_fromUtf8("dateEdit"))
        self.verticalLayout.addWidget(self.dateEdit)
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtGui.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 479, 22))
        self.menubar.setObjectName(_fromUtf8("menubar"))
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtGui.QStatusBar(MainWindow)
        self.statusbar.setObjectName(_fromUtf8("statusbar"))
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow", None))
        self.burgermenu.setText(_translate("MainWindow", "burgermenu", None))
        self.burgermenu.setPixmap(QPixmap("/Users/Desktop/menu.png"))
        self.label_2.setText(_translate("MainWindow", "Date:", None))

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    MainWindow = QtGui.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Tags: selfdefwidgettranslateqtguiqtcoresetobjectnamemainwindow
2条回答

这里可以使用方法名mousePressEvent

self.burgermenu.mousePressEvent = self.dosomething

之后,在dosomething方法中,可以为innerframe调用名为hide或show的方法。在

^{pr2}$

或者

self.innerframe.show()

别忘了在dosomething中添加event作为参数

您可以重写QLabel^{},如下所示:

def setupClickToggle(self):
    def mousePressEvent(*args, **kwargs):
        self.innerframe.setVisible(not self.innerframe.isVisible())
    self.burgermenu.mousePressEvent = mousePressEvent

您只需在初始化或启动时调用它一次:

^{pr2}$

相关问题 更多 >