Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 27, 2016 20:20:16

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Стринг не стринг

Посоны хелп. 2 часа просидел опять решить не могу. Видел помню где-то раньше, что можно сделать то, что я щас расскажу. В общем :
имеется список

h = [self.vbox, self.vbox_basic]
Берем и перебираем циклом фор этот список :
for i in h:
      print(h[i])
Однако :
print(h[i])
Выдает :
<PySide.QtGui.QVBoxLayout object at 0x0000000003AEC248>, а надо : self.vbox, self.vbox_basic
Раньше видел где-то, как можно преобразовать этот код в self.vbox вот потерял, кто знает?
P.S. изменение списка вот таким образом
h = ['self.vbox', 'self.vbox_basic']
не предлагать

Отредактировано Lestoroer (Апрель 27, 2016 20:25:40)

Офлайн

#2 Апрель 28, 2016 02:47:34

ayb
Зарегистрирован: 2014-04-01
Сообщения: 297
Репутация: +  24  -
Профиль   Отправить e-mail  

Стринг не стринг

Определи методы __str__ у этих обьектов.

Офлайн

#3 Апрель 28, 2016 07:01:20

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Стринг не стринг

Офлайн

#4 Апрель 28, 2016 12:08:30

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Стринг не стринг

это я привел так для примера.

print(i)
На самом деле мне не надо вызывать print(i) вообще, я его привел для того, чтобы не пугать синтаксисом людей. Вот реальный код, который должен заработать.
    def hide (self):
        h = [self.vbox, self.vbox_basic]
        for i in h:
            self.grid.removeItem(i)
Имеется список h, который содержит в себе self.vbox и self.vbox_basic, мы берем пробегаем по списку с помощью цикла for и вставляем его элементы в self.grid.removeItem(i) (этот метод удаляет объекты из сетки PyQt).
В итоге, когда проходит цикл, у меня получается такое self.grid.removeItem(object at 0x0000000003AEC248) и, естественно, код не срабатывает, а он должен вставлять self.grid.removeItem(self.vbox) и потом self.grid.removeItem(self.vbox_basic) и удалять эти объекты из сетки.
Мне посоветовали __Str__, но я так понял, этот метод преобразует в строку и потом вставляется строка, однако, выходит ошибка, что мол ты используешь тип данных ‘str’.

Отредактировано Lestoroer (Апрель 28, 2016 12:09:24)

Офлайн

#5 Апрель 28, 2016 12:33:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Стринг не стринг

Lestoroer
у меня получается такое self.grid.removeItem(object at 0x0000000003AEC248)
С чего вы это взяли?
если ваш реальный код такой же как вы нам показали, то всё туда будет нормально подставляться.



Офлайн

#6 Апрель 28, 2016 12:34:49

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10010
Репутация: +  857  -
Профиль   Отправить e-mail  

Стринг не стринг

Lestoroer
Мне посоветовали __Str__
Но это неправильный совет. В классе QGridLayout в метод removeItem() (унаследованный от QLayout) подаётся объект класса QLayoutItem. При этом QLayout наследуется от QLayoutItem. Поэтому подавать надо сами объекты, которые были добавлены в QGridLayout через метод addLayout().



Отредактировано py.user.next (Апрель 28, 2016 12:35:35)

Офлайн

#7 Апрель 28, 2016 12:45:33

Lestoroer
Зарегистрирован: 2015-12-24
Сообщения: 88
Репутация: +  5  -
Профиль   Отправить e-mail  

Стринг не стринг

py.user.next
Их и добавляю.
FishHook
Я тоже так считаю, однако, не работает у меня в PySide. Код просто берет и вылетает “прекращена работа”. Вы натолкнули меня на мысль и я перевел весь код в -> PyQt, все стало работать. Видимо что-то с PySide.
Благодарю всех.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version