参考:

在PyQt中,所有class都是从QObject派生而来,QWidget对象就可以有一个parent。这种parent-child关系主要用于两个方面:

  1. 没有parent的QWidget类被认为是最上层的窗体(通常是MainWindow),由于MainWindow的一些操作生成的新窗体对象,parent都应该指向MainWindow。
  2. 由于parent-child关系的存在,它保证了child窗体在主窗体被回收之时也被回收。

parent作为构造函数的最后一个参数被传入,但通常情况下不必显示去指定parent对象。因为当调用局管理器时,部局管理器会自动处理这种parent-child关系。但是在一些特殊的情况下,我们必须显示的指定parent-child关系。如当生成的子类不是QWidget对象但继承了QObject对象,用作dock widgets的QWidget对象。

我们可以看到,对象之间有了依赖和生命周期,把IOC容器运用到GUI编程中是自然而然的事情了。

参考来自: http://blog.csdn.net/thumb3344/article/details/5644789

示例说明:

新建三个文件,分别为 calc.ui 、    calc_logic.py   、  main.py   其中:

calc.ui 为Ui设计文件, 需要转换为calc.py

calc_logic.py 是calc的实现逻辑部分

main.py 是项目的主入口文件

calc.ui 

 1 <?xml version="1.0" encoding="UTF-8"?>
 2 <ui version="4.0">
 3  <class>calc</class>
 4  <widget class="QWidget" name="calc">
 5   <property name="geometry">
 6    <rect>
 7     <x>0</x>
 8     <y>0</y>
 9     <width>400</width>
10     <height>300</height>
11    </rect>
12   </property>
13   <property name="windowTitle">
14    <string>Form</string>
15   </property>
16   <widget class="QPushButton" name="pushButton_ok">
17    <property name="geometry">
18     <rect>
19      <x>130</x>
20      <y>160</y>
21      <width>75</width>
22      <height>23</height>
23     </rect>
24    </property>
25    <property name="text">
26     <string>提示</string>
27    </property>
28   </widget>
29  </widget>
30  <resources/>
31  <connections/>
32 </ui>

我们将calc.ui 转换为calc.py文件

 1 # -*- coding: utf-8 -*-
 2
 3 # Form implementation generated from reading ui file 'calc.ui'
 4 #
 5 # Created: Wed Jan 28 11:28:59 2015
 6 #      by: PyQt4 UI code generator 4.10.3
 7 #
 8 # WARNING! All changes made in this file will be lost!
 9
10 from PyQt4 import QtCore, QtGui
11
12 try:
13     _fromUtf8 = QtCore.QString.fromUtf8
14 except AttributeError:
15     def _fromUtf8(s):
16         return s
17
18 try:
19     _encoding = QtGui.QApplication.UnicodeUTF8
20     def _translate(context, text, disambig):
21         return QtGui.QApplication.translate(context, text, disambig, _encoding)
22 except AttributeError:
23     def _translate(context, text, disambig):
24         return QtGui.QApplication.translate(context, text, disambig)
25
26 class Ui_calc(object):
27     def setupUi(self, calc):
28         calc.setObjectName(_fromUtf8("calc"))
29         calc.resize(400, 300)
30         self.pushButton_ok = QtGui.QPushButton(calc)
31         self.pushButton_ok.setGeometry(QtCore.QRect(130, 160, 75, 23))
32         self.pushButton_ok.setObjectName(_fromUtf8("pushButton_ok"))
33
34         self.retranslateUi(calc)
35         QtCore.QMetaObject.connectSlotsByName(calc)
36
37     def retranslateUi(self, calc):
38         calc.setWindowTitle(_translate("calc", "Form", None))
39         self.pushButton_ok.setText(_translate("calc", "提示", None))
40
41
42 if __name__ == "__main__":
43     import sys
44     app = QtGui.QApplication(sys.argv)
45     calc = QtGui.QWidget()
46     ui = Ui_calc()
47     ui.setupUi(calc)
48     calc.show()
49     sys.exit(app.exec_())

新建calc_logic.py 文件,文件内容:

 1 # -*- coding: utf-8 -*-
 2 from  PyQt4 import  QtGui, QtCore
 3 from  calc import  Ui_calc  # 引入Ui
 4
 5
 6
 7 class calc_logic(QtGui.QWidget):
 8     def __init__(self,parent=None):
 9         super(calc_logic,self).__init__(parent)
10         self.Ui=Ui_calc()  # 实例化 Ui
11         self.Ui.setupUi(self) # 初始化Ui
12         self.setWindowTitle('calc_logic Widget')
13
14         self.connect(self.Ui.pushButton_ok,QtCore.SIGNAL('clicked()'),self.dialogx)
15
16     def dialogx(self):
17         if __name__=='__main__':
18             QtGui.QMessageBox.information(self, (u'提示'),(u'  来自calc_logic文件请求!     '),QtGui.QMessageBox.Yes )
19         elif __name__=='calc_logic':
20             QtGui.QMessageBox.information(self, (u'提示'),(u'  来自main文件请求!     '),QtGui.QMessageBox.Yes )
21
22
23 if __name__ == "__main__":
24     import sys
25     app = QtGui.QApplication(sys.argv)
26     calc =calc_logic()
27     calc.show()
28     sys.exit(app.exec_())

新建入口文件main.py

 1 # -*- coding: utf-8 -*-
 2 '''
 3  main 主文件
 4 '''
 5 from  PyQt4 import  QtGui
 6 import sys
 7 from calc_logic import calc_logic   # 引入Ui的逻辑文件
 8
 9
10 class maincalc(QtGui.QWidget):
11     def __init__(self):
12         super(maincalc,self).__init__()
13         self.setWindowTitle('main Widget')
14         self.Ui=calc_logic(self) # 实例化 calc_logic
15
16
17
18
19 if __name__ == "__main__":
20     import sys
21     app = QtGui.QApplication(sys.argv)
22     appcalc =maincalc()
23     appcalc.show()
24     sys.exit(app.exec_())

我们先运行calc_logic.py :

然后修改calc_logic.py 中__init__初试方法

1 def __init__(self,parent=None):
2         super(calc_logic,self).__init__(parent)

改为:

1 def __init__(self):
2         super(calc_logic,self).__init__()

修改main.py 初始化calc_logic改为:

1 self.Ui=calc_logic()

运行效果:

将mian.py 改回带self参数:

1 self.Ui=calc_logic(self)

将clac_logic.py 同样改回带parent参数:

1 def __init__(self,parent=None):
2         super(calc_logic,self).__init__(parent)

在运行main.py :

Pyqt 中__init__(self,parent==None) parent理解相关推荐

  1. PyQt中如何在子部件(child Widget)中调用父部件(parent Widget)中的方法

    如果你也想赚钱,实现财务自由,但接触不到优质的人脉和资源,可以到公June浩:成长home,发"资源" ,就会看到我吐血整理的168条保姆级零基础吸金秘籍,跟着我一起亲历毕业5年. ...

  2. QT 烦人的parent该如何理解

    对话框是GUI程序和用户进行简短交互的顶层窗口,所谓顶层窗口即始终在主窗口之上显示.QDialog是Qt所有类型的对话框窗口的基类,它继承于QWidget,是一种容器类型组件.   QWidget是所 ...

  3. vue2开发中$emit 、$on 、$once 、$off 的使用, vue中$root、$refs、$parent 的使用

    一.vue2开发中$emit .$on .$once .$off  的使用 简单概述: 1.vm.$emit(eventName,callback) 和 $on(eventName,callback) ...

  4. MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow)的理解(即c++参数初始)

    MainWindow::MainWindow( QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) {} 一直对这句话理解有误 ...

  5. PYQT中QThread输出到textBrowser

    问题概述 在PYQT中,有时我们会需要将log信息等实时打印到ui控件上,但是由于PYQT的进程保护机制,我们无法像使用print函数中那样,直接使用就能打印出来信息.所以通常都会发现,PYQT中的U ...

  6. 在PyQt中构建 Python 菜单栏、菜单和工具栏

    摘要:菜单.工具栏和状态栏是大多数GUI 应用程序的常见且重要的图形组件.您可以使用它们为您的用户提供一种快速访问应用程序选项和功能的方法. 本文分享自华为云社区<Python 和 PyQt:创 ...

  7. 简单说说对QT中moveToThread实现多线程操作的理解

      在平时的编码过程中经常碰到QT的多线程问题,也大量接触了QT中的两种主流多线程写法,一种是继承QThread类并重载run函数,在run函数中写一个状态机或者计时器来实现对线程运作:一种是通过mo ...

  8. python编程定义圆_Python语言编程系列014——PyQt中自定义圆形指示灯

    背景 PyQt是Qt界面库在Python下的绑定库,为熟悉或喜欢Qt的开发者在Python语言下编写GUI界面程序提供了极大的便利,关于自定义控件前面已经给出了两个例子,分别是自定义颜色指示框控件和自 ...

  9. 2021秋季《数据结构》_EOJ 1063.树的双亲存储法(parent+child / parent)

    题目 前面介绍了树的链式存储结构,那么如何用顺序存储来存储一棵树呢?在顺序存储时,我们除了存储每个结点值外,还要存储树中结点与结点之间的逻辑关系(即双亲与孩子结点之间的关系).下面介绍树的双亲存储法. ...

最新文章

  1. python翻译文档地址
  2. Android Studio:missing feature Watch
  3. 数字翻滚效果 HTML,js数字翻动效果 数字翻成中文怎么翻
  4. git查看分支记录_git原理
  5. Codeforces Round #506 (Div. 3) - E. Tree with Small Distances
  6. Bootstrap-CSS:表格
  7. 关于SQL优化这些你了解吗?
  8. Python 字符串 String 内建函数大全(1)
  9. 定义加密函数程序python_一个python自定义的加密解密函数
  10. 高能!8段代码演示Numpy数据运算的神操作
  11. Webpack实战(六):如何优雅地运用样式CSS预处理
  12. 自动部署java项目,热部署方式
  13. [POJ1743]Musical Theme
  14. csrss.exe病毒查杀
  15. 算术逻辑运算单元ALU的串行和并行加法器
  16. 10倍性能提升!英伟达新卡皇降临,图灵架构GTX 20系列发布
  17. blos硬盘启动台式计算机,bios设置硬盘启动,最全的bios设置硬盘启动详细方法(两种模式)...
  18. bzoj4453 cys就是要拿英魂!(后缀数组+单调栈+二分)
  19. 2020ICPC·小米 网络选拔赛第一场(Matrix Subtraction (二维差分))
  20. RGB颜色空间与Lab颜色空间区别与联系(附转换代码)

热门文章

  1. 树:二叉树的内存拷贝和内存释放
  2. Java知识系统回顾整理01基础03变量03字面值
  3. 小弟带你走进VUE中input最大值设置出现的问题以及黑科技解决方案
  4. Centos 下PHP编译安装fileinfo扩展
  5. springMVC接受参数总结
  6. [LeetCode]15. 3Sum
  7. 深入JS正则先行断言
  8. vue中的方法如何暴露给webview,使安卓和iOS可以调用
  9. [cogs1065]绿豆蛙的归宿
  10. 使用ASP .NET (C#) 產生PDF檔的好幫手—iTextSharp library (上)