Созданный пользовательский интерфейс в Qt designer не выглядит одинаково при запуске кода Python

#python #python-3.x #pyqt #pyqt5 #qt-designer

#python #python-3.x #pyqt #pyqt5 #qt-designer

Вопрос:

Я создал пользовательский интерфейс в Qt designer и перевел файл .ui в файл .py. Однако, когда я запускаю код python, пользовательский интерфейс выглядит не так, как в конструкторе, когда я запускаю код. Я не понимаю, почему это происходит, поскольку я вижу все элементы в коде?

 
from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_FirstWindow(object):
    def setupUi(self, FirstWindow):
        FirstWindow.setObjectName("FirstWindow")
        FirstWindow.resize(400, 300)
        self.centralWidget = QtWidgets.QWidget(FirstWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.welcomelabel = QtWidgets.QLabel(self.centralWidget)
        self.welcomelabel.setGeometry(QtCore.QRect(90, 10, 211, 20))
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.welcomelabel.setFont(font)
        self.welcomelabel.setAlignment(QtCore.Qt.AlignCenter)
        self.welcomelabel.setObjectName("welcomelabel")
        self.pushButton = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton.setGeometry(QtCore.QRect(150, 120, 80, 16))
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_2.setGeometry(QtCore.QRect(290, 120, 80, 16))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_3.setGeometry(QtCore.QRect(10, 120, 80, 16))
        self.pushButton_3.setObjectName("pushButton_3")
        self.layoutWidget = QtWidgets.QWidget(self.centralWidget)
        self.layoutWidget.setGeometry(QtCore.QRect(50, 50, 168, 54))
        self.layoutWidget.setObjectName("layoutWidget")
        self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout.setContentsMargins(11, 11, 11, 11)
        self.verticalLayout.setSpacing(6)
        self.verticalLayout.setObjectName("verticalLayout")
        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setContentsMargins(11, 11, 11, 11)
        self.horizontalLayout.setSpacing(16)
        self.horizontalLayout.setObjectName("horizontalLayout")
        self.rowcountlabel = QtWidgets.QLabel(self.layoutWidget)
        self.rowcountlabel.setObjectName("rowcountlabel")
        self.horizontalLayout.addWidget(self.rowcountlabel)
        self.rowcounentry = QtWidgets.QLineEdit(self.layoutWidget)
        self.rowcounentry.setObjectName("rowcounentry")
        self.horizontalLayout.addWidget(self.rowcounentry)
        self.verticalLayout.addLayout(self.horizontalLayout)
        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setContentsMargins(11, 11, 11, 11)
        self.horizontalLayout_2.setSpacing(6)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.columncountlabel = QtWidgets.QLabel(self.layoutWidget)
        self.columncountlabel.setObjectName("columncountlabel")
        self.horizontalLayout_2.addWidget(self.columncountlabel)
        self.ColumnNOentry = QtWidgets.QLineEdit(self.layoutWidget)
        self.ColumnNOentry.setObjectName("ColumnNOentry")
        self.horizontalLayout_2.addWidget(self.ColumnNOentry)
        self.verticalLayout.addLayout(self.horizontalLayout_2)
        FirstWindow.setCentralWidget(self.centralWidget)
        self.menuBar = QtWidgets.QMenuBar(FirstWindow)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 17))
        self.menuBar.setObjectName("menuBar")
        FirstWindow.setMenuBar(self.menuBar)
        self.mainToolBar = QtWidgets.QToolBar(FirstWindow)
        self.mainToolBar.setObjectName("mainToolBar")
        FirstWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
        self.statusBar = QtWidgets.QStatusBar(FirstWindow)
        self.statusBar.setObjectName("statusBar")
        FirstWindow.setStatusBar(self.statusBar)

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

    def retranslateUi(self, FirstWindow):
        _translate = QtCore.QCoreApplication.translate
        FirstWindow.setWindowTitle(_translate("FirstWindow", "FirstWindow"))
        self.welcomelabel.setText(_translate("FirstWindow", "<html><head/><body><p><span style=" font-size:12pt;">Welcome to the Data Generator</span></p></body></html>"))
        self.pushButton.setText(_translate("FirstWindow", "Continue"))
        self.pushButton_2.setText(_translate("FirstWindow", "Exit"))
        self.pushButton_3.setText(_translate("FirstWindow", "Instructions"))
        self.rowcountlabel.setText(_translate("FirstWindow", "<html><head/><body><p><span style=" font-weight:600;">How Many Rows? </span></p></body></html>"))
        self.columncountlabel.setText(_translate("FirstWindow", "<html><head/><body><p><span style=" font-weight:600;">How Many Columns? </span></p></body></html>"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    FirstWindow = QtWidgets.QMainWindow()
    ui = Ui_FirstWindow()
    ui.setupUi(FirstWindow)

    FirstWindow.show()
    sys.exit(app.exec_())
  

Я ожидаю этого:

введите описание изображения здесь

но это выглядит так:

введите описание изображения здесь

Комментарии:

1. пожалуйста, поделитесь своим .ui

Ответ №1:

По какой-то причине вы не помещаете все виджеты в центральный виджет? К сожалению, я не смог увидеть, какой результат вы хотите получить. Попробуйте:

 from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_FirstWindow(object):
    def setupUi(self, FirstWindow):
        FirstWindow.setObjectName("FirstWindow")
        FirstWindow.resize(400, 300)
        self.centralWidget = QtWidgets.QWidget(FirstWindow)
        self.centralWidget.setObjectName("centralWidget")
        self.welcomelabel = QtWidgets.QLabel(self.centralWidget)
        self.welcomelabel.setGeometry(QtCore.QRect(90, 10, 211, 20))    
        font = QtGui.QFont()
        font.setBold(True)
        font.setWeight(75)
        self.welcomelabel.setFont(font)
        self.welcomelabel.setAlignment(QtCore.Qt.AlignCenter)
        self.welcomelabel.setObjectName("welcomelabel")

        self.pushButton = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton.setGeometry(QtCore.QRect(150, 120, 80, 16))  
        self.pushButton.setObjectName("pushButton")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_2.setGeometry(QtCore.QRect(290, 120, 80, 16))
        self.pushButton_2.setObjectName("pushButton_2")
        self.pushButton_3 = QtWidgets.QPushButton(self.centralWidget)
        self.pushButton_3.setGeometry(QtCore.QRect(10, 120, 80, 16))
        self.pushButton_3.setObjectName("pushButton_3")

#     vvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvvv       
        self.hLayout = QtWidgets.QHBoxLayout()
        self.hLayout.setContentsMargins(11, 11, 11, 11)
        self.hLayout.setSpacing(6)
        self.hLayout.setObjectName("hLayout")  
        self.hLayout.addWidget(self.pushButton_3)
        self.hLayout.addWidget(self.pushButton)
        self.hLayout.addWidget(self.pushButton_2)
#     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^        

        self.layoutWidget = QtWidgets.QWidget(self.centralWidget)
        self.layoutWidget.setGeometry(QtCore.QRect(50, 50, 168, 54))
        self.layoutWidget.setObjectName("layoutWidget")

#        self.verticalLayout = QtWidgets.QVBoxLayout(self.layoutWidget)
        self.verticalLayout = QtWidgets.QVBoxLayout(self.centralWidget)       #    

        self.verticalLayout.setContentsMargins(11, 11, 11, 11)
        self.verticalLayout.setSpacing(6)
        self.verticalLayout.setObjectName("verticalLayout")

        self.verticalLayout.addWidget(self.welcomelabel)                      #    

        self.horizontalLayout = QtWidgets.QHBoxLayout()
        self.horizontalLayout.setContentsMargins(11, 11, 11, 11)
        self.horizontalLayout.setSpacing(16)
        self.horizontalLayout.setObjectName("horizontalLayout")

        self.rowcountlabel = QtWidgets.QLabel(self.layoutWidget)
        self.rowcountlabel.setObjectName("rowcountlabel")
        self.horizontalLayout.addWidget(self.rowcountlabel)
        self.rowcounentry = QtWidgets.QLineEdit(self.layoutWidget)
        self.rowcounentry.setObjectName("rowcounentry")
        self.horizontalLayout.addWidget(self.rowcounentry)

        self.verticalLayout.addLayout(self.horizontalLayout)

        self.horizontalLayout_2 = QtWidgets.QHBoxLayout()
        self.horizontalLayout_2.setContentsMargins(11, 11, 11, 11)
        self.horizontalLayout_2.setSpacing(6)
        self.horizontalLayout_2.setObjectName("horizontalLayout_2")
        self.columncountlabel = QtWidgets.QLabel(self.layoutWidget)
        self.columncountlabel.setObjectName("columncountlabel")
        self.horizontalLayout_2.addWidget(self.columncountlabel)
        self.ColumnNOentry = QtWidgets.QLineEdit(self.layoutWidget)
        self.ColumnNOentry.setObjectName("ColumnNOentry")
        self.horizontalLayout_2.addWidget(self.ColumnNOentry)
        self.verticalLayout.addLayout(self.horizontalLayout_2)

        self.verticalLayout.addLayout(self.hLayout)                          #    

        FirstWindow.setCentralWidget(self.centralWidget)

        self.menuBar = QtWidgets.QMenuBar(FirstWindow)
        self.menuBar.setGeometry(QtCore.QRect(0, 0, 400, 17))
        self.menuBar.setObjectName("menuBar")
        FirstWindow.setMenuBar(self.menuBar)
        self.mainToolBar = QtWidgets.QToolBar(FirstWindow)
        self.mainToolBar.setObjectName("mainToolBar")
        FirstWindow.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
        self.statusBar = QtWidgets.QStatusBar(FirstWindow)
        self.statusBar.setObjectName("statusBar")
        FirstWindow.setStatusBar(self.statusBar)

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

    def retranslateUi(self, FirstWindow):
        _translate = QtCore.QCoreApplication.translate
        FirstWindow.setWindowTitle(_translate("FirstWindow", "FirstWindow"))
        self.welcomelabel.setText(_translate("FirstWindow", "<html><head/><body><p><span style=" font-size:12pt;">Welcome to the Data Generator</span></p></body></html>"))
        self.pushButton.setText(_translate("FirstWindow", "Continue"))
        self.pushButton_2.setText(_translate("FirstWindow", "Exit"))
        self.pushButton_3.setText(_translate("FirstWindow", "Instructions"))
        self.rowcountlabel.setText(_translate("FirstWindow", "<html><head/><body><p><span style=" font-weight:600;">How  Many  Rows ?    </span></p></body></html>"))
        self.columncountlabel.setText(_translate("FirstWindow", "<html><head/><body><p><span style=" font-weight:600;">How Many Columns? </span></p></body></html>"))


class Main(QtWidgets.QMainWindow, Ui_FirstWindow):
    def __init__(self):
        super().__init__()
        self.setupUi(self)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    spinbox = Main()
    spinbox.show()
    sys.exit(app.exec_())
  

введите описание изображения здесь

Комментарии:

1. Я ценю это, но когда я его запускаю, он запрашивает позиционный аргумент для функции «super ()». Хотя все примеры, которые я вижу, имеют использование, похожее на ваше, поэтому я в замешательстве.

2. @DAJames опубликуйте приложение, которое вы запускаете.