如何检测小部件的类型?

How to detect the type of widget?

这应该是一个愚蠢的问题。我只是好奇,自己找不到答案。

例如我在 PyQt5 中定义了一些小部件:

self.lbl = QLabel("label")
self.btn = QPushButton("click")
self.txt = QLineEdit("text")

有什么方法可以检测 self.lblself.btnself.txt 是哪种小部件?

我可以想象:通过检测小部件类型,输入是self.lbl,输出应该是QLabel...或者类似这样的东西。

我只找到了 isWidgetType() 方法。但这不是我想要的。

有几种方法可以获取小部件的名称:

  • 使用 __class__:

print(self.lbl.__class__.__name__)
  • 使用 QMetaObject:

print(self.lbl.metaObject().className())

这些以前的方法return一个字符串的名称为class,但是如果你想验证一个对象是否属于一个class你可以使用isinstance():

is_label = isinstance(self.lbl, QLabel)

另一种选择是使用 type(),但不推荐这样做,如果您想获得有关 isinstance()type() 的更多信息,请阅读以下内容:What are the differences between type() and isinstance()?

您可以只使用标准 Python 检查对象类型的方法:

print(type(self.lbl))
print(isinstance(self.lbl, QLabel)