Search code examples
pythonpyqt5pyside2

Type Error when opening GUI from another file


I am getting an error when trying to open a pyqt5 GUI in another file.

main.py

from main_scrn import Ui_MainWindow
from sload_page import Ui_SLoadWindow
from PySide2.QtWidgets import *

class SLoadWindow(QMainWindow):
    def __init__(self, parent=None):
        QMainWindow.__init__(self, parent)
        self.ui = Ui_SLoadWindow()
        self.ui.setupUi(self)

if __name__ == "__main__":
    import sys
    app = QApplication(sys.argv)
    window = SLoadWindow()
    sys.exit(app.exec_())

sload_page.py

from PyQt5 import QtCore, QtGui, QtWidgets


class Ui_SLoadWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1920, 1080)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(0, 0, 1920, 1080))
        self.label.setObjectName("label")
        self.load1Button = QtWidgets.QPushButton(self.centralwidget)
        self.load1Button.setGeometry(QtCore.QRect(880, 520, 161, 71))
        self.load1Button.setStyleSheet("QPushButton {\n"
"    border: 2px solid #fff;\n"
"    color: #fff;\n"
"    font-size: 20px;\n"
"    border-radius: 5px;\n"
"    background: rgba(132, 132, 132, 180)\n"
"}\n"
"\n"
"QPushButton:hover {\n"
"    border: 2px solid rgb(182, 182, 182);\n"
"    color: rgb(182, 182, 182);\n"
"    font-size: 20px;\n"
"    border-radius: 5px;\n"
"}")
        self.load1Button.setObjectName("load1Button")
        self.load2Button = QtWidgets.QPushButton(self.centralwidget)
        self.load2Button.setGeometry(QtCore.QRect(880, 610, 161, 71))
        self.load2Button.setStyleSheet("QPushButton {\n"
"    border: 2px solid #fff;\n"
"    color: #fff;\n"
"    font-size: 20px;\n"
"    border-radius: 5px;\n"
"    background: rgba(132, 132, 132, 180)\n"
"}\n"
"\n"
"QPushButton:hover {\n"
"    border: 2px solid rgb(182, 182, 182);\n"
"    color: rgb(182, 182, 182);\n"
"    font-size: 20px;\n"
"    border-radius: 5px;\n"
"}")
        self.load2Button.setObjectName("load2Button")
        self.load3Button = QtWidgets.QPushButton(self.centralwidget)
        self.load3Button.setGeometry(QtCore.QRect(880, 700, 161, 71))
        self.load3Button.setStyleSheet("QPushButton {\n"
"    border: 2px solid #fff;\n"
"    color: #fff;\n"
"    font-size: 20px;\n"
"    border-radius: 5px;\n"
"    background: rgba(132, 132, 132, 180)\n"
"}\n"
"\n"
"QPushButton:hover {\n"
"    border: 2px solid rgb(182, 182, 182);\n"
"    color: rgb(182, 182, 182);\n"
"    font-size: 20px;\n"
"    border-radius: 5px;\n"
"}")
        self.load3Button.setObjectName("load3Button")
        self.load4Button = QtWidgets.QPushButton(self.centralwidget)
        self.load4Button.setGeometry(QtCore.QRect(880, 790, 161, 71))
        self.load4Button.setStyleSheet("QPushButton {\n"
"    border: 2px solid #fff;\n"
"    color: #fff;\n"
"    font-size: 20px;\n"
"    border-radius: 5px;\n"
"    background: rgba(132, 132, 132, 180)\n"
"}\n"
"\n"
"QPushButton:hover {\n"
"    border: 2px solid rgb(182, 182, 182);\n"
"    color: rgb(182, 182, 182);\n"
"    font-size: 20px;\n"
"    border-radius: 5px;\n"
"}")
        self.load4Button.setObjectName("load4Button")
        MainWindow.setCentralWidget(self.centralwidget)
        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.label.setText(_translate("MainWindow", "<html><head/><body><p><img src=\":/main_image/main.png\"/></p></body></html>"))
        self.load1Button.setText(_translate("MainWindow", "Load 1"))
        self.load2Button.setText(_translate("MainWindow", "Load 2"))
        self.load3Button.setText(_translate("MainWindow", "Load 3"))
        self.load4Button.setText(_translate("MainWindow", "Load 4"))


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

I don't know an awful lot about PyQt5 because I am fairly new to it and was sick of tkinter, so if you could tell me anything or suggest an improvement either that would be very helpful and greatly appreciated.


Solution

  • The problem is that you are combining libraries wrongly. Although PyQt5 and PySide2 are bindings of Qt these are different implementations so they are not compatible so the solution:

    • Or use PyQt5: change to from PyQt5.QtWidgets import * in main.py

    • Or use PySide2 but not both: change to from PySide2 import QtCore, QtGui, QtWidgets in sload_page.py

    But don't use both libraries at the same time.