0

I created a simple file called (first page) through a qt designer program, and put a button named (login) in it, and I also created another simple file with the same program called (second page)

After running the first file and pressing the button in it, I want to open the second file, or in other words I want to link the pages together. How can I do this?. Please i need help.

The first file code :

from PyQt5.QtWidgets import QDialog, QApplication from PyQt5 import QtCore, QtGui, QtWidgets,uic 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.pushButton = QtWidgets.QPushButton(self.centralwidget)
    self.pushButton.setGeometry(QtCore.QRect(170, 140, 91, 31))
    font = QtGui.QFont()
    font.setFamily("Times New Roman")
    font.setPointSize(12)
    font.setBold(True)
    font.setItalic(True)
    font.setWeight(75)
    self.pushButton.setFont(font)
    self.pushButton.setObjectName("pushButton")
    MainWindow.setCentralWidget(self.centralwidget)
    self.menubar = QtWidgets.QMenuBar(MainWindow)
    self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
    self.menubar.setObjectName("menubar")
    MainWindow.setMenuBar(self.menubar)
    self.statusbar = QtWidgets.QStatusBar(MainWindow)
    self.statusbar.setObjectName("statusbar")
    MainWindow.setStatusBar(self.statusbar)

    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", "Login"))
    self.pushButton.clicked.connect(self.buttonClicked)
def buttonClicked(self,Ui):
    uic.loadUi('secondpage.ui',self)

if name == "main": import sys app = QtWidgets.QApplication(sys.argv) MainWindow = QtWidgets.QMainWindow() ui = Ui_MainWindow() ui.setupUi(MainWindow) MainWindow.show() sys.exit(app.exec_())

first page file second page file

  • You should not try to edit pyuic files, but instead use them as explained in [using Designer](https://www.riverbankcomputing.com/static/Docs/PyQt5/designer.html). Also, even when using the proper way to load the UI, you should *not* use `loadUi` on an *already* set widget. – musicamante Dec 19 '21 at 13:16
  • Sorry, I don't understand what you mean Is there a bug in the code? – ahmad sarairah Dec 19 '21 at 15:21
  • No, there's no bug, there's a *bad practice*. The file you're using is created by the pyuic utility, and those files should be ***never*** modified. Read the link in my previous comment to understand how to *properly* use those files. – musicamante Dec 19 '21 at 15:27

1 Answers1

0

I know what you mean. So, there are solution:

from PyQt5.QtWidgets import QDialog, QApplication from PyQt5 import QtCore, QtGui, QtWidgets,uic 

# Add second window import here
from second_file import Second_Ui_MainWindow

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.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(170, 140, 91, 31))
        font = QtGui.QFont()
        font.setFamily("Times New Roman")
        font.setPointSize(12)
        font.setBold(True)
        font.setItalic(True)
        font.setWeight(75)
        self.pushButton.setFont(font)
        self.pushButton.setObjectName("pushButton")

        # Connect button with function
        self.pushButton,clicked.connect(lambda x: self.buttonClicked(MainWindow))

        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 21))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        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", "Login"))
        self.pushButton.clicked.connect(self.buttonClicked)
    def buttonClicked(self, MainWindow):
        SecondScreen_MW = QtWidgets.QMainWindow()
        ui = Second_Ui_MainWindow()
        ui.setupUi(SecondScreen_MW )
        SecondScreen_MW.show()
        # (Optional) Hide first screen
        MainWindow.hide()

But, as said @musicamante : "You should not try to edit pyuic files, but instead use them as explained in using Designer. Also, even when using the proper way to load the UI, you should not use loadUi on an already set widget."

This method works, but it is not the best. If you need a consultation, you can contact me

bl1nk-
  • 14
  • 2