2015-01-09 5 views
2
a = QtGui.QLineEdit() 

Есть ли способ запросить, что виджет Qt является переменной a? Похоже, что некоторые виджеты Qt будут снабжены атрибутом .uiType. Но некоторые (например, макеты) - нет.Как получить вид виджетов Qt

ответ

4

Вы можете получить тип любого объекта в Python с помощью type built-in:

print type(a) 

Вы также можете быть заинтересованы в атрибутах __name__ и __class__, которые будут содержать данные, соответствующие имени виджета и класса:

однако
type(a).__name__ # Returns class name as a string 
a.__class__  # Same as type(a) 

Обратите внимание, что если вам нужно выполнить typecheck, вы должны использовать isinstance:

isinstance(a, type_to_test_for) 

Это будет учитывать наследование.

+0

возможно 'a .__ class__' также ... –

+0

Вы действительно прочитали какую-либо документацию, с которой вы связались? Атрибут '__name__' специфичен для классов, а не для экземпляров, поэтому' a .__ name__' поднимет 'AttributeError'. Кроме того, 'a .__ class__' возвращает то же самое, что и' type (a) ', а не строка. Таким образом, чтобы получить имя класса, вы хотите '.__ class __.__ name__' или' type (a) .__ name__'. – ekhumoro

+0

Да, я их прочитал. Я просто забыл удалить слово «строка», когда редактировал. Кроме того, я упомянул '__name__', если он хочет имя объекта класса. Но я согласен, что это немного запутанно, так как у него есть экземпляр в его коде. Я исправил это, чтобы сделать то, что вы сказали. Спасибо, что указали на ошибки. :) – iCodez

2

Вы пробовали a.metaObject().className()?

Для получения дополнительной информации см. Документацию QObject.

+1

Хотя 'staticMetaObject' будет работать, он предназначен для использования с классами. Для экземпляров есть 'metaObject()'. – ekhumoro

+0

@ekhumoro Я отредактировал и обновил сообщение. Спасибо! – Iuliu

Смежные вопросы