Python: Как получить имя экземпляра во время выполнения? - PullRequest
1 голос
/ 01 января 2011

Я использую 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__)
...

Если я найду способ, я могу применить его ко всем виджетам в контейнере.1007 *

Заранее спасибо

Ответы [ 3 ]

1 голос
/ 01 января 2011

То, что вы пытаетесь выполнить, лучше сделать с помощью этого кода:

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

Используйте его в конце процедуры создания вашего объекта.

1 голос
/ 01 января 2011
0 голосов
/ 06 июня 2011

Общий ответ (с примером). Допустим, у нас есть класс 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'
...