猿问

按钮没有响应

我对蟒蛇和PyQt5很陌生。


我的目标是使用“按钮”移动到“堆叠布局”中的下一个小部件。但是,它没有响应,并且似乎不会进入函数以移动到下一个小部件。


我不知道是我搞砸了的遗产,还是别的什么。任何指导都非常感谢。谢谢!


from PyQt5 import QtCore, QtGui, QtWidgets



class Menu(QtWidgets.QWidget):


    def setupUI(self, Main):


        Main.setObjectName("Main")

        Main.setFixedSize(900, 500)


        self.width = 900

        self.height = 500


        self.setFixedSize(self.width, self.height)



        self.menu = QtWidgets.QStackedLayout()


        self.welcomeMenu = QtWidgets.QWidget()

        self.mainMenu = QtWidgets.QWidget()


        self.welcomeUi()

        self.menuUi()


        self.menu.addWidget(self.welcomeMenu)

        self.menu.addWidget(self.mainMenu)


    def welcomeUi(self):


        #Button for entering portal

        self.entrBtn = QtWidgets.QPushButton(self.welcomeMenu)

        self.entrBtn.setGeometry(QtCore.QRect(25,150,200,50))

        self.entrBtn.setText("To the menu screen!")


        #Having welcome text

        self.welcomeText = QtWidgets.QLabel(self.welcomeMenu)

        self.welcomeText.setGeometry(QtCore.QRect(30, 120, 480, 200))

        self.welcomeText.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)

        self.welcomeText.setText("Welcome!")


    def menuUi(self):

        self.text = QtWidgets.QLabel(self.mainMenu)

        self.text.setGeometry(QtCore.QRect(30, 120, 480, 200))

        self.text.setText("test")



class Main(QtWidgets.QMainWindow, Menu):

    def __init__(self):

        super(Main, self).__init__()

        self.setupUI(self)

        self.entrBtn.clicked.connect(self.menuWindow)


    def menuWindow(self):

        self.menu.setCurrentWidget(self.mainMenu)



if __name__ == "__main__":

    import sys

    app = QtWidgets.QApplication(sys.argv)

    m = Main()

    sys.exit(app.exec_())


潇潇雨雨
浏览 174回答 1
1回答

Qyouu

问题很简单:QLabel位于按钮的顶部,因此它将阻止所有鼠标事件。简单的解决方案是使用raise_()将QPushButton放在Q标签上:# ...self.welcomeText.setText("Welcome!")self.entrBtn.raise_()但这解决了表面的问题,你还有其他更大的问题:你不应该继承2 QWidget,也没有显示Main。最好按如下方式重写代码:from PyQt5 import QtCore, QtGui, QtWidgetsclass MainWindow(QtWidgets.QMainWindow):    def __init__(self, parent=None):        super().__init__(parent)        self.welcomeMenu = QtWidgets.QWidget()        self.mainMenu = QtWidgets.QWidget()        self.fill_welcomeUi()        self.fill_menuUi()        self.stacked_lay = QtWidgets.QStackedLayout()        self.stacked_lay.addWidget(self.welcomeMenu)        self.stacked_lay.addWidget(self.mainMenu)        central_widget = QtWidgets.QWidget()        self.setCentralWidget(central_widget)        central_widget.setLayout(self.stacked_lay)        self.entrBtn.clicked.connect(self.menuWindow)        self.resize(640, 480)    def menuWindow(self):        self.stacked_lay.setCurrentWidget(self.mainMenu)    def fill_welcomeUi(self):        #Button for entering portal        self.entrBtn = QtWidgets.QPushButton(self.welcomeMenu)        self.entrBtn.setGeometry(QtCore.QRect(25,150,200,50))        self.entrBtn.setText("To the menu screen!")        #Having welcome text        self.welcomeText = QtWidgets.QLabel(self.welcomeMenu)        self.welcomeText.setGeometry(QtCore.QRect(30, 120, 480, 200))        self.welcomeText.setAlignment(QtCore.Qt.AlignLeading|QtCore.Qt.AlignLeft|QtCore.Qt.AlignTop)        self.welcomeText.setText("Welcome!")        self.entrBtn.raise_()    def fill_menuUi(self):        self.text = QtWidgets.QLabel(self.mainMenu)        self.text.setGeometry(QtCore.QRect(30, 120, 480, 200))        self.text.setText("test")if __name__ == "__main__":    import sys    app = QtWidgets.QApplication(sys.argv)    m = MainWindow()    m.show()    sys.exit(app.exec_())
随时随地看视频慕课网APP

相关分类

Python
我要回答