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

作者:wzxxtt62267018 时间:2023-01-28 12:58:07 

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_())

来源:https://blog.csdn.net/wzxxtt62267018/article/details/80897185

标签:pyqt5,qt,designer,子窗口
0
投稿

猜你喜欢

  • php进程daemon化的正确实现方法

    2023-10-01 09:14:09
  • 细化解析:轻松掌握怎样测试 MySQL安装

    2009-01-14 11:54:00
  • 下拉列表两级连动的新方法(二)

    2009-06-04 18:22:00
  • ASP程序中使用断开的数据记录集

    2007-10-17 18:51:00
  • python日期相关操作实例小结

    2021-07-14 18:39:13
  • ul设置浮动后不能自适应高度

    2011-01-25 12:48:00
  • 如何判断SQL语句是否执行了?

    2010-01-12 20:03:00
  • ASP的URLDecode函数URLEncode解码函数

    2011-02-16 11:17:00
  • MySQL与PHP的基础与应用专题之数据控制

    2023-11-23 01:03:21
  • Oracle不同数据库间对比分析脚本

    2010-07-26 13:24:00
  • js调用flash代码

    2010-01-23 12:35:00
  • Go语言学习之反射的用法详解

    2023-06-16 06:40:40
  • 优化MySQL的数据库性能的八种方法

    2012-01-05 19:28:53
  • 4款Javascript放大镜特效脚本

    2009-10-14 20:46:00
  • oracle怎样修改表名、列名、字段类型、添加表列、删除表列

    2010-07-23 11:10:00
  • php生成随机数/生成随机字符串的方法小结【5种方法】

    2023-09-05 20:23:21
  • Python实现比较两个列表(list)范围

    2022-07-20 18:08:04
  • AXObject解决IE需要激活 ActiveX 控件方法

    2007-11-08 12:16:00
  • mysql myisam 优化设置

    2010-03-25 10:18:00
  • PHP5中使用DOM控制XML实现代码

    2023-09-30 09:00:07
  • asp之家 网络编程 m.aspxhome.com