Кнопка не реагирует - PullRequest
       24

Кнопка не реагирует

0 голосов
/ 01 апреля 2020

Я довольно новичок в python и PyQt5.

Моя цель - использовать «Pu sh Button», чтобы перейти к следующему виджету в «Stacked Layout». Тем не менее, он не реагирует, и кажется, что он не войдет в функцию, чтобы перейти к следующему виджету.

Я понятия не имею, является ли это наследством, которое я испортил, или что-то другое. Любое руководство действительно ценится. Спасибо!

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_())

1 Ответ

0 голосов
/ 01 апреля 2020

Проблема проста: QLabel находится сверху кнопки, поэтому она блокирует все события мыши. Простое решение состоит в том, чтобы поместить QPushButton в QLabel с помощью повышения _ ():

# ...
self.welcomeText.setText("Welcome!")

<b>self.entrBtn.raise_()</b>

Но это решает поверхностную проблему, у вас есть другая большая проблема: вы не должны наследовать от 2 QWidget, также Main не отображается , Код лучше переписать следующим образом:

from PyQt5 import QtCore, QtGui, QtWidgets


class 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_())
...