pyqt窗口嵌套

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机制把按键的响应作为小窗口的显示
当然这是为了更加直观的观看窗口嵌套的效果,如果你们有需要可以直接一开始布局就显示

相信搜这个问题的同学都有点基础,所以就没有过多阐释窗口创建细则
当然如有疑问欢迎留言 + 思考,博主在看到的第一时间给与响应

好的,首先你需要安装 PyQt5 库。可以使用 pip 命令安装: ```python pip install PyQt5 ``` 接下来,你需要创建一个窗口并在窗口上添加一个表格控件。可以使用 Qt Designer 工具创建一个窗口,并在窗口上添加一个表格控件,然后将其保存为一个 .ui 文件。 下面是一个示例代码,它会加载窗口 .ui 文件,并将学生成绩显示在表格中。 ```python from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem from PyQt5.uic import loadUi import csv class MainWindow(QWidget): def __init__(self): super(MainWindow, self).__init__() loadUi('mainwindow.ui', self) self.load_data() def load_data(self): # 从 CSV 文件中读取学生成绩 with open('scores.csv', 'r', newline='') as csvfile: reader = csv.reader(csvfile) data = list(reader) # 设置表格行列数 self.tableWidget.setRowCount(len(data)) self.tableWidget.setColumnCount(len(data[0])) # 设置表头 header = ['学号', '姓名', '科目1', '科目2', '科目3', '总分'] self.tableWidget.setHorizontalHeaderLabels(header) # 填充表格数据 for i in range(len(data)): for j in range(len(data[i])): item = QTableWidgetItem(data[i][j]) self.tableWidget.setItem(i, j, item) # 计算总分并设置样式 for i in range(len(data)): total = sum([int(x) for x in data[i][2:5]]) item = QTableWidgetItem(str(total)) self.tableWidget.setItem(i, 5, item) if total < 180: self.tableWidget.item(i, 5).setBackground(Qt.red) elif total < 210: self.tableWidget.item(i, 5).setBackground(Qt.yellow) else: self.tableWidget.item(i, 5).setBackground(Qt.green) if __name__ == '__main__': app = QApplication([]) window = MainWindow() window.show() app.exec_() ``` 在这个示例代码中,我们使用 `QTableWidget` 控件来显示学生成绩,并使用 `csv` 模块来读取 CSV 文件中的数据。我们还计算了每个学生的总分,并根据总分的值设置了表格单元格的样式。你可以根据自己的需要修改代码。
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值