如何检测小部件的类型?
How to detect the type of widget?
这应该是一个愚蠢的问题。我只是好奇,自己找不到答案。
例如我在 PyQt5 中定义了一些小部件:
self.lbl = QLabel("label")
self.btn = QPushButton("click")
self.txt = QLineEdit("text")
有什么方法可以检测 self.lbl
、self.btn
或 self.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)
这应该是一个愚蠢的问题。我只是好奇,自己找不到答案。
例如我在 PyQt5 中定义了一些小部件:
self.lbl = QLabel("label")
self.btn = QPushButton("click")
self.txt = QLineEdit("text")
有什么方法可以检测 self.lbl
、self.btn
或 self.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)