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