Уведомления

Группа в Telegram: @pythonsu

#1 Март 14, 2017 15:14:55

MrViktor
Зарегистрирован: 2017-03-09
Сообщения: 83
Репутация: +  8  -
Профиль   Отправить e-mail  

Пример Qt4 с C++ на python 3

Файл с формой.
Попутно вопрос, почему все стараются рисовать интерфейс в коде?

Прикреплённый файлы:
attachment ex3.ui (665 байт)

Офлайн

#2 Март 14, 2017 15:48:14

vic57
Зарегистрирован: 2015-07-07
Сообщения: 908
Репутация: +  127  -
Профиль   Отправить e-mail  

Пример Qt4 с C++ на python 3

MrViktor
Попутно вопрос, почему все стараются рисовать интерфейс в коде?
в принципе разницы нет.
на qt пишу в qtcreator, там и дизайнер и ассистент под рукой.

Отредактировано vic57 (Март 14, 2017 15:48:28)

Офлайн

#3 Март 16, 2017 08:52:09

MrViktor
Зарегистрирован: 2017-03-09
Сообщения: 83
Репутация: +  8  -
Профиль   Отправить e-mail  

Пример Qt4 с C++ на python 3

Всем добрый день!
В общем продолжаю изучать Qt4 по вот этой документации и выкладываю исходники “опитоненных” примеров (с небольшими моими дополнениями). Возможно кому-нибудь пригодится для понимания и чтоб более опытные люди указали на мои огрехи.
Это только переопределенный класс (до стадии вставки и удаления строк), над созданием которого идет речь в доке. Тестовый проект с формой в прикрепленном архиве.

 class StringListModel(QAbstractListModel):
    def __init__(self, strings):
        QAbstractListModel.__init__(self)
        self._stringList = strings
    def rowCount(self, parent=None):
        return len(self._stringList)
    def data(self, index, role):
        if not index.isValid():
            return None
        if index.row() >= len(self._stringList):
            return None
        if role == Qt.DisplayRole or role == Qt.EditRole:
            return self._stringList[index.row()]
        else:
            return None
        pass
    def headerData (self, selection, orentation, role=Qt.DisplayRole):
        if role != Qt.DisplayRole:
            return None
        if orentation == Qt.Horizontal:
            return 'Column %s'%selection
        else:
            return 'Row %s'%selection
        pass
    def flags(self, index):
        if not index.isValid:
            return Qt.ItemIsEnabled
        return super(StringListModel, self).flags(index) | Qt.ItemIsEditable
    def setData(self, index, value, role):
        if index.isValid and role == Qt.EditRole:
            self._stringList[index.row()] = value
            self.dataChanged.emit(index, index)
            return True
        return False
    def insertRows(self, position, rows, parent = QModelIndex()):
        self.beginInsertRows(QModelIndex(), position, position+rows-1)
        i = 0
        while i < rows:
            self._stringList.insert(position, '')
            i += 1
        self.endInsertRows()
        return True
    def removeRows(self, position, rows, parent = QModelIndex()):
        self.beginRemoveRows(QModelIndex(), position, position+rows-1)
        i = 0
        while i < rows:
            del self._stringList[position]
            i += 1
        self.endRemoveRows()
        return True

Прикреплённый файлы:
attachment test_prim.zip (2,0 KБ)

Офлайн

#4 Март 16, 2017 09:51:10

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2751
Репутация: +  184  -
Профиль   Отправить e-mail  

Пример Qt4 с C++ на python 3

> Файл с формой.

Почему там нет компоновщиков?

> Попутно вопрос, почему все стараются рисовать интерфейс в коде?

Потому что дураков везде хватает.

Ну и вот пример как надо на python-е писать:

 def data(self, index, role):
        if index.isValid() and  index.row() < len(self._stringList):
            if role == Qt.DisplayRole or role == Qt.EditRole:
                return self._stringList[index.row()]
            elif role == .....



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#5 Март 16, 2017 09:53:50

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

Пример Qt4 с C++ на python 3

MrViktor
Попутно вопрос, почему все стараются рисовать интерфейс в коде?
Да в принципе особой разницы нету. Комуто удобнее через креатор, комуто через код. Ситуации бывают разные, иногда в креаторе просто невозможно созать нужный интерфейс
Кроме того есть мнение что использование GUI утилит для создания интерфейсов возможно для очень простых программ только. Сложные интерфейсы проще кодировать ручками.



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Отредактировано PEHDOM (Март 16, 2017 09:54:05)

Офлайн

#6 Март 16, 2017 09:59:39

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2751
Репутация: +  184  -
Профиль   Отправить e-mail  

Пример Qt4 с C++ на python 3

> мнение что …. Сложные интерфейсы проще кодировать ручками.

Это мнение тех кто сложные интерфейсы никогда не создавал.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#7 Март 16, 2017 10:06:29

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Пример Qt4 с C++ на python 3

Когда Qt похоронен в недрах более высокоуровневого фреймворка и гуй генерируется на лету, тогда да - в дизайнере особо не разгонишься.

Офлайн

#8 Март 16, 2017 10:06:44

vic57
Зарегистрирован: 2015-07-07
Сообщения: 908
Репутация: +  127  -
Профиль   Отправить e-mail  

Пример Qt4 с C++ на python 3

MrViktor
В общем продолжаю изучать Qt4
примеры из поставки кьюта давно опитонены
https://github.com/Werkov/PyQt4/tree/master/examples

Офлайн

#9 Март 16, 2017 10:13:05

MrViktor
Зарегистрирован: 2017-03-09
Сообщения: 83
Репутация: +  8  -
Профиль   Отправить e-mail  

Пример Qt4 с C++ на python 3

Rodegast
Почему там нет компоновщиков?
Можно поподробней, что за компоновщик? layouts? - если да, то на текущий момент работаю над пониманием функционала, а они вроде нужны только визуального оформления или я не прав?
Rodegast
Ну и вот пример как надо на python-е писать:
Спасибо, стараюсь научится (поправлю). Грубых нарушений в коде не замечено?

PEHDOM
Да в принципе особой разницы нету.
Мне удобней держать открытым дезайнер и тут же код, поначалу начал кодом рисовать, но потом плюнул на это (пол дня интерфейс рисовать не сильно сложный это не по мне)

PEHDOM
иногда в креаторе просто невозможно созать нужный интерфейс
Это да, но можно же использовать так сказать гибридный подход то что нельзя визуально, создаешь в коде. А так да, кто как любит, так и извращается.

Офлайн

#10 Март 16, 2017 10:25:35

MrViktor
Зарегистрирован: 2017-03-09
Сообщения: 83
Репутация: +  8  -
Профиль   Отправить e-mail  

Пример Qt4 с C++ на python 3

vic57
примеры из поставки кьюта давно опитонены
Спасибо, смотрел только от другой версии (от 4 не мог найти), но в них я уж больно сильно погряз не в понимании. А по документации я и к синтаксису привыкаю и пошагово наращивается функционал и понимание приходит.
Да и GUI там кодом создают, не говорю что это плохо, но я в дальнейшем планирую по максимуму пользоваться дизайнером, а в коде делать только то, что нельзя изобразить визуально.

Отредактировано MrViktor (Март 16, 2017 10:34:11)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version