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基于multiprocessing的多进程创建方法
Jun 04 Python
利用Python脚本实现ping百度和google的方法
Jan 24 Python
Python实现Youku视频批量下载功能
Mar 14 Python
Python面向对象编程之继承与多态详解
Jan 16 Python
对Python 内建函数和保留字详解
Oct 15 Python
对python同一个文件夹里面不同.py文件的交叉引用方法详解
Dec 15 Python
Python人脸识别第三方库face_recognition接口说明文档
May 03 Python
Python+OpenCv制作证件图片生成器的操作方法
Aug 21 Python
Python换行与不换行的输出实例
Feb 19 Python
Django使用django-simple-captcha做验证码的实现示例
Jan 07 Python
Python实现归一化算法详情
Mar 18 Python
使用pd.merge表连接出现多余行的问题解决
Jun 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
Zerg剧情介绍
2020/03/14 星际争霸
PHP二维数组的去重问题解析
2011/07/17 PHP
关于查看MSSQL 数据库 用户每个表 占用的空间大小
2013/06/21 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
基于PHP+mysql实现新闻发布系统的开发
2020/08/06 PHP
jquery实现带复选框的表格行选中删除时高亮显示
2013/08/01 Javascript
简单的js表单验证函数
2013/10/28 Javascript
使用js简单实现了tree树菜单
2013/11/20 Javascript
一个可以增加和删除行的table并可编辑表格中内容
2014/06/16 Javascript
Node.js中使用Buffer编码、解码二进制数据详解
2014/08/16 Javascript
使用JS+plupload直接批量上传图片到又拍云
2014/12/01 Javascript
jquery控制页面部分刷新的方法
2015/06/24 Javascript
微信公众号支付H5调用支付解析
2016/11/04 Javascript
基于javascript实现按圆形排列DIV元素(三)
2016/12/02 Javascript
JavaScript对象引用与赋值实例详解
2017/03/15 Javascript
AngularJS实现select的ng-options功能示例
2017/07/12 Javascript
jquery实现用户登陆界面(示例讲解)
2017/09/06 jQuery
jfinal与bootstrap的登出实战详解
2017/11/27 Javascript
vue采用EventBus实现跨组件通信及注意事项小结
2018/06/14 Javascript
Vue.set 全局操作简单示例
2019/09/19 Javascript
jQuery HTML设置内容和属性操作实例分析
2020/05/20 jQuery
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
[05:20]卡尔工作室_DOTA2新手教学_DOTA2超强新手功能
2013/04/22 DOTA
[01:22:10]Ti4 循环赛第二日 DK vs Empire
2014/07/11 DOTA
[01:04:22]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 IG vs EG
2018/04/01 DOTA
python交互式图形编程实例(一)
2017/11/17 Python
Python 通配符删除文件的实例
2018/04/24 Python
Python实现的文本对比报告生成工具示例
2018/05/22 Python
Django框架模板注入操作示例【变量传递到模板】
2018/12/19 Python
Python基于paramunittest模块实现excl参数化
2020/04/26 Python
HTML5实现Notification API桌面通知功能
2016/03/02 HTML / CSS
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
Currentbody德国站:健康与美容技术专家
2020/04/05 全球购物
给小学生的新年寄语
2014/04/04 职场文书
廉政承诺书2015
2015/04/28 职场文书
惊涛骇浪观后感
2015/06/05 职场文书