赞
踩
isWidgetType()
方法:
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_())
运行结果:
inherits()
方法:
inherits()
的使用示例(基于以上程序进行修改):for o in objs:
print(o.inherits("QPushButton")) # 判断某个对象是否是控件类
运行结果:
需要注意的是,isWidgetType()和inherits()方法同样需要导入QtCore模块中的QObject类。这两个方法在QObject及其派生类中都可以使用。
案例:创建一个窗口,包含多个QLabel或其他控件。
要求:将包含在窗口内所有的QLabel控件,设置背景色cyan。
以下为实现本次案例的代码:
# 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;")
运行结果:
在PyQt中,QObject类提供了定时器相关的API,包括startTimer、killTimer和timerEvent方法。
startTimer()
方法:
interval = obj.startTimer(msec)
killTimer()
方法:
obj.killTimer(timerId)
timerEvent()
方法:
注意:timerEvent()方法是QObject的保护方法,需要在子类中重新实现。该方法会在定时器事件触发时自动被调用。
一般在轮询、倒计时等场景下使用。
案例:创建一个窗口,并设置一个子控件QLabel。
要求:展示10s倒计时,倒计时结束就停止计时。
以下为实现本次案例的代码:
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关闭定时器 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") # 设置倒计时为10s label.set_timerId(label.startTimer(1000)) # 调用startTimer(),单位为毫秒,并返回timerId label.move(100, 50) label.show() sys.exit(app.exec_())
运行结果:
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。