日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Pyqt 中__init__(self,parent==None) parent理解

發布時間:2025/3/17 编程问答 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Pyqt 中__init__(self,parent==None) parent理解 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

參考:

在PyQt中,所有class都是從QObject派生而來,QWidget對象就可以有一個parent。這種parent-child關系主要用于兩個方面:

  • 沒有parent的QWidget類被認為是最上層的窗體(通常是MainWindow),由于MainWindow的一些操作生成的新窗體對象,parent都應該指向MainWindow。
  • 由于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理解的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。