最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2024年07月18日 09:43:14   作者:景天科技苑  
PyQt5主要是用來判定一個對象的類型,或者說是否繼承自某個類,本文給大家介紹python PyQt5對象類型的判定,對象刪除操作詳細解讀,感興趣的朋友一起看看吧

PyQt5類型判定

主要是用來判定一個對象的類型,或者說是否繼承自某個類
相關API和應用場景如下
主要有兩個方法

  • 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***************結束
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

運行??梢耘卸硞€對象所屬的類型

PyQt5類型判斷案例

根據(jù)所屬類型, 設置指定的樣式

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***************結束
        # *************案例***************開始
        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的對象設置背景樣式
            if widget.inherits("QLabel"):
                widget.setStyleSheet("background-color: cyan;")
        # *************案例***************結束
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

運行,QLabel顏色都發(fā)生了變化,btn的顏色不變,說明選定了QLabel

PyQt5刪除對象

obj.deleteLater()
刪除一個對象時, 也會解除它與父對象之間的關系。
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之后才會銷毀對象,才會真正的去釋放相關的對象
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

運行
可以看到obj2并沒有立馬被刪除,立馬打印obj1的子對象和obj2還是能打印出來的
過一段時間,obj2才被刪除

到此這篇關于python PyQt5對象類型的判定,對象刪除操作詳細解讀的文章就介紹到這了,更多相關python PyQt5對象類型內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

您可能感興趣的文章:

相關文章

最新評論

甘洛县| 金寨县| 孝义市| 泊头市| 阿城市| 惠东县| 车险| 广平县| 乡宁县| 遵义县| 承德市| 苍溪县| 龙胜| 获嘉县| 苏尼特右旗| 青铜峡市| 米脂县| 张家港市| 陇川县| 彭泽县| 蓬莱市| 潜江市| 金山区| 永靖县| 中江县| 兴国县| 扬中市| 宁波市| 鹤壁市| 昌黎县| 大冶市| 南投县| 文水县| 桂林市| 砚山县| 唐河县| 沙河市| 永城市| 龙里县| 昌邑市| 金塔县|