Найти - Пользователи
Полная версия: wxWindows или PyQT4
Начало » GUI » wxWindows или PyQT4
1 2 3 4 5 6 7 8
clopomor
мабуть ви давно дивились на ГТК+ під Віндовсом… іще з 2.8.х він вміє виглядати як рідна віндовська прога, і сіткове оточення бачить…
А щодо wx то MVC - http://wiki.wxpython.org/ModelViewController
bialix
poltergeist
В Qt был замечен баг: при работе с UNC путями через DFS, выбираешь в диалоге каталог, а в результате выдаётся совершенно левый:(

P.S. А мне нравится как выглядит GTK под виндой:) Дело вкуса…

bialix Да и всегда можно найти workaround: http://www.averdevelopment.com/python/EasyDialogs.html#ExampleUsage (как пример вызвать диалог через ctypes), это ж винда;)
нафига мне ctypes в GIMP? Я им пользуюсь чтобы картинки ресайзить. Иногда.
bialix
clopomor
мабуть ви давно дивились на ГТК+ під Віндовсом… іще з 2.8.х він вміє виглядати як рідна віндовська прога, і сіткове оточення бачить…
А щодо wx то MVC - http://wiki.wxpython.org/ModelViewController
Я на него очень часто смотрю. У меня давно стоит какой-то GIMP (поставлен с диска Ubuntu) и честно говоря обновлять нет никакого желания. Может он уже и выглядит и работает почти нормально, но как в том анекдоте: осадочек остался.

(Я сам знаю, что я зануда).
ZZZ
bialix
Боюсь, что подход писать на русском а потом переводить на импортный, слегка неверен.
Почему? Не вижу проблем. Я русский человек, а проблема перевода давно решена.
Так что объясните, почему это не верно, и, может, я откажусь от этого.

bialix
Неверно. Ты обязан открывать исходные коды своего проекта в ряде случаев использования GPL. Не все заказчики хотят публиковать код того, что приносит им деньги.
Я, в своём примере, забыл добавить, что код клиента открыт. Клиента, но не сервера.

bialix
Очень хотелось бы узнать кровавые подробности о страшном сне под названием gettext. Для расширения кругозора. Что предлагает Qt и чем оно лучше? Мне на самом деле интересно.
Издеваетесь? Нет, вы действительно издеваетесь. Я уже столько лет не видел gettext… Давайте я вам лучше про Qt расскажу…
В коде, вы просто все строки обрабатывате функцией QObject.trUtf8(). Это пребование не только для перевода лингвистического, но и для перевода из обычной строки в QString. Обычно это выглядет так:

class MyObject(QDialog): # Большенство qt-шных классов начинаются от QObject.
def __init__(self, Parent = None):
QDialog.__init__(self, Parent)
self.Label = QLabel(self)
self.Label.setText(self.trUtf8('Лэйбел'))

Потом мы запускаем pylupdate и создаём/дополняем *.ts. То бишь – файл, описывающий перевод. (В эрике я просто говорю обновить переводы). (десять секунд, если программа большая)

После, я запускаю linguist'а (из Эрика), в котором, собственно перевржу всё, что нужно. При этом старые переводы не теряются. (время зависит от знания языка и размера программы)

Компилирую перевод (тем же Эриком!) (не больше пяти секунд)

И перед созданием переведённого класса (обычно достаточно сделать это один раз, при запуске) загружаю и регистрирую перевод.

Перевод программы на лету тоже тривиален. Лучше посмотрите пример из PyQt, наглядно демонстрирующий всю прелесть этой системы.


shiza
Насчет MVC - подозреваю что нету, но точно не скажу - не пробовал.
Это шутка была… :-)

poltergeist
В Qt был замечен баг: при работе с UNC путями через DFS, выбираешь в диалоге каталог, а в результате выдаётся совершенно левый:(
Баги, это часть нашего Мира, и этим уже ничего не поделать, друг мой.
Пофиксят.
j2a
ZZZ
В коде, вы просто все строки обрабатывате функцией QObject.trUtf8().
Такой подход плох, тем, что
1) Для trUtf8 требуется строка, в то время, как в остальных функциях, где ожидается QString, нужен юникод
2) фиксируется кодировка, в которой должны быть исходники

А при gettext алгоритм такой же:
1) использование обертки для перевода
2) “выдергивание” строк, необходимых для перевода, в .po
3) перевод при помощи gettext-редактора
4) компиляция в .mo
ZZZ
j2a
1) Для trUtf8 требуется строка, в то время, как в остальных функциях, где ожидается QString, нужен юникод
Не понял утверждения. Поясни.
QString, класс довольно мощный. Внутри него текст хранится в utf16. Не utf8 из-за того, что обработать строку с переменным размером чара дольше. При этом, работая с QString, о кодировках не думаешь вообще. Совершенно одекватно работает QString(u'йцукен') и обратно unicode(QString('qwerty')) или unicode(QObject().trUtf8('йцукен')). Проблем с кодировками я не втречал уже года три…

j2a
2) фиксируется кодировка, в которой должны быть исходники
Не фиксируются. Это я использую trUtf8, а есть и более абстрактная функция tr или translate.
Вот только “моя твоя не понимать”, зачем сегодня не utf? ИМХО, национальные кодировки уже давно отправились на свалку истории, а всех, кто их ислользует, необходимо в срочном порядке предать анафеме и сжечь на костре за нечестивое багостроительство.

j2a
3) перевод при помощи gettext-редактора
Вот в те времна, когда я не знал Qt и пробовал gettext, я переводил всё руками, ибо ниодного нормального редактора тогда небыло.

Кстати, в wx, на сколько мне известно, есть аналог дизайнера из qt для рисования фейса не руками. Так вот, получившуюся уйню перевести можно? В Qt с этим проблем нет, ибо там все функции типа “setText” проходят через tr.

P.S. А вообще, мне кажется, что пора заканчивать этот бессмысленный спор…
который я сам и навязал… :-)
poltergeist
После слов bialix-а “(Я сам знаю, что я зануда).” спор можно было заканчивать;) а может и раньше…
bialix
ZZZ
bialix
Боюсь, что подход писать на русском а потом переводить на импортный, слегка неверен.
Почему? Не вижу проблем. Я русский человек, а проблема перевода давно решена.
Так что объясните, почему это не верно, и, может, я откажусь от этого.
Это конечно мое личное мнение, но если файл перевода отсутствует, запортился или потерялся, то гораздо надежнее будет если тогда программа сделает сама откат на английский (так называемое C locale). Это просто мера предосторожности. Я не только зануда, но еще и постоянно думаю о мерах предосторожности.

bialix
Очень хотелось бы узнать кровавые подробности о страшном сне под названием gettext. Для расширения кругозора. Что предлагает Qt и чем оно лучше? Мне на самом деле интересно.
Издеваетесь? Нет, вы действительно издеваетесь. Я уже столько лет не видел gettext… Давайте я вам лучше про Qt расскажу…
Нет, не издеваюсь, даже в мыслях не было. За рассказ спасибо. Это все выглядит практически так же и в случае использования gettext, просто вид в профиль. Идеология таже самая, просто Qt предлагает свою технологию, свой изобретенный велосипед. Вот и всё. И я не собираюсь спорить насчет лучше он или хуже. Он просто немного другой.

Перевод программы на лету тоже тривиален. Лучше посмотрите пример из PyQt, наглядно демонстрирующий всю прелесть этой системы.
Я ленив. Пока что мне достаточно Вашего описания, чтобы представить картину в целом.

poltergeist
В Qt был замечен баг: при работе с UNC путями через DFS, выбираешь в диалоге каталог, а в результате выдаётся совершенно левый:(
Баги, это часть нашего Мира, и этим уже ничего не поделать, друг мой.
Пофиксят.
Да, всё пофиксят рано или поздно. Просто чаще фиксят поздно, а фича нужна была вчера. Увы.
poltergeist
Ну ладно!

ZZZ
Почему? Не вижу проблем. Я русский человек, а проблема перевода давно решена.
Так что объясните, почему это не верно, и, может, я откажусь от этого.
У вас получается в исходных кодах присутствует кириллица - вот это и есть плохо, разве не понятно? Может это я взял из мира ascii и open source, но и в своих проектах я придерживаюсь подобной этики, даже если все мои исходники в utf-8 и пишу я конкретно под русского заказчика. Это же касается комментирования сорцов и коммитов в репозитарий. На русском в сорцах пусть пишут проггеры на 1С и на превед-медвед-е, ИМХО.
j2a
ZZZ
j2a
1) Для trUtf8 требуется строка, в то время, как в остальных функциях, где ожидается QString, нужен юникод
Не понял утверждения. Поясни.
QString, класс довольно мощный. Внутри него текст хранится в utf16. Не utf8 из-за того, что обработать строку с переменным размером чара дольше. При этом, работая с QString, о кодировках не думаешь вообще. Совершенно одекватно работает QString(u'йцукен') и обратно unicode(QString('qwerty')) или unicode(QObject().trUtf8('йцукен')). Проблем с кодировками я не втречал уже года три…

j2a
2) фиксируется кодировка, в которой должны быть исходники
Не фиксируются. Это я использую trUtf8, а есть и более абстрактная функция tr или translate.
Вот только “моя твоя не понимать”, зачем сегодня не utf? ИМХО, национальные кодировки уже давно отправились на свалку истории, а всех, кто их ислользует, необходимо в срочном порядке предать анафеме и сжечь на костре за нечестивое багостроительство.
Поясняю.
Внутри программы наиболее правильно использовать юникод. Не строку. И не QString. Так вот, trUtf8 не понимает юникод. Плюс навязывает кодировку исходников (utf-8). Если кодировка исходников будет cp1251, получишь не то, что ожидал.

Демонстрирую.

>>> from PyQt4 import QtCore
>>> q = QtCore.QObject()
>>> unicode_string = u'юникод'
>>> cp1251_string = u'строка не в utf-8'.encode('cp1251')
>>> utf8_string = u'строка в utf-8'.encode('utf-8')
>>> print unicode(q.trUtf8(unicode_string))
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
TypeError: argument 1 of QObject.trUtf8() has an invalid type
>>> print unicode(q.trUtf8(cp1251_string))
&#65533;&#65533;&#65533;&#65533;&#65533;&#65533; &#65533;&#65533; &#65533; utf-8
>>> print unicode(q.trUtf8(utf8_string))
строка в utf-8


а gettext умеет (ugettext)

P.S. Это с позиций “вначале делаю русский интерфейс, а потом перевожу на английский”. В случае англоязычного интерфейса всё это менее чувствительно: после trUtf8 возвращается QString, который однозначно конвертируется в юникодную строку.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB