Библиотека для деталей БЧ

Автор Вират Лакх, 19.08.17, 07:32:57

« предыдущая - следующая »

0 Пользователей и 17 гостей просматривают эту тему.

Вират Лакх

20.09.17, 02:27:30 #100 Последнее редактирование: 20.09.17, 04:29:36 от Вират Лакх
Что значит, когда вот так пишет? На том компе, где запортачилось раньше, теперь не вставляет на Enter или Ctrl+enter.
ЦитироватьTraceback (most recent call last):
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "D:\bch.pyw", line 128, in Start
    Past_prop_detal() # Вставляем свойства
  File "D:\bch.pyw", line 71, in Past_prop_detal
    iPart7.Marking = oboznachenie
  File "C:\Python26\lib\site-packages\win32com\client\__init__.py", line 471, in __setattr__
    self._oleobj_.Invoke(*(args + (value,) + defArgs))
AttributeError: 'module' object has no attribute 'VARIANT'


Еще по команде Измерить. Когда измеряем цилиндрическую поверхность, то не надо её прописывать как ф30х1000. Это, конечно, интересно, но диаметр трубы или круга будет записан в материале, и "ф30х" придется вручную стирать и писать "L = ".
Или на выбор пользователя. В блоке настроек/констант выбор варианта записи цилиндрической поверхности.

UPD
Усё, переставил наконец-то питон до полностью рабочего состояния. Вычистил папку с реестром на всякий случай. В дистрибутиве компаса есть эти питоны в \Base\Support. Вот их поставил и файлы *.py и *.pyc с другого компа \Lib\site-packages\pythonwin. Есть подозрение, что *.pyc не нужны, они то ли сами появляются при установке pywin. Что-то он там компилирует, когда ставится.

Давайте напишем в сообщении "Выделите деталь" типа того "Выделите деталь и при необходимости обновите окно" или "... нажмите F5". Непосвященному может быть непонятен этот тонкий момент в условиях, когда макрос говорит, что надо просто выделить деталь.
Ну и про необходимость восклицательных знаков подумайте. В синих информационных сообщениях лишние эмоции ни к чему. Я бы нигде их не писал.

Умка

Объекты спецификации добавляет, не удаляя старые. Измерения не выполняются, окно закрывается и питон висит в процессе.

Вират Лакх

Умка, я бы галкой создавать объекты спецификации пока не пользовался.
По измерениям указываете ребро, грань или цилиндр? - и ничего?

Умка

Измерения не выполняются. Стабильная версия 0.4.4

Вират Лакх

Запустите макрос через IDLE (Python GUI) или через змейку. См. картинку. И сделайте измерения. Будет ли ругаться в окошке или нет.
Кто такая стабильная 0.4.4? Используйте всегда последнюю версию макроса. Нет сейчас никаких стабильных версий.

Умка

Я с питоном не дружу. Мне это долго нужно объяснять... БЧ V 0.4.4 действительно удачная версия. Спасибо разработчику. Замеры выполняю компасом. Часто приходится выполнять замеры длины прутков и труб.

Вират Лакх

Я тоже не дружу. Но запустить окно IDLE (Python GUI), там нажать ctrl+O, открыть БЧ.pyw и нажать F5 (при включенном компасе с активной деталью или сборкой) под силу каждому.
Текущая версия умеет измерять цилиндры.
Кстати, Трындец, если макрос запустить без компаса, то выдает сообщение Запустите компас и повторите попытку.
Заголовок к этому окну-сообщению сделаем?

ТрындецЪ

У меня только одна версия КОМПАСа в наличии и комп одной конфигурации. Я не имею возможности тестировать работоспособность на другом КОМПАСе и с другим железом/системой. На моём ПК всё работает (КОМПАС 16.0 x32, Win7 x32).
И сообщения типа:
Цитата: Умка от 20.09.17, 06:14:50
Объекты спецификации добавляет, не удаляя старые. Измерения не выполняются, окно закрывается и питон висит в процессе.

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

Умка

версия КОМПАС V13 + Windows XP отсюда видимо ошибки.

KiDim

Цитата: Умка от 20.09.17, 08:39:15
версия КОМПАС V13 + Windows XP отсюда видимо ошибки.

На будущее указывайте разрядность винды и Компаса. Разрабам это иногда очень важно!

ТрындецЪ

Представляю очередную версию  программы оформления деталей БЧ.

1) Реализовано прерывание измерений. Окно программы теперь не сворачивается. На месте кнопки с линейкой появляется кнопка с иконкой "Stop", так же, если окно активно, прервать команду можно, нажав <Esc>. В связи с этим пришлось заменить горячую клавишу выхода из программы на двойное нажатие <Esc>.
2) В блок констант добавлены константы, активирующие/деактивирующие при запуске "Создание объекта спецификации", поле ввода "Названия" и "Материал".
3) Надпись "мм" из чекбокса превратилась в текстовую метку с сохранением своего функционала (активация/деактивация производится кликом мыши).
4) Изменён графический интерфейс, шрифты, всплывающие сообщения разделены на 2 типа. Всё в соответствии с пожеланиями Вират Лакх'а.




Vin

Цитата: ТрындецЪ от 21.09.17, 12:09:20
Представляю очередную версию  программы оформления деталей БЧ.
Всё в соответствии с пожеланиями Вират Лакх'а.

Рыжий любого уболтает :)
За программу - спасибо.

Вират Лакх

Ха-ха, "рыжий" )
Я не убалтываю, а руковожу разработкой )
Обалденная версия. Мечты сбываются!
1) Как насчет проверки запущенной копии макроса? Это возможно? Замечал неоднократно у себя, что второй открыт оказывался.
2) Без особого восторга встречаю двойное нажатие на Esc. Думается, что выход из программы - событие гораздо более частое, чем прерывание выбора. "Измерить" же надо прервать только в случае, когда нечего предложить из того, что понимает макрос. Выключить команду теперь можно стопом, крестиком по окошку программы или выделить хоть что-нибудь, что понимает программа. Я бы не портил одинарный esc для выхода из программы, имея столько вариантов.
Кстати, так гораздо нагляднее, когда окно не уходит для измерения.
3) При измерении цилиндра линейкой (кнопкой) перед числом не пишет L =
4) Еще одно сомнительное изменение - нажимать на сами "мм", а не на галку рядом. Это как в библиотеке МиС кнопка для редактирования - это текст внизу в углу. Кто не знает про это, никогда не догадается.
Все-таки предлагаю сделать как на моей картинке.
5) Сформулировал окончательно работу "мм". Я так понимаю вам моё видение не очень нравится.
Итак, в настройках делаем переменную логического типа, которая, естественно, принимает значения true/false. Настройка называется аля "Автоматическое добавление мм". Если true, значит галка мм всегда включена после F5 и добавляет мм, если их нет. Если false, то поведение по вашей версии: не добавляет мм, если их нет и галочка включается, если были найдены мм в конце наименования в "области" габарита.

Вират Лакх

22.09.17, 05:04:03 #113 Последнее редактирование: 22.09.17, 08:10:05 от Вират Лакх
2') Еще вариант для выключения команды измерить. Какая самая популярная кнопка наряду с Esc? Конечно Enter. Если нужна именно клавиша для прерывания, то будет нечто типа пустой ввод. См. UPD ниже.
6) По измерениям:
а) Можно ли сделать выбор круглой грани, а не только ребра, чтобы получить диаметр?
б) Предлагаю настройку записи диаметра. В соответствии с ТЗ диаметр должен записываться в виде D =
Мне значок диаметра что-то не очень. Как-то привык считать, что этот значок привилегия размеров на чертеже. Там еще есть другие значки типа квадрата. Мы же не пишем в спецификации квадратный лист "квадрат50", а пишем 50х50. Тут текстовой документ, во-первых. Во-вторых, D = будет аналогично L =.
в) По измерениям вроде все варианты разобрали, кроме моей экзотики вида D= d= для шайбы с отверстием?
Был бы полный фарш, если можно было указать при измерении поверхность этой шайбы и получить D= d=
7) Дробь материала возможно оформлять покомпактнее? А то "числитель" и "знаменатель" как-то далеко от черты.

UPD
- Попробовал Enter для остановки Измерить. Получается, нельзя в двух местах (процедурах) использовать одну клавишу. Тогда можно сделать but4.bind("<Key>", lambda event: Stop()) и нехай. На любую кнопку отключать можно измерялку (кроме занятых). Только это как-то не по-людски. Будет каждый раз вызываться процедура Стоп.
<Pause> - работает на Pause/Break. Может её? Со времен MS-DOS забыли про break.
Плюс к этому еще работает Пробел = нажатие на кнопку Стоп. Но это всё только при активном окне макроса.

- Кстати!!! А на вызов линейки-то у нас нет горячей клавиши?! Усиленно предлагаю левый Ctrl Alt. Я написал "root.bind("<Alt_L>",lambda event: Izmerit(event))", но там мутить дальше надо с процедурой.

- А еще с появлением горячей клавиши для линейки, кнопку лучше перерисовать, добавив в нее Alt, аналогично трем кнопкам слева от нее. Место там есть. Может даже той же высоты её сделать.

- А ещё мне не нравятся квадратные скобки ни в файловых менеджерах, ни тут. Убал в обоих местах.

- Допустим, я для замера свернул окно макроса в панель задач. Можно ли организовать так, чтобы после получения макросом замера, окно восстановилось?

ТрындецЪ

22.09.17, 11:39:45 #114 Последнее редактирование: 22.09.17, 12:03:08 от ТрындецЪ
Экспресс-обновление v0.7.1

Что нового:
Перед запуском ищет ранее открытые свои копии и, если находит, разворачивает окно.
Научились измерять круглую грань и круглую грань с круглым отверстием (шайбу).
Если окно было свёрнуто для измерения, то снова разворачивается со вставленными значениями.
Добавил константу для подписи "мм" (чекбокс не верну, даже не просите! Могу я, хоть что-то от себя оставить!?)

Горячие клавиши:
Левый Alt - вызов измерений,
Пробел - отмена измерений.
Esc - вернулся на закрытие программы.


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

Upd: К вопросу о "дроби" в материале.
По сути там не дробь, а три строки:
mat2['text'] = material2 + "\n" + "-"*max([len(material2), len(material3)])
mat3['text'] = material3

Черта получается из набора символов "-". Менять это на что-то другое, так же, особого желания нет. Снова всё окно переворошить придётся.

Вират Лакх

22.09.17, 12:54:55 #115 Последнее редактирование: 22.09.17, 14:44:32 от Вират Лакх
1) Свернутое (на левую кнопку и трех в верхнем правом углу) окно макроса пропускает и все равно открывает дубль.
2) После выбора геометрии для команды Измерить стало "окно" макроса, которое в панели задач, мигать. Мол, на меня переключись! Причем не всегда. Но особенно проявляется на шайбах. Не нравится мне так, раздражает. Это наверно из-за разворачивания со вставленными параметрами. Ему надо еще фокус отдать, да? А то я не могу сделать замер и сразу ctrl+enter.
3) Запятую перед " d = " для шайбы.
4) На кнопке Ctrl + Enter предлагаю писать без пробелов до и после +. Эстетика тоже важна :)
5) Пробел - отмена измерений - и так работала с другой клавишей. Может поставим все-таки <Pause> или <Up> (см. п.6)? С пробелом как сейчас при записи габаритов вручную эта команда стоп будет выполняться же. Пусть это не видно будет, но как-то это нелогично.
6) Тоже самое с альтом я поторопился. Решил язык ввода поменять для записи габарита, а линейка запустилась. Сюда предлагаю Down. Поставил себе вверх и вниз. Попробую, на сколько это удобно будет.

Еще думаю отрегулировать появление окна чтобы не в центре, а где-нибудь в углу экрана... Потом отпишусь. Видел, где это в коде написано.

UPD
Думаю, может командам Измерить все же сворачивать окно в панель задач? В прошлый раз-то оно просто исчезало, а тут можно будет развернуть самому, если надо. Тут еще логично получается, что кнопка Down, которая вызывает Измерить, уносит окно вниз.
Или стрелке Up отдать сворачивание окна в панель задач. Получится быстрая комбинация вниз-вверх. Кому не надо сворачивать, вверх не нажимать.
Давайте первый вариант все-таки попробуем?
Потом еще одну мысль напишу.

ТрындецЪ

22.09.17, 15:15:54 #116 Последнее редактирование: 22.09.17, 15:40:52 от ТрындецЪ
Что смог, поправил  в v0.7.2.

Возможно, не находит свои дубли из-за разрядности системы. Там снова дескриптор окна фигурирует. Внёс изменения по аналогии с шаблонами, может, заработает. На моём ПК нормально вычисляет копии.

Решил попутно проблему с дублированием объектов спецификаций документа-детали (не работало удаление старых объектов). Пока, до редактирования объектов, не дошёл.

Горячие клавиши:
Стрелка вниз - "Измерить" (сворачивается окно).
Стрелка вверх - "Стоп".


После разворачивания так и не смог установить фокус на окно.

Вират Лакх

1) Не заработала. Все равно дубль открывает. Как этот дескриптор посмотреть в отладчиках?
2) Отсутствие фокуса после измерения всю малину портит... А если не сворачивать для измерения, то тоже не ставится фокус?
3) Во всплывающем меню вставку шаблона лучше так и назвать "Вставить шаблон", а не текст.
4) Небольшая фишка еще. У меня материал по умолчанию удален, т.е. пустая строка. Если пустой материал, то умная галочка должна отключиться или, оставаясь включенной, не прописывать @/.
5) А вот та самая еще одна мысль. Еще один путь для замеров. Сейчас мы запускаем линейку, а потом указываем. Но возможен путь такой: я выделяю грань, запускаю макрос и линейку. Линейка понимает, что что-то выделено и вставляет, если выделено правильное.
6) Что вы думаете насчет автозапуска линейки и/или автоctrl+enter после линейки? Второе особенно может быть интересно в условиях неработающего фокуса на окне макроса после измерений. Давайте сделаем еще пару настроек для этих двух авто. Просто обозначение детали я могу сделать в другое время, Название отключено. И мне, кроме линейки, делать-то в макросе нечего.

ТрындецЪ

Цитата: Вират Лакх от 23.09.17, 05:44:50
1) Не заработала. Все равно дубль открывает. Как этот дескриптор посмотреть в отладчиках?

Вот тут его получаем (44 строка):
hwnd = win32gui.FindWindow(None, buff.value)
А вот тут я пытался получать из него только цифры, хотя, у меня он и без того только из цифр состоял:
hwnd = int(re.findall(r'\d+', str(hwnd))[0])

Возможно, затык где-то раньше в этой функции. Тогда, после каждого определения переменной, нужно print c именем переменной вводить и смотреть какая переменная не получает значения (она будет равна None), значит проблема в этом месте.

По поводу фокуса:
Метод root.focus_force() должен давать фокус окну, но что-то не работает.

Вират Лакх

Попробовал print переменную написать в разных местах - отзывается компилировать...
вот тут https://stackoverflow.com/questions/22751100/tkinter-main-window-focus пишут:
If focus_force() is not working you can try doing:

window.after(1, lambda: window.focus_force())
It's essentially the same thing, just written differently. I just tested it on python 2.7.

root.focus_force() wouldn't work but the above method did.