python PyQt5對象類型的判定及對象刪除操作詳細解讀

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的學習")
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_())運行??梢耘卸硞€對象所屬的類型

PyQt5類型判斷案例
根據(jù)所屬類型, 設(shè)置指定的樣式
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QObject的學習")
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("點我")
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_())運行,QLabel顏色都發(fā)生了變化,btn的顏色不變,說明選定了QLabel

PyQt5刪除對象
obj.deleteLater()
刪除一個對象時, 也會解除它與父對象之間的關(guān)系。
deleteLater()并沒有將對象立即銷毀,而是向主消息循環(huán)發(fā)送了一個event,下一次主消息循環(huán)收到這個event之后才會銷毀對象。
這樣做的好處是可以在這些延遲刪除的時間內(nèi)完成一些操作,壞處就是內(nèi)存釋放會不及時。

刪除對象案例
from PyQt5.Qt import *
class Window(QWidget):
def __init__(self):
super().__init__()
self.setWindowTitle("QObject的學習")
self.resize(500, 500)
self.setup_ui()
def setup_ui(self):
self.QObject對象刪除()
def QObject對象刪除(self):
obj1 = QObject()
#為了防止局部變量運行完方法就銷毀,將局部變量賦值給類變量
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_())運行
可以看到obj2并沒有立馬被刪除,立馬打印obj1的子對象和obj2還是能打印出來的
過一段時間,obj2才被刪除

到此這篇關(guān)于python PyQt5對象類型的判定,對象刪除操作詳細解讀的文章就介紹到這了,更多相關(guān)python PyQt5對象類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python實現(xiàn)一個簡單的畢業(yè)生信息管理系統(tǒng)的示例代碼
這篇文章主要介紹了Python實現(xiàn)一個簡單的畢業(yè)生信息管理系統(tǒng)的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2020-06-06
Tensorflow 利用tf.contrib.learn建立輸入函數(shù)的方法
這篇文章主要介紹了Tensorflow 利用tf.contrib.learn建立輸入函數(shù)的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2018-02-02
Python全棧之文件函數(shù)和函數(shù)參數(shù)
這篇文章主要為大家介紹了Python的文件函數(shù)和函數(shù)參數(shù),具有一定的參考價值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助2021-12-12
python使用fcntl模塊實現(xiàn)程序加鎖功能示例
這篇文章主要介紹了python使用fcntl模塊實現(xiàn)程序加鎖功能,較為詳細的分析了fcntl模塊的具體功能并結(jié)合實例形式給出了Python實現(xiàn)程序加鎖的操作技巧,需要的朋友可以參考下2017-06-06
Python機器學習之手寫KNN算法預(yù)測城市空氣質(zhì)量
KNN(K-Nearest Neighbor)最鄰近分類算法是數(shù)據(jù)挖掘分類(classification)技術(shù)中常用算法之一,本文將介紹如何通過KNN算法實現(xiàn)城市空氣質(zhì)量的預(yù)測,感興趣的同學可以了解一下2021-12-12
使用Python中的Playwright制作測試視頻的實現(xiàn)步驟
Playwright 是一種流行的用于測試 Web 應(yīng)用程序的自動化工具,它提供了多種功能來使測試更加高效和可靠,這些功能之一是能夠捕獲測試運行的視頻,在此博客中,田辛老師將探索如何使用 Python 中的 Playwright 制作測試視頻,感興趣的同學可以參考本文自己動手嘗試2023-10-10

