2011-01-01 2 views
1

Я использую PyQt. И поскольку я использую таблицы стилей Qt, мне нужно установить имена объектов в виджеты, которые я хочу указать в своих правилах стиля (например, #deleteButton {font-size: 14px;} "). В коде, я должен сделать:Python: Как получить имя экземпляра во время выполнения?

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

Но я бы сделать:

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

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

Заранее благодарен

+2

Если вы не даете ему имя, то это не * есть * один ... –

+0

Возможно, связанные с HTTP: // StackOverflow .com/questions/3744792/accessing-the-name-that-an-object-being-created-is-assign-to, но не дубликат, я думаю. – Kos

ответ

1

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

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

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

+0

Я понял, что мне нужно играть с ** __ dict __ ** тоже. Но вы дали мне закодированное решение, спасибо! – ApprenticePython

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' 
Смежные вопросы