python PyQt5對象類型的判定及對象刪除操作詳細(xì)解讀
PyQt5類型判定
主要是用來判定一個對象的類型,或者說是否繼承自某個類
相關(guān)API和應(yīng)用場景如下
主要有兩個方法
- isWidgetType() 判斷某個對象是都控件類型
- inherits() 一個對象是否繼承(直接或間接)自某個父類
兩方法返回值均為True或False
類型判斷演示
遍歷對象,判斷對象所屬類型和父類
from PyQt5.Qt import * class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QObject的學(xué)習(xí)") self.resize(500, 500) self.setup_ui() def setup_ui(self): self.QObject類型判定() def QObject類型判定(self): # *************API***************開始 obj = QObject() w = QWidget() btn = QPushButton() label = QLabel() objs = [obj, w, btn, label] for o in objs: print("是否是QWidget的控件類型",o.isWidgetType()) print("父類是否是QWidget",o.inherits("QWidget")) print("父類是否是QPushButton",o.inherits("QPushButton")) print("------------------------------------------") # *************API***************結(jié)束 if __name__ == '__main__': import sys app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
運(yùn)行??梢耘卸硞€對象所屬的類型
PyQt5類型判斷案例
根據(jù)所屬類型, 設(shè)置指定的樣式
from PyQt5.Qt import * class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QObject的學(xué)習(xí)") self.resize(500, 500) self.setup_ui() def setup_ui(self): self.QObject類型判定() def QObject類型判定(self): # *************API***************開始 # obj = QObject() # w = QWidget() # btn = QPushButton() # label = QLabel() # # objs = [obj, w, btn, label] # for o in objs: # print("是否是QWidget的控件類型",o.isWidgetType()) # print("父類是否是QWidget",o.inherits("QWidget")) # print("父類是否是QPushButton",o.inherits("QPushButton")) # print("------------------------------------------") # *************API***************結(jié)束 # *************案例***************開始 label1 = QLabel(self) label1.setText("景天科技苑") label1.move(100, 100) label2 = QLabel(self) label2.setText("科技不間斷") label2.move(150, 150) btn = QPushButton(self) btn.setText("點(diǎn)我") btn.move(200, 200) #循環(huán)遍歷子對象 # for widget in self.findChildren(QLabel): for widget in self.children(): # print(widget) # if widget.isWidgetType(): #將子對象中為QLabel的對象設(shè)置背景樣式 if widget.inherits("QLabel"): widget.setStyleSheet("background-color: cyan;") # *************案例***************結(jié)束 if __name__ == '__main__': import sys app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
運(yùn)行,QLabel顏色都發(fā)生了變化,btn的顏色不變,說明選定了QLabel
PyQt5刪除對象
obj.deleteLater()
刪除一個對象時(shí), 也會解除它與父對象之間的關(guān)系。
deleteLater()并沒有將對象立即銷毀,而是向主消息循環(huán)發(fā)送了一個event,下一次主消息循環(huán)收到這個event之后才會銷毀對象。
這樣做的好處是可以在這些延遲刪除的時(shí)間內(nèi)完成一些操作,壞處就是內(nèi)存釋放會不及時(shí)。
刪除對象案例
from PyQt5.Qt import * class Window(QWidget): def __init__(self): super().__init__() self.setWindowTitle("QObject的學(xué)習(xí)") self.resize(500, 500) self.setup_ui() def setup_ui(self): self.QObject對象刪除() def QObject對象刪除(self): obj1 = QObject() #為了防止局部變量運(yùn)行完方法就銷毀,將局部變量賦值給類變量 self.obj1 = obj1 obj2 = QObject() obj3 = QObject() obj3.setParent(obj2) obj2.setParent(obj1) #創(chuàng)建信號與槽 obj1.destroyed.connect(lambda : print("obj1被釋放了")) obj2.destroyed.connect(lambda : print("obj2被釋放了")) obj3.destroyed.connect(lambda : print("obj3被釋放了")) #刪除對象 # del obj2 #這樣并不能刪除 obj2.deleteLater() print(obj1.children()) #obj2并沒有立馬被釋放 print("obj2",obj2) #執(zhí)行了deleteLater后,向主消息循環(huán)發(fā)送了一個event,下一次主消息循環(huán)收到這個event之后才會銷毀對象,才會真正的去釋放相關(guān)的對象 if __name__ == '__main__': import sys app = QApplication(sys.argv) window = Window() window.show() sys.exit(app.exec_())
運(yùn)行
可以看到obj2并沒有立馬被刪除,立馬打印obj1的子對象和obj2還是能打印出來的
過一段時(shí)間,obj2才被刪除
到此這篇關(guān)于python PyQt5對象類型的判定,對象刪除操作詳細(xì)解讀的文章就介紹到這了,更多相關(guān)python PyQt5對象類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實(shí)現(xiàn)一個簡單的畢業(yè)生信息管理系統(tǒng)的示例代碼
這篇文章主要介紹了Python實(shí)現(xiàn)一個簡單的畢業(yè)生信息管理系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-06-06Tensorflow 利用tf.contrib.learn建立輸入函數(shù)的方法
這篇文章主要介紹了Tensorflow 利用tf.contrib.learn建立輸入函數(shù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02Python全棧之文件函數(shù)和函數(shù)參數(shù)
這篇文章主要為大家介紹了Python的文件函數(shù)和函數(shù)參數(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-12-12python使用fcntl模塊實(shí)現(xiàn)程序加鎖功能示例
這篇文章主要介紹了python使用fcntl模塊實(shí)現(xiàn)程序加鎖功能,較為詳細(xì)的分析了fcntl模塊的具體功能并結(jié)合實(shí)例形式給出了Python實(shí)現(xiàn)程序加鎖的操作技巧,需要的朋友可以參考下2017-06-06Python機(jī)器學(xué)習(xí)之手寫KNN算法預(yù)測城市空氣質(zhì)量
KNN(K-Nearest Neighbor)最鄰近分類算法是數(shù)據(jù)挖掘分類(classification)技術(shù)中常用算法之一,本文將介紹如何通過KNN算法實(shí)現(xiàn)城市空氣質(zhì)量的預(yù)測,感興趣的同學(xué)可以了解一下2021-12-12使用Python中的Playwright制作測試視頻的實(shí)現(xiàn)步驟
Playwright 是一種流行的用于測試 Web 應(yīng)用程序的自動化工具,它提供了多種功能來使測試更加高效和可靠,這些功能之一是能夠捕獲測試運(yùn)行的視頻,在此博客中,田辛老師將探索如何使用 Python 中的 Playwright 制作測試視頻,感興趣的同學(xué)可以參考本文自己動手嘗試2023-10-10Python字符串格式化format()方法運(yùn)用實(shí)例
這篇文章主要給大家介紹了關(guān)于Python字符串格式化format()方法運(yùn)用實(shí)例的相關(guān)資料,字符串格式化是Python編程中十分常用的部分,它可以幫助我們將更具可讀性的數(shù)據(jù)輸出到控制臺或?qū)懭胛募?需要的朋友可以參考下2023-08-08