问题描述:
想使用PyQt5 点击后弹出一个新窗口

思路:
0: 首先得绘制一个窗口
1: 一个点击按钮 【 初始化 —> 布局 —> 触发新窗口 】
2: 引入另外一个文件的窗口展示 【 这个窗口也可以单独运行 】

图片演示:
PyQt5点击后弹窗新窗口

代码:

这个方法,指向新的文件 layout1

def layoutFn(self):
    """
    想要有新的窗口, 引用其它已经写好的类
    """
    import layout1 # 这个是可以单独运行的窗口
    self.one = layout1.Layout1()
    self.one.show()

layout1.py 这个文件也可以单独运行

import sys
from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication  ,QWidget ,QFormLayout , QLineEdit, QLabel

class Layout1(QWidget):
    def __init__(self,parent=None):
        super(Layout1,self).__init__(parent)
        self.setWindowTitle("排列组合") 
        self.resize(400, 100)  

        fromlayout = QFormLayout()
        labl1 = QLabel("标签1")
        lineEdit1 = QLineEdit()
        labl2 = QLabel("标签2")
        lineEdit2 = QLineEdit()
        labl3 = QLabel("标签3")
        lineEdit3 = QLineEdit()

        fromlayout.addRow(labl1, lineEdit1)
        fromlayout.addRow(labl2, lineEdit2)
        fromlayout.addRow(labl3, lineEdit3)

        self.setLayout(fromlayout)

    def closeEvent(self, event):
        reply = QtWidgets.QMessageBox.question(self, '警告', '退出后测试将停止,你确认要退出吗?', QtWidgets.QMessageBox.Yes, QtWidgets.QMessageBox.No)
        if reply == QtWidgets.QMessageBox.Yes:
            event.accept()
        else:
            event.ignore()

if __name__ == "__main__":  
        app = QApplication(sys.argv) 
        form = Layout1()
        form.show()
        sys.exit(app.exec_())

图示的完整代码:

主文件:

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'd:\python code\07ClassRoom.ui'
#
# Created by: PyQt5 UI code generator 5.15.4
#
# WARNING: Any manual changes made to this file will be lost when pyuic5 is
# run again.  Do not edit this file unless you know what you are doing.

import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMessageBox, QPushButton, QFormLayout, QLineEdit, QWidget

class Ui_classRoom(object):
    def createTable(self, columnNmb, rowsNmb):
        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(90, 70, 500, 300))
        self.tableWidget.setMinimumSize(QtCore.QSize(480, 0))
        self.tableWidget.setShowGrid(False)
        self.tableWidget.setGridStyle(QtCore.Qt.DashLine)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(columnNmb)
        self.tableWidget.setRowCount(self)

        for i in range(columnNmb): # 生产纵向 item
            item = QtWidgets.QTableWidgetItem()
            item.setTextAlignment(QtCore.Qt.AlignCenter)
            self.tableWidget.setVerticalHeaderItem(i, item)
        
        for i in range(rowsNmb): # 生产横向 item
            item = QtWidgets.QTableWidgetItem()
            item.setTextAlignment(QtCore.Qt.AlignCenter)
            self.tableWidget.setHorizontalHeaderItem(i, item)

        for i in range(columnNmb):  # 把 item 根据坐标放入
            for j in range(rowsNmb):
                item = QtWidgets.QTableWidgetItem()
                item.setTextAlignment(QtCore.Qt.AlignCenter)
                self.tableWidget.setItem(j, i, item)

        self.tableWidget.horizontalHeader().setVisible(True)
        self.tableWidget.horizontalHeader().setCascadingSectionResizes(False)
        self.tableWidget.horizontalHeader().setHighlightSections(True)
        self.tableWidget.horizontalHeader().setMinimumSectionSize(40)
        self.tableWidget.verticalHeader().setDefaultSectionSize(30)

    def setupUi(self, classRoom):
        classRoom.setObjectName("classRoom")
        classRoom.resize(637, 561)
        self.centralwidget = QtWidgets.QWidget(classRoom)
        self.centralwidget.setObjectName("centralwidget")
        self.pulpit = QtWidgets.QLineEdit(self.centralwidget)
        self.pulpit.setGeometry(QtCore.QRect(200, 400, 200, 50))
        self.pulpit.setStyleSheet("font: 26pt \"楷体\";")
        self.pulpit.setObjectName("pulpit")

        self.tableWidget = QtWidgets.QTableWidget(self.centralwidget)
        self.tableWidget.setGeometry(QtCore.QRect(90, 70, 480, 260))
        self.tableWidget.setMinimumSize(QtCore.QSize(480, 0))
        self.tableWidget.setShowGrid(False)
        self.tableWidget.setGridStyle(QtCore.Qt.DashLine)
        self.tableWidget.setObjectName("tableWidget")
        self.tableWidget.setColumnCount(3)
        self.tableWidget.setRowCount(4)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setVerticalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setVerticalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setVerticalHeaderItem(2, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setVerticalHeaderItem(3, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setHorizontalHeaderItem(0, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setHorizontalHeaderItem(1, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setHorizontalHeaderItem(2, item)

        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setItem(0, 0, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setItem(0, 1, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setItem(0, 2, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)

        self.tableWidget.setItem(1, 0, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setItem(1, 1, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setItem(1, 2, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setItem(2, 0, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setItem(2, 1, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setItem(2, 2, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setItem(3, 0, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setItem(3, 1, item)
        item = QtWidgets.QTableWidgetItem()
        item.setTextAlignment(QtCore.Qt.AlignCenter)
        self.tableWidget.setItem(3, 2, item)

        self.tableWidget.horizontalHeader().setVisible(True)
        self.tableWidget.horizontalHeader().setCascadingSectionResizes(False)
        self.tableWidget.horizontalHeader().setHighlightSections(True)
        self.tableWidget.horizontalHeader().setMinimumSectionSize(40)
        self.tableWidget.verticalHeader().setDefaultSectionSize(30)

        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(92, 10, 481, 20))
        self.lineEdit.setObjectName("lineEdit")
        classRoom.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(classRoom)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 637, 21))
        self.menubar.setObjectName("menubar")
        self.menu = QtWidgets.QMenu(self.menubar)
        self.menu.setObjectName("menu")
        classRoom.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(classRoom)
        self.statusbar.setObjectName("statusbar")
        classRoom.setStatusBar(self.statusbar)
        self.toLayout = QtWidgets.QAction(classRoom)
        self.toLayout.setObjectName("toLayout")
        self.menu.addAction(self.toLayout)
        self.menubar.addAction(self.menu.menuAction())

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

    def retranslateUi(self, classRoom):
        _translate = QtCore.QCoreApplication.translate
        classRoom.setWindowTitle(_translate("classRoom", "MainWindow"))
        self.pulpit.setText(_translate("classRoom", "   讲台"))
        item = self.tableWidget.verticalHeaderItem(0)
        item.setText(_translate("classRoom", "第一排"))
        item = self.tableWidget.verticalHeaderItem(1)
        item.setText(_translate("classRoom", "第二排"))
        item = self.tableWidget.verticalHeaderItem(2)
        item.setText(_translate("classRoom", "第三排"))
        item = self.tableWidget.verticalHeaderItem(3)
        item.setText(_translate("classRoom", "第四排"))
        item = self.tableWidget.horizontalHeaderItem(0)
        item.setText(_translate("classRoom", "第一列"))
        item = self.tableWidget.horizontalHeaderItem(1)
        item.setText(_translate("classRoom", "第二列"))
        item = self.tableWidget.horizontalHeaderItem(2)
        item.setText(_translate("classRoom", "第三列"))
        __sortingEnabled = self.tableWidget.isSortingEnabled()
        self.tableWidget.setSortingEnabled(False)
        item = self.tableWidget.item(0, 0)
        item.setText(_translate("classRoom", "零零"))
        item = self.tableWidget.item(0, 1)
        item.setText(_translate("classRoom", "空一"))
        item = self.tableWidget.item(0, 2)
        item.setText(_translate("classRoom", "空二"))
        item = self.tableWidget.item(1, 0)
        item.setText(_translate("classRoom", "姚一"))
        item = self.tableWidget.item(1, 1)
        item.setText(_translate("classRoom", "不二"))
        item = self.tableWidget.item(1, 2)
        item.setText(_translate("classRoom", "张三"))
        item = self.tableWidget.item(2, 0)
        item.setText(_translate("classRoom", "李四"))
        item = self.tableWidget.item(2, 1)
        item.setText(_translate("classRoom", "王五"))
        item = self.tableWidget.item(2, 2)
        item.setText(_translate("classRoom", "六六"))
        item = self.tableWidget.item(3, 0)
        item.setText(_translate("classRoom", "小七"))
        item = self.tableWidget.item(3, 1)
        item.setText(_translate("classRoom", "铁八"))
        item = self.tableWidget.item(3, 2)
        item.setText(_translate("classRoom", "永久"))
        self.tableWidget.setSortingEnabled(__sortingEnabled)
        self.lineEdit.setText(_translate("classRoom", "                                 黑板报"))

        self.menu.setTitle(_translate("classRoom", "初始化"))
        self.toLayout.setText(_translate("classRoom", "布局"))
        self.toLayout.triggered.connect(self.layoutFn) 
    def layoutFn(self):
        """
        想要有新的窗口, 引用其它已经写好的类
        """
        import layout1 # 这个是可以单独运行的窗口
        self.one = layout1.Layout1()
        self.one.show()

if __name__ == "__main__":
    app = QtWidgets.QApplication(sys.argv)
    widget = QtWidgets.QMainWindow()
    window = Ui_classRoom()
    window.setupUi(widget)
    widget.show()
    sys.exit(app.exec())

上面的 layout1.py 文件

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐