pyqt5对用qt designer设计的窗体实现弹出子窗口

1. 用qt designer编写主窗体,窗体类型是MainWindow,空白窗口上一个按钮。并转换成mainWindow.py

# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file 'f.ui'
#
# Created by: PyQt5 UI code generator 5.9
#
# WARNING! All changes made in this file will be lost!
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(800, 600)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(80, 90, 75, 23))
        self.pushButton.setObjectName("pushButton")
        MainWindow.setCentralWidget(self.centralwidget)
        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)
    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "MainWindow"))
        self.pushButton.setText(_translate("MainWindow", "PushButton"))

2. 用qt designer编写子窗体,窗体类型是Dialog, 空白窗口上一个按钮。并转换成childWindow.py

from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Dialog(object):
    def setupUi(self, Dialog):
        Dialog.setObjectName("Dialog")
        Dialog.resize(400, 300)
        self.pushButton = QtWidgets.QPushButton(Dialog)
        self.pushButton.setGeometry(QtCore.QRect(160, 100, 75, 23))
        self.pushButton.setObjectName("pushButton")
        Dialog.setWindowFlags(QtCore.Qt.WindowStaysOnTopHint)    #设置窗体总显示在最上面
        self.retranslateUi(Dialog)
        QtCore.QMetaObject.connectSlotsByName(Dialog)
    def retranslateUi(self, Dialog):
        _translate = QtCore.QCoreApplication.translate
        Dialog.setWindowTitle(_translate("Dialog", "Dialog"))
        self.pushButton.setText(_translate("Dialog", "PushButton"))

3,编写调用程序,这个重点

import sys
from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog
from dust.mainWindow import *
from dust.childWindow import *

if __name__ == '__main__':
    app = QApplication(sys.argv)
     #实例化主窗口
    main = QMainWindow()  
    main_ui = Ui_MainWindow()
    main_ui.setupUi(main )
    #实例化子窗口
    child = QDialog()           
    child_ui = Ui_Dialog()
    child_ui.setupUi(child)
   
    #按钮绑定事件
    btn = main_ui.pushButton
    btn.clicked.connect( child.show ) 
   
   #显示
    main.show()
    sys.exit(app.exec_())

4. 上面的程序只是能显示了,要想添加自定义事件,还不行,新建一个文件action.py,加自定义事件,有一个办法是再封装一个类,主窗体和子窗体都如此。

import sys

from PyQt5.QtCore import Qt
from PyQt5.QtGui import QPixmap, QPainter
from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog
from mainWindow import *
from childWindow import *


# mainWindow
class MyMainWindow(QMainWindow, Ui_MainWindow):
    def __init__(self):
        super(MyMainWindow, self).__init__()
        self.setupUi(self)

        self.setGeometry(0, 0, 1024, 600)
        self.setWindowTitle('main window')

    def paintEvent(self, event):
        painter = QPainter(self)
        pixmap = QPixmap("./image/bg.jpg")
        painter.drawPixmap(self.rect(), pixmap)

    def keyPressEvent(self, e):
        if e.key() == Qt.Key_Escape:
            self.close()


class ChildWindow(QDialog, Ui_Dialog):
    def __init__(self):
        super(ChildWindow, self).__init__()
        self.setupUi(self)

        self.setWindowTitle('child window')

        self.pushButton.clicked.connect(self.btnClick)  # 按钮事件绑定

    def btnClick(self):  # 子窗体自定义事件
        self.close()


if __name__ == '__main__':
    app = QApplication(sys.argv)

    main = MyMainWindow()

    child = ChildWindow()

    btn = main.pushButton  # 主窗体按钮事件绑定
    btn.clicked.connect(child.show)

    main.show()
    sys.exit(app.exec_())

5、文件目录结构如图1所示,运行action.py,效果如下图所示。

在这里插入图片描述

图1

在这里插入图片描述

图2

本文由https://blog.csdn.net/wzxxtt62267018/article/details/80897185整理而来,并修改了一些小错误,最后附上效果图。

附上源码资源

https://download.csdn.net/download/qq_28077617/61063024

猜你喜欢

转载自blog.csdn.net/qq_28077617/article/details/121878969
今日推荐