Qt Designer 和 PyCharm 的布局问题(高 dpi 笔记本电脑)

Layout Problems with Qt Designer and PyCharm (high-dpi laptop)

我是Qt Designer新手,PyCharm想做个小程序练习的时候,遇到了布局问题。

我使用Qt Designer设计布局,使用PyUIC作为外部工具将我的login.ui转换成login.py。

我使用 Form Layout 作为我的布局,并放置了两对标签和 lineEdits。

在 运行 启动我的程序之前,我先按预览按钮检查我的布局,一切都符合预期:

但是当我 运行 我的程序在 PyCharm 时,它看起来很奇怪,我不知道为什么:

我有两个.py文件:∀login.py和mainn.py

login.py:

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(473, 436)
        self.formLayout = QtWidgets.QFormLayout(Form)
        self.formLayout.setObjectName("formLayout")
        self.label = QtWidgets.QLabel(Form)
        self.label.setObjectName("label")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.LabelRole, 
        self.label)
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setObjectName("lineEdit")
        self.formLayout.setWidget(0, QtWidgets.QFormLayout.FieldRole, 
        self.lineEdit)
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setObjectName("label_2")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.LabelRole, 
        self.label_2)
        self.lineEdit_2 = QtWidgets.QLineEdit(Form)
        self.lineEdit_2.setObjectName("lineEdit_2")
        self.formLayout.setWidget(1, QtWidgets.QFormLayout.FieldRole, 
        self.lineEdit_2)

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

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "Label 1"))
        self.label_2.setText(_translate("Form", "Label 2"))

mainn.py:

import sys
import login
from PyQt5.QtWidgets import QApplication, QMainWindow

if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = login.Ui_Form()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

我 运行正在使用 高 DPI 笔记本电脑,我不确定这是否是原因之一。有任何想法吗?谢谢!

如果您 运行 mainn.py 通过 CMD 您会看到一条错误消息:

QLayout: Attempting to add QLayout" "to QMainWindow" Form ", which already has a layout

试一试:

import sys
import login
from PyQt5.QtWidgets import QApplication, QMainWindow, QWidget

if __name__ == '__main__':
    app = QApplication(sys.argv)
#    MainWindow = QMainWindow()         # ---
    MainWindow = QWidget()              # +++
    ui = login.Ui_Form()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())