Python:如何在运行时获取实例的名称?

时间:2011-01-01 19:02:32

标签: python runtime pyqt stylesheet instance

我正在使用PyQt。因为我正在使用Qt样式表,所以我必须将对象名称设置为我想在我的样式规则中指定的小部件(例如“#deleteButton {font-size:14px;}”)。 在代码中,我必须这样做:

...
self.deleteButton = QToolButton(self)
self.deleteButton.setObjectName("deleteButton")
...

但我会这样做:

...
self.deleteButton = QToolButton(self)
self.deleteButton.setObjectName(self.deleteButton.__give_my_instance_name__)
...

如果我找到方法,我可以将它应用于容器中的所有小部件。

提前致谢

3 个答案:

答案 0 :(得分:1)

答案 1 :(得分:1)

使用此代码可以更好地完成您要完成的任务:

for name, obj in self.__dict__.iteritems():
    if isinstance(obj, QtCore.QObject) and not obj.objectName(): # QObject without a name
        obj.setObjectName(name)

在对象创建例程结束时使用它。

答案 2 :(得分:0)

一般答案(附例)。假设我们有一个类Foo,我们希望它描述它的名称:

class Foo(object):
    def my_name_is(self):
        for name, obj in globals().items():
            if obj is self:
                print('My name is ' + repr(name))

bar = Foo()
bar.my_name_is()
# prints: My name is 'bar'

这完美无缺,因为您只有该对象的一个​​副本。但是,如果您复制它,那么它可以有多个名称:

other_bar = bar
other_bar.my_name_is()
# prints two lines: My name is 'other_bar'
#                   My name is 'bar'