如何解决QMdiArea 显示不正确
我在 PyQt5 中使用 qmdiarea 时遇到问题,以下是我所做的:
-
我用 Qt 设计器创建了一个演示 UI,看起来像:
我发现使用uic工具生成的相应.py代码无法为mdiaarea中的子窗口设置父级:
self.mdiArea = QtWidgets.qmdiarea(IOWidgets)
self.mdiArea.setGeometry(QtCore.QRect(555,120,421,181))
self.mdiArea.setobjectName("mdiArea")
self.subwindow = QtWidgets.QWidget()
self.subwindow.setobjectName("subwindow")
self.lineEdit_1_IO = QtWidgets.QLineEdit(self.subwindow)
self.lineEdit_1_IO.setGeometry(QtCore.QRect(20,20,61,21))
self.lineEdit_1_IO.setobjectName("lineEdit_1_IO")
self.spinBox_1_IO = QtWidgets.QSpinBox(self.subwindow)
self.spinBox_1_IO.setGeometry(QtCore.QRect(30,60,42,22))
self.spinBox_1_IO.setobjectName("spinBox_1_IO")
如果我将关键行代码更改为:
self.subwindow = QtWidgets.QWidget(self.mdiArea)
这是一个简单的演示:
from PyQt5 import QtCore,QtGui,QtWidgets
class Ui_MDI_test(object):
def setupUi(self,MDI_test):
MDI_test.setobjectName("MDI_test")
MDI_test.resize(545,336)
self.mdiArea = QtWidgets.qmdiarea(MDI_test)
self.mdiArea.setGeometry(QtCore.QRect(70,50,331,221))
self.mdiArea.setobjectName("mdiArea")
self.subwindow = QtWidgets.QWidget()
self.subwindow.setobjectName("subwindow")
self.comboBox = QtWidgets.QComboBox(self.subwindow)
self.comboBox.setGeometry(QtCore.QRect(50,30,68,22))
self.comboBox.setobjectName("comboBox")
self.lineEdit = QtWidgets.QLineEdit(self.subwindow)
self.lineEdit.setGeometry(QtCore.QRect(50,70,113,20))
self.lineEdit.setobjectName("lineEdit")
self.radioButton = QtWidgets.qradiobutton(self.subwindow)
self.radioButton.setGeometry(QtCore.QRect(50,110,95,20))
self.radioButton.setobjectName("radioButton")
self.subwindow_2 = QtWidgets.QWidget()
self.subwindow_2.setobjectName("subwindow_2")
self.retranslateUi(MDI_test)
QtCore.QMetaObject.connectSlotsByName(MDI_test)
def retranslateUi(self,MDI_test):
_translate = QtCore.QCoreApplication.translate
MDI_test.setwindowTitle(_translate("MDI_test","Form"))
self.subwindow.setwindowTitle(_translate("MDI_test","subwindow_1"))
self.radioButton.setText(_translate("MDI_test","RadioButton"))
self.subwindow_2.setwindowTitle(_translate("MDI_test","subwindow_2"))
- 主要代码是:
import sys
from PyQt5.QtWidgets import QWidget,QApplication
from Ui_Mdi_simple import Ui_MDI_test
class MDI_demo(QWidget,Ui_MDI_test):
def __init__(self):
super().__init__()
self.setupUi(self)
if __name__ == "__main__":
app = QApplication(sys.argv)
win = MDI_demo()
win.show()
sys.exit(app.exec_())
解决方法
我发现在 Ui_MDI_test 中添加以下两行代码可以解决问题:
self.mdiArea.addSubWindow(self.subwindow)
self.mdiArea.addSubWindow(self.subwindow_2)
@eyllanesc,谢谢。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。