Переключение на Главную Страницу Страницы: 1 ... 5 6 [7] 8  ОтправитьПечать
Очень популярная тема (более 25 ответов) wic: Python + PyQt4 (число прочтений - 57293 )
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wic: Python + PyQt4
Ответ #90 - 11. Декабря 2011 :: 13:17
Печать  
blindvic писал(а) 11. Декабря 2011 :: 12:18:
Скомпилировал из запустил под Линуксом. Буду разбираться дальше - трудно разбираться в Си++...

Тут под линем собирают: http://linuxforum.ru/viewtopic.php?id=18317
  
Наверх
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: wic: Python + PyQt4
Ответ #91 - 11. Декабря 2011 :: 15:06
Печать  
Если я понял, то у тебя вся модель сразу заполняется? Если у тебя в справочнике 2000 наименований - все 2000 сразу у БД запрашиваются?
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wic: Python + PyQt4
Ответ #92 - 12. Декабря 2011 :: 07:24
Печать  
blindvic писал(а) 11. Декабря 2011 :: 15:06:
Если я понял, то у тебя вся модель сразу заполняется? Если у тебя в справочнике 2000 наименований - все 2000 сразу у БД запрашиваются?


Там QSqlQueryModel используется. Она не все данные сразу запрашивает, есть там вроде лимит у запроса.
  
Наверх
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: wic: Python + PyQt4
Ответ #93 - 12. Декабря 2011 :: 13:43
Печать  
trdm писал(а) 12. Декабря 2011 :: 07:24:
blindvic писал(а) 11. Декабря 2011 :: 15:06:
Если я понял, то у тебя вся модель сразу заполняется? Если у тебя в справочнике 2000 наименований - все 2000 сразу у БД запрашиваются?


Там QSqlQueryModel используется. Она не все данные сразу запрашивает, есть там вроде лимит у запроса.


Ну, а если ты перемотаешь вниз - все записи будут в памяти?

http://www.prog.org.ru/topic_13443_0.html
  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wic: Python + PyQt4
Ответ #94 - 12. Декабря 2011 :: 14:41
Печать  
blindvic писал(а) 12. Декабря 2011 :: 13:43:
trdm писал(а) 12. Декабря 2011 :: 07:24:
blindvic писал(а) 11. Декабря 2011 :: 15:06:
Если я понял, то у тебя вся модель сразу заполняется? Если у тебя в справочнике 2000 наименований - все 2000 сразу у БД запрашиваются?


Там QSqlQueryModel используется. Она не все данные сразу запрашивает, есть там вроде лимит у запроса.


Ну, а если ты перемотаешь вниз - все записи будут в памяти?

http://www.prog.org.ru/topic_13443_0.html

Можно написать и свой контрол и свою модель.
У меня сейчас сложности с парсингом SQL запроса - остальное я думаю потяну. На этом пока споткнулся.
  
Наверх
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: wic: Python + PyQt4
Ответ #95 - 05. Июня 2012 :: 10:20
Печать  
Ну вот, довел проект до состояния, когда можно что-либо показать (alpha).
Код можно скачать здесь: https://github.com/warvariuc/wic
Вот видео как это скачать и запустить (испытывалось на Kubuntu 12.04):


Чуть-чуть кода:

  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: wic: Python + PyQt4
Ответ #96 - 05. Июня 2012 :: 10:30
Печать  
Сделал свой ORM - гибрид между DAL из web2py и ORM из Django.
Далее - выдержки из файла test_orm.py с комментариями.
Код
Выбрать все
import orm

# модели определяются в стиле Джанго:
class Books(orm.Model):
    """Books catalog"""
    # id field is already present
    name = orm.CharField(maxLength = 100, default = 'a very good book!!!')
    price = orm.fields.DecimalField(maxDigits = 10, fractionDigits = 2, default = '0.00', index = True) # 2 decimal places
    author = orm.RecordField('Authors', index = True)
    publication_date = orm.fields.DateField()
    timestamp = orm.fields.DateTimeField()

    def save(self): # переопределена функция сохранения:
        self.timestamp = DateTime.now()
        super().save()

db = orm.connect('sqlite://:memory:')  # создается адаптер базы данных

# создание новых записей в таблице:
authorsData = (
    dict(first_name = 'Sam', last_name = 'Williams'),
    dict(first_name = 'Steven', last_name = 'Levy'),
    dict(first_name = 'Richard', last_name = 'Stallman')
)

for data in authorsData:
    author = Authors(db = db, **data)
    author.save()

# можно работать с базой не используя модели - как в web2py - используя колонки:
db.select(Books.id, from_ = Books, where = (Books.price > '15'), limit = 10)

# можно задействовать модели:
book = Books.getOne(db, where = (Books.price > 15))

# можно делать UPDATE, причем используя аналоги выражений типа SET a = a + 1 :
db.update(Books.name('A new title with raised price'), Books.price(Books.price + 1), where = (Books.id == book.id))

# есть функции типа COUNT:
db.select(Authors.first_name, Authors.COUNT()).dictresult() 



Естественно, эта т.н. ORM еще разивается. Может быть у кого-нибудь появятся идеи получше.
« Последняя редакция: 05. Июня 2012 :: 16:19 - blindvic »  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: wic: Python + PyQt4
Ответ #97 - 05. Июня 2012 :: 10:36
Печать  
По сравнению с первой версией, демо к-й я уже здесь вылаживал (но видео уже удалил) есть по крайней мере одна большая разница. Если в первой версии пользовательские модули создвались отдельно от "ядра" системы, то сейчас разработчик расширяет ядро, наследуя готовые классы и изменяя их вид/поведение. Это продолжает идею Qt/PyQt и дает больший контроль над приложением.

Вот, например, код "глобального модуля":

Код
Выбрать все
import sys, os

from PyQt4 import QtCore, QtGui

import orm

import wic
from wic import forms, w_main_window

appDir = os.path.dirname(os.path.abspath(__file__))
db = None


class MainWindow(w_main_window.WMainWindow):

    def onSystemStarted(self): # predefined function scalled when the core is ready
        self.statusBar().showMessage('Ready...', 5000)
        # `<>` in the beginning of the string means to treat it as HTML
        self.printMessage('<><b><span style="color: green">System started.</span> Welcome!</b>', True, False)
        print('Application directory: %s' % appDir)

        global db
        db = orm.SqliteAdapter('papp/databases/mtc.sqlite')

        from .reports import phone_number_search
        forms.openForm(phone_number_search.Form)
        #self.mainWindow.restoreSubwindows()


    def onSystemAboutToExit(self): # предопределенная процедура запускаемая при завершении работы системы
        return True # return False to cancel quitting

    def setupMenu(self):
        super().setupMenu()

        #Add actions for catalogs.
        # http://docs.python.org/library/pkgutil.html#pkgutil.walk_packages
        menu = self.menu.catalogs
        from wic import menus
        catalogs = ('persons', 'locations', 'districts', 'regions', 'streets')
        for catalog in catalogs:
            modelName = catalog.capitalize()
            modelPath = 'papp.catalogs.' + catalog + '.' + modelName
            menus.addActionsToMenu(menu, (
                menus.createAction(menu, modelName, lambda *args, p = modelPath: forms.openCatalogForm(p, db),
                                   icon = ':/icons/fugue/cards-address.png'),
            ))

        menu = self.menu.reports
        reports = ('phone_number_search', 'test', 'lissajous', 'repayment_schedule')
        for report in reports:
            reportName = report.capitalize()
            reportPath = 'papp.reports.' + report + '.Form'
            menus.addActionsToMenu(menu, (
                menus.createAction(menu, reportName, lambda *args, p = reportPath: forms.openForm(p),
                                   icon = ':/icons/fugue/application-form.png'),
            ))



def test():
    wic.app.showInformation('test', 'Это сообщение из процедуры "глобального" модуля') 

  
Наверх
 
IP записан
 
trdm
1c++ power user
qt1l developer
1c++ moderator
Отсутствует



Сообщений: 2343
Местоположение: г. Ростов-на-Дону
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: wic: Python + PyQt4
Ответ #98 - 05. Июня 2012 :: 12:08
Печать  
питонщики будут счастливы...
  
Наверх
IP записан
 
Boris_1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 129
Зарегистрирован: 29. Января 2007
Re: wic: Python + PyQt4
Ответ #99 - 05. Июня 2012 :: 12:22
Печать  
Очень интересно, начинаю смотреть что к чему Очень довольный
  
Наверх
 
IP записан
 
Boris_1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 129
Зарегистрирован: 29. Января 2007
Re: wic: Python + PyQt4
Ответ #100 - 06. Июня 2012 :: 08:27
Печать  
Под виндой тоже все запустилось на ура. Улыбка Что заметил, память не освобождается при закрытии больших форм. Хотя если свернуть-развернуть приложение, очистилась. И в списках записи подгружаются по 100 шт., заметно притормаживание, но только на большой таблице. Не привычно минимизация окон, только в менюхе.
Какие планы на будущее? Если проект движется в сторону создания 1с-подобной системы, готов принять участие.
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: wic: Python + PyQt4
Ответ #101 - 06. Июня 2012 :: 10:01
Печать  
Boris_1c писал(а) 06. Июня 2012 :: 08:27:
И в списках записи подгружаются по 100 шт., заметно притормаживание, но только на большой таблице. Не привычно минимизация окон, только в менюхе.
Какие планы на будущее? Если проект движется в сторону создания 1с-подобной системы, готов принять участие.

Тормоза из-за JOIN и LIMIT/OFFSET, я думаю (наверное можно как-то оптимизировать это дело, но я не гуру баз данных). Если плюнуть на количество записей, можно сделать прокрутку постранично по первичному ключу.
Насчет минимизации - можно убрать таббар и свертывание окон будет как в 1С. Окно можно сделать restore/maximize если сделать двойной щелчок на его заголовке.

Далее хотелось бы сделать регистры и документы.

Нужны идеи по организации меню - по какой схеме позволить пользователю удобно добавлять/удалять элементы меню.

Думаю, самое лучшее это делать еще приложения на базе платформы (типа той, что есть сейчас - база телефонов с поиском). По мере использования, будут появляться идеи по доработке и всплывать баги.

Хотелось бы Qt Designer встроить в платформу - такое возможно.

Хотелось бы услышать твое мнение насчет текущей реализации.

Нужно доработать ORM - убрать баги, добавить фичи, доработать бэкенды к MySQL и PostgreSQL.
  
Наверх
 
IP записан
 
Boris_1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 129
Зарегистрирован: 29. Января 2007
Re: wic: Python + PyQt4
Ответ #102 - 06. Июня 2012 :: 11:25
Печать  
Документы и Регистры однозначно в приоритете. На перспективу надо подумать, как хранить структуру бд во внешнем хранилище, типа md (может даже каталог). И по этому хранилищу генерировать классы/формы для ORM. Самая большая проблема видимо реструктуризация БД?
Меню можно и попозже сделать..
  
Наверх
 
IP записан
 
blindvic
Senior Member
****
Отсутствует



Сообщений: 486
Местоположение: Moldova
Зарегистрирован: 23. Июня 2008
Пол: Мужской
Re: wic: Python + PyQt4
Ответ #103 - 06. Июня 2012 :: 11:34
Печать  
Boris_1c писал(а) 06. Июня 2012 :: 11:25:
Документы и Регистры однозначно в приоритете. На перспективу надо подумать, как хранить структуру бд во внешнем хранилище, типа md (может даже каталог). И по этому хранилищу генерировать классы/формы для ORM. Самая большая проблема видимо реструктуризация БД?
Меню можно и попозже сделать..


Мне нравится, что структура БД задается через модели. Это читабельно и учитывается системой контроля версий (если я тебя правильно понял). Правда хотелось бы модели хранить все-таки отдельно.

Насчет реструктуризиации БД - не думаю что проблема такая уж и большая. Там уже есть зачатки - в orm.adapters уесть методы getColumns() и getTables(). Надо теперь сделать отчет к-й будет сравнивать полученные колонки с колонками моделей, показывать разницу и применять действия пользователя.
  
Наверх
 
IP записан
 
Boris_1c
Full Member
***
Отсутствует


I Love YaBB 2!

Сообщений: 129
Зарегистрирован: 29. Января 2007
Re: wic: Python + PyQt4
Ответ #104 - 06. Июня 2012 :: 12:05
Печать  
Цитата:
Мне нравится, что структура БД задается через модели. Это читабельно и учитывается системой контроля версий (если я тебя правильно понял). Правда хотелось бы модели хранить все-таки отдельно.
В конечном итоге нужен конфигуратор(конвертер), который должен будет обновлять модели, структуру бд, формы объектов (либо определенные в ручную, либо создаваемые автоматом). То есть для каждого объекта метаданных нужна папка с элементами к нему относящимися, типа мдшника разобранного GCOMP. А менюху на первом этапе можно по структуре этих папок формировать.
  
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 5 6 [7] 8 
ОтправитьПечать