2011-01-01 15 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

それは* * 1 ...おそらく、HTTPに関連 –

+0

を持っていません.com/questions/3744792 /作成中のオブジェクトに名前が割り当てられているが、重複しているとは思わない。 – 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' 

これは完璧に動作しますが、そのオブジェクトのコピーを1つだけ持っています。あなたはそれをコピーする場合は、それは複数の名前を持つことができます:// stackoverflowの:あなたはそれに名前を付けていない場合は

other_bar = bar 
other_bar.my_name_is() 
# prints two lines: My name is 'other_bar' 
#     My name is 'bar' 
関連する問題