pyqt 子窗口嵌入主窗口中
pyqt窗口嵌套:no BB anymore, just show me the code
testgood.py
from PyQt5 import QtCore, QtGui, QtWidgets
import sys
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
self.textBrowser = QtWidgets.QTextBrowser(Form)
self.textBrowser.setGeometry(QtCore.QRect(20, 10, 351, 291))
self.textBrowser.setObjectName("textBrowser")
self.label = QtWidgets.QLabel(Form)
self.label.setGeometry(QtCore.QRect(400, 20, 54, 12))
self.label.setObjectName("label")
self.label_2 = QtWidgets.QLabel(Form)
self.label_2.setGeometry(QtCore.QRect(400, 60, 54, 12))
self.label_2.setObjectName("label_2")
self.label_3 = QtWidgets.QLabel(Form)
self.label_3.setGeometry(QtCore.QRect(400, 110, 54, 12))
self.label_3.setObjectName("label_3")
self.label_4 = QtWidgets.QLabel(Form)
self.label_4.setGeometry(QtCore.QRect(400, 170, 54, 12))
self.label_4.setObjectName("label_4")
self.pushButton = QtWidgets.QPushButton(Form)
self.pushButton.setGeometry(QtCore.QRect(390, 220, 75, 23))
self.pushButton.setObjectName("pushButton")
self.retranslateUi(Form)
self.pushButton.clicked.connect(self.showname)
QtCore.QMetaObject.connectSlotsByName(Form)
def showname(self):
self.label.setText("leibso")
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Form"))
self.label.setText(_translate("Form", "TextLabel"))
self.label_2.setText(_translate("Form", "TextLabel"))
self.label_3.setText(_translate("Form", "TextLabel"))
self.label_4.setText(_translate("Form", "leibso"))
self.pushButton.setText(_translate("Form", "PushButton"))
if __name__=='__main__':
app = QtWidgets.QApplication(sys.argv)
widget = QtWidgets.QWidget()
ui = Ui_Form()
ui.setupUi(widget)
widget.show()
sys.exit(app.exec_())
mainw.py
from PyQt5 import QtCore, QtGui, QtWidgets
import time
from testgood import Ui_Form
class Ui_MainWindow(object):
def setupUi(self, MainWindow):
self.child = ChildrenForm()
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
MainWindow.setAutoFillBackground(True)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")
self.lcdNumber_2 = QtWidgets.QLCDNumber(self.centralwidget)
self.lcdNumber_2.setGeometry(QtCore.QRect(650, 10, 41, 23))
self.lcdNumber_2.setObjectName("lcdNumber_2")
self.lcdNumber_3 = QtWidgets.QLCDNumber(self.centralwidget)
self.lcdNumber_3.setGeometry(QtCore.QRect(700, 10, 41, 23))
self.lcdNumber_3.setObjectName("lcdNumber_3")
self.lcdNumber_4 = QtWidgets.QLCDNumber(self.centralwidget)
self.lcdNumber_4.setGeometry(QtCore.QRect(750, 10, 41, 23))
self.lcdNumber_4.setObjectName("lcdNumber_4")
self.lcdNumber = QtWidgets.QLCDNumber(self.centralwidget)
self.lcdNumber.setGeometry(QtCore.QRect(600, 10, 41, 23))
self.lcdNumber.setObjectName("lcdNumber")
self.labelIP = QtWidgets.QLabel(self.centralwidget)
self.labelIP.setGeometry(QtCore.QRect(570, 10, 31, 20))
self.labelIP.setCursor(QtGui.QCursor(QtCore.Qt.ArrowCursor))
self.labelIP.setObjectName("labelIP")
self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget)
self.gridLayoutWidget.setGeometry(QtCore.QRect(30, 20, 521, 351))
self.gridLayoutWidget.setObjectName("gridLayoutWidget")
self.MaingridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
self.MaingridLayout.setContentsMargins(0, 0, 0, 0)
self.MaingridLayout.setObjectName("MaingridLayout")
self.ButtonShow = QtWidgets.QPushButton(self.centralwidget)
self.ButtonShow.setGeometry(QtCore.QRect(620, 100, 75, 23))
self.ButtonShow.setObjectName("ButtonShow")
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QtWidgets.QMenuBar(MainWindow)
self.menubar.setGeometry(QtCore.QRect(0, 0, 800, 23))
self.menubar.setObjectName("menubar")
self.menufile = QtWidgets.QMenu(self.menubar)
self.menufile.setObjectName("menufile")
MainWindow.setMenuBar(self.menubar)
self.statusbar = QtWidgets.QStatusBar(MainWindow)
self.statusbar.setObjectName("statusbar")
MainWindow.setStatusBar(self.statusbar)
self.menubar.addAction(self.menufile.menuAction())
self.retranslateUi(MainWindow)
self.ButtonShow.clicked.connect(self.showthewindow)
QtCore.QMetaObject.connectSlotsByName(MainWindow)
def showthewindow(self):
self.MaingridLayout.addChildWidget(self.child)
self.child.show()
def retranslateUi(self, MainWindow):
_translate = QtCore.QCoreApplication.translate
MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
self.labelIP.setText(_translate("MainWindow", "IP"))
self.ButtonShow.setText(_translate("MainWindow", "展示"))
self.menufile.setTitle(_translate("MainWindow", "file"))
class ChildrenForm(Ui_Form,QtWidgets.QWidget):
def __init__(self):
super().__init__()
self.setupUi(self)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
mainwindow = QtWidgets.QMainWindow()
ui = Ui_MainWindow()
ui.setupUi(mainwindow)
mainwindow.show()
sys.exit(app.exec_())
运行结果:
点击显示后:
点击子窗口里面的pushbutton后:
得出结论:
窗口能嵌套,而且能在子窗口中正常运行各个控件
简单注释:
在mainw.py创建的窗口中创建一个grid布局,其大小留意下
然后testgood创建一个窗口和mainw中grid大小一致,最后使用solt和signal机制把按键的响应作为小窗口的显示
当然这是为了更加直观的观看窗口嵌套的效果,如果你们有需要可以直接一开始布局就显示
相信搜这个问题的同学都有点基础,所以就没有过多阐释窗口创建细则
当然如有疑问欢迎留言 + 思考,博主在看到的第一时间给与响应