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


Posted in Python onJune 19, 2019

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

以上这篇pyqt5对用qt designer设计的窗体实现弹出子窗口的示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python 可爱的大小写
Sep 06 Python
Python Web框架Pylons中使用MongoDB的例子
Dec 03 Python
分析python动态规划的递归、非递归实现
Mar 04 Python
用pandas按列合并两个文件的实例
Apr 12 Python
在Python3 numpy中mean和average的区别详解
Aug 24 Python
python实现的汉诺塔算法示例
Oct 23 Python
python3 图片 4通道转成3通道 1通道转成3通道 图片压缩实例
Dec 03 Python
python with语句的原理与用法详解
Mar 30 Python
基于Python实现视频的人脸融合功能
Jun 12 Python
python requests模块的使用示例
Apr 07 Python
Python实现老照片修复之上色小技巧
Oct 16 Python
为了顺利买到演唱会的票用Python制作了自动抢票的脚本
Oct 16 Python
django框架基于模板 生成 excel(xls) 文件操作示例
Jun 19 #Python
python 读写excel文件操作示例【附源码下载】
Jun 19 #Python
解决.ui文件生成的.py文件运行不出现界面的方法
Jun 19 #Python
网易有道2017内推编程题 洗牌(python)
Jun 19 #Python
pyqt实现.ui文件批量转换为对应.py文件脚本
Jun 19 #Python
网易2016研发工程师编程题 奖学金(python)
Jun 19 #Python
PyQt5的安装配置过程,将ui文件转为py文件后显示窗口的实例
Jun 19 #Python
You might like
PHP Ajax实现页面无刷新发表评论
2007/01/02 PHP
深入for,while,foreach遍历时间比较的详解
2013/06/08 PHP
php修改NetBeans默认字体的大小
2013/07/02 PHP
PHP引用符&的用法详细解析
2013/08/22 PHP
php上传大文件失败的原因及应对策略
2015/10/20 PHP
基于jquery的表格排序
2010/09/11 Javascript
客户端 使用XML DOM加载json数据的方法
2010/09/28 Javascript
js实现汉字排序的方法
2015/07/23 Javascript
JavaScript函数参数的传递方式详解
2017/03/06 Javascript
nodejs中使用HTTP分块响应和定时器示例代码
2017/03/19 NodeJs
详解NodeJS框架express的路径映射(路由)功能及控制
2017/03/24 NodeJs
js每隔两秒输出数组中的一项(实例)
2017/05/28 Javascript
Angular.js中下拉框实现渲染html的方法
2017/06/18 Javascript
前端图片懒加载(lazyload)的实现方法(提高用户体验)
2017/08/21 Javascript
Vue多系统切换实现方案
2018/06/05 Javascript
vue-test-utils初使用详解
2019/05/23 Javascript
node删除、复制文件或文件夹示例代码
2019/08/13 Javascript
Vue + Element UI图片上传控件使用详解
2019/08/20 Javascript
[01:13:08]2018DOTA2亚洲邀请赛4.6 淘汰赛 mineski vs LGD 第二场
2018/04/10 DOTA
Python判断操作系统类型代码分享
2014/11/22 Python
Python里disconnect UDP套接字的方法
2015/04/23 Python
python中的不可变数据类型与可变数据类型详解
2018/09/16 Python
对Python 简单串口收发GUI界面的实例详解
2019/06/12 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
CSS3 border-radius圆角的实现方法及用法详解
2020/09/14 HTML / CSS
HTML5本地存储之Database Storage应用介绍
2013/01/06 HTML / CSS
Boda Skins皮衣官网:奢侈皮夹克,全球配送
2016/12/15 全球购物
护士的岗位职责
2013/12/04 职场文书
小学生综合素质评语
2014/04/23 职场文书
2014入党积极分子批评与自我批评思想报告
2014/10/06 职场文书
学校党员干部承诺书
2015/05/04 职场文书
力克胡哲观后感
2015/06/10 职场文书
如何才能写好调研报告?
2019/07/03 职场文书
怎样写好演讲稿题目?
2019/08/21 职场文书
Python使用scapy模块发包收包
2021/05/07 Python