QObject類型判定
常用的API
-
isWidgetType()
方法:- 使用方式:obj.isWidgetType()
- 作用:判斷一個對象是否為QWidget及其子類的實例。QWidget是QObject的子類,用于創(chuàng)建用戶界面的窗口組件。
- 返回值:如果是QWidget及其子類的實例,則返回True;否則返回False。
- 以下為
isWidgetType()
的使用示例:
from PyQt5.QtWidgets import *
from PyQt5.QtCore import QObject
import sys
class Window(QMainWindow):
def __init__(self, parent=None):
super().__init__(parent)
self.steup_ui()
def steup_ui(self):
self.QObject_type_determination()
# QObject類型判定
def QObject_type_determination(self):
obj = QObject()
wid = QWidget()
btn = QPushButton()
label = QLabel()
objs = [obj, wid, btn, label]
for o in objs:
print(o.isWidgetType()) # 判斷某個對象是否是控件類
if __name__ == '__main__':
app = QApplication(sys.argv)
window = Window()
window.show()
sys.exit(app.exec_())
運行結(jié)果:
-
inherits()
方法:- 使用方式:obj.inherits(class_name)
- 作用:判斷一個對象是否為指定類名或其子類的實例。
- 參數(shù):class_name為一個字符串,即類名。
- 返回值:如果是指定類名或其子類的實例,則返回True;否則返回False。
- 以下為
inherits()
的使用示例(基于以上程序進行修改):
for o in objs:
print(o.inherits("QPushButton")) # 判斷某個對象是否是控件類
運行結(jié)果:
需要注意的是,isWidgetType()和inherits()方法同樣需要導入QtCore模塊中的QObject類。這兩個方法在QObject及其派生類中都可以使用。
應用場景:過濾篩選控件
案例:創(chuàng)建一個窗口,包含多個QLabel或其他控件。
要求:將包含在窗口內(nèi)所有的QLabel控件,設(shè)置背景色cyan。
以下為實現(xiàn)本次案例的代碼:
# QObject類型判定
def QObject_type_determination(self):
label = QLabel(self)
label.setText('我要學習')
label.move(50, 0)
label2 = QLabel(self)
label2.setText("PyQt5")
label2.move(50, 50)
btn = QPushButton(self)
btn.setText("開始學習")
btn.move(50, 100)
for widget in self.children():
if widget.inherits("QLabel"):
widget.setStyleSheet("background-color: cyan;")
# # 或者
# for widget in self.findChildren(QLabel):
# widget.setStyleSheet("background-color: cyan;")
運行結(jié)果:
QObject定時器
常用API
在PyQt中,QObject類提供了定時器相關(guān)的API,包括startTimer、killTimer和timerEvent方法。
-
startTimer()
方法:- 使用方式:
interval = obj.startTimer(msec)
- 作用:啟動一個定時器,在經(jīng)過指定的毫秒數(shù)后觸發(fā)定時器事件。定時器事件將被發(fā)送到obj的timerEvent()方法。
- 參數(shù):msec為定時器的觸發(fā)時間,單位為毫秒。
- 返回值:返回定時器的唯一標識符。
- 使用方式:
-
killTimer()
方法:- 使用方式:
obj.killTimer(timerId)
- 作用:停止指定標識符對應的定時器。
- 參數(shù):timerId為定時器的唯一標識符。
- 使用方式:
-
timerEvent()
方法:- 使用方式:def timerEvent(self, event)
- 作用:當定時器事件觸發(fā)時,Qt會自動調(diào)用該方法處理定時器事件。
- 參數(shù):event為事件對象,包含了定時器的標識符和相關(guān)信息。
注意:timerEvent()方法是QObject的保護方法,需要在子類中重新實現(xiàn)。該方法會在定時器事件觸發(fā)時自動被調(diào)用。
應用場景
一般在輪詢、倒計時等場景下使用。
案例:創(chuàng)建一個窗口,并設(shè)置一個子控件QLabel。
要求:展示10s倒計時,倒計時結(jié)束就停止計時。
以下為實現(xiàn)本次案例的代碼:
from PyQt5.QtWidgets import *
import sys
class MyLabel(QLabel):
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.setStyleSheet("font-size: 22px;")
def set_Text(self, text):
self.setText(text)
def set_timerId(self, timerID):
self.timerID = timerID
# 重寫父類方法
def timerEvent(self, *args, **kwargs):
current_sec = int(self.text())
current_sec -= 1
self.setText(str(current_sec))
if current_sec == 0:
self.killTimer(self.timerID) # 通過timerId關(guān)閉定時器
if __name__ == '__main__':
app = QApplication(sys.argv)
window = QWidget()
window.show()
window.setWindowTitle("QObjcet定時器")
window.resize(200, 200)
label = MyLabel(window)
label.set_Text("10") # 設(shè)置倒計時為10s
label.set_timerId(label.startTimer(1000)) # 調(diào)用startTimer(),單位為毫秒,并返回timerId
label.move(100, 50)
label.show()
sys.exit(app.exec_())
運行結(jié)果:文章來源:http://www.zghlxwxcb.cn/news/detail-713380.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-713380.html
到了這里,關(guān)于【PyQt學習篇 · ③】:QObject - 神奇的對象管理工具的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!