zoukankan      html  css  js  c++  java
  • 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_())
  • 相关阅读:
    Java实现 蓝桥杯VIP 算法训练 一元三次方程
    Java实现 蓝桥杯VIP 算法训练 乘法表
    Java实现 蓝桥杯VIP 算法训练 矩阵加法
    Java实现 蓝桥杯VIP 算法训练 一元三次方程
    Java实现 蓝桥杯VIP 算法训练 平方计算
    Java实现 蓝桥杯VIP 算法训练 平方计算
    Java实现 蓝桥杯VIP 算法训练 平方计算
    Java实现 蓝桥杯VIP 算法训练 乘法表
    Java实现 蓝桥杯VIP 算法训练 乘法表
    监管只是压倒网盘业务的一根稻草,但不是主要原因(答案只有一个:成本!)
  • 原文地址:https://www.cnblogs.com/valorchang/p/11399672.html
Copyright © 2011-2022 走看看