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


    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. 上面的程序只是能显示了,要想添加自定义事件,还不行,加自定义事件,有一个办法是再封装一个类,主窗体和子窗体都如此。

    import sys
    from PyQt5.QtWidgets import QApplication, QMainWindow, QDialog
    from dust.mainWindow import *
    from dust.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_())
  • 相关阅读:
    vscode 编辑器
    spring boot配置文件加密报错Failed to bind properties
    maven nexus setting配置
    秒杀系统Java设计攻略,一看就明白!
    macbook java开发Ceph加密客户端服务遇到“The Bouncy castle library jar is required on the classpath to enable authenticated encryption”问题
    复盘会议模板
    git 当前分支修改提交到其他分支
    手动搭建webpack +vue3.2.x 项目
    发布订阅模式ts
    win 工具
  • 原文地址:https://www.cnblogs.com/valorchang/p/11399672.html
Copyright © 2020-2023  润新知