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

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

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

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

ТрындецЪ

Цитата: KiDim от 06.09.17, 12:35:38
Запускаю из Пуск. Колесико на курсоре пару секунд и все. Процессов в памяти с названием "pythonw" не нашел. Стоит корпоративный Каспер. Не может он банить Питон? Обычно, если блокирует, то вываливается окошко от него, а тут просто ничего. Но мало ли...

Даже не знаю, что еще предложить. Обычно все мои проблемы с питоном решались его переустановкой.

KiDim

Помучаю еще админов. Может они еще чего скажут... Спасибо за помощь!

ТрындецЪ

Цитата: Вират Лакх от 06.09.17, 10:40:57
Попробуйте у себя в шаблонах добавить свой файл tdp (см. картинку). Может это каким-то боком влияет.

Т.е. у Вас свой файл? А где вы к нему путь прописали для КОМПАСа? Что-то в *.ini не нахожу.

Вират Лакх

Есть свой и стандартный. Они оба в окне шаблонов есть. Оттуда же и открывается свой. Путь никакой не прописывается. Поэтому и влиять не должно, но мало ли. Я свой убрал, оставив стандартный, - эффекта ноль.
Судя по коду, шаблоны как-то мутно вызываются.

ТрындецЪ

06.09.17, 14:43:50 #64 Последнее редактирование: 06.09.17, 15:39:02 от ТрындецЪ
Цитата: Вират Лакх от 06.09.17, 14:21:06
Судя по коду, шаблоны как-то мутно вызываются.

Вызывается оно так:

ksDynamicArray = kompas_object.ksExecDialPredefinedTextEx (float(str(win)[1:]))

Вызываем шаблоны указывая функции дискриптор (номер) дочернего окна, которое в начале было создано и спрятано от глаз:
win = tk.Toplevel(root)
win.withdraw())

Эту запись float(str(win)[1:]я вывел опытным путём.
print win выдавало строку вида ".456786"
Я удалил из нее точку и поменял тип на "действительное число"
После этого заработало.
Возможно Ваша система как-то по другому задаёт дискрипторы.
Нужно смотреть в отладчике что выдаст "print win"

Цитата: Вират Лакх от 06.09.17, 10:40:57
Я вырубил по умолчанию название: Nazvanie["state"] = 'disabled' и check1.deselect()
Деталь называется просто L = 100 мм. При вызове макроса текст все равно заносится в название, а не в габарит. Если потом нажать обновить, то перескакивает вниз, как вы описали сейчас. Где бубном постучать, чтобы при запуске понимал вырубленность названия?

Удалите строку 548
in_Nazvanie.set(naimenovanie)
и замените в строке 578
in_Gabarit.set("") на in_Gabarit.set(naimenovanie)

Цитата: pr0100 от 06.09.17, 11:23:17
Здесь уже что-то другое, операции по изменению синтаксиса не проходят. Видимо в коде появились, имеются какие-то функции по различию версий.
И видимо они где-то в "PartAPI5"

Я ещё изменил способ вызова модуля Tkinter для 2.х питона с from Tkinter import * на import Tkinter as tk, а для третьего питона не поменял.
Попробуй заменить с from tkinter import * на import tkinter as tk.

Вират Лакх

запустил в отладчике при включенном компасе с открытой деталью. не увидел включенный компас?

ТрындецЪ

Экспресс-обновление v0.4.2
1) Теперь запустится и не только в детали или сборке,
2) Добавлена нормальная вставка текстовых шаблонов (вместо выделения или на текущую позицию курсора)
3) Шаблоны вызываются одним нажатием ПКМ, очищение даблкликом ЛКМ.

Цитата: Вират Лакх от 06.09.17, 15:58:48
запустил в отладчике при включенном компасе с открытой деталью. не увидел включенный компас?

Что-то в системе заглючило. Раньше же без проблем запускался. Перезагрузка!

Вират Лакх

06.09.17, 17:49:53 #67 Последнее редактирование: 06.09.17, 18:12:36 от Вират Лакх
ЦитироватьУдалите строку 548
in_Nazvanie.set(naimenovanie)
и замените в строке 578
in_Gabarit.set("") на in_Gabarit.set(naimenovanie)

А можно в код в нужных местах сделать if else в зависимости от одного check1.select() или deselect. Т.е. тут меняю, а остальное "переделывается само", т.е. идет по условию.
Цитировать3) Шаблоны вызываются одним нажатием ПКМ, очищение даблкликом ЛКМ.

Испокон веков было шаблоны на ЛКМх2. Может поменяем местами, раз СКМ не работает?
ЦитироватьЧто-то в системе заглючило. Раньше же без проблем запускался. Перезагрузка!

После перезагрузки то же самое, что и до нее: pyw запускается, а в отладчике - нет.
ЦитироватьЭту запись float(str(win)[1:]я вывел опытным путём.

А почему к коде версии 0.4.2 без флоата? ksDynamicArray = kompas_object.ksExecDialPredefinedTextEx (str(win)[1:])

ТрындецЪ

Цитата: Вират Лакх от 06.09.17, 17:49:53
А можно в код в нужных местах сделать if else в зависимости от одного check1.select() или deselect. Т.е. тут меняю, а остальное "переделывается само", т.е. идет по условию.

Тут снова *.cfg файл напрашивается. Кроме Вас вряд ли кто будет код править под себя.

ЦитироватьИспокон веков было шаблоны на ЛКМх2. Может поменяем местами, раз СКМ не работает?

Не припомню, где такое есть. Вообще все эти удобства чисто субъективны, кто к чему привык, тому так и удобно.
В любом случае, при острой нетерпимости каждый под себя поправить может.

ЦитироватьПосле перезагрузки то же самое, что и до нее: pyw запускается, а в отладчике - нет.

Черт его знает, что ему не нравится. Могу только посоветовать скачать другую программу для отладки. PyScripter бесплатный, например.

ЦитироватьА почему к коде версии 0.4.2 без флоата? ksDynamicArray = kompas_object.ksExecDialPredefinedTextEx (str(win)[1:])

Потыкал сегодня, оказалось и срез строки принимает.

Вират Лакх

07.09.17, 02:50:23 #69 Последнее редактирование: 07.09.17, 04:45:54 от Вират Лакх
Из-за меня одного не надо пока cfg.
В той же основной надписи, в таблице на чертеже, в спецификации, еще где-нибудь - везде ЛКМх2 вызов шаблонов.
Отсюда и привычка. Тут будет неудобно, если не поменять.
Задрал этот питон. PyScripter сказал, что ему надо х32. Я поставил. В итоге опять не работают макросы.
В этом PyScripter запускаться не стало: на эту u, которая перед текстом ругался.
upd:
На другом компе попробовал.
Вот что он говорит на запуск шаблонов:
>>>
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "D:\!Компас\Макро\БЧ.pyw", line 582, in <lambda>
    Gabarit.bind("<Button-3>", lambda event: Text_shablon(Gabarit))
  File "D:\!Компас\Макро\БЧ.pyw", line 450, in Text_shablon
    ksDynamicArray = kompas_object.ksExecDialPredefinedTextEx (str(win)[1:])
  File "C:\Python26\lib\site-packages\win32com\gen_py\0422828C-F174-495E-AC5D-D31014DBBE87x0x1x0.py", line 352, in ksExecDialPredefinedTextEx
    ret = self._oleobj_.InvokeTypes(93, LCID, 1, (9, 0), ((3, 0),),HWindow
ValueError: invalid literal for int() with base 10: '93116360L'

Не вникая в китайскую грамоту выше, выдвину версию, что у вас все эти дела х32-битные, а на х64 - не канает.
Или у вас тоже 64-битность?
При последующих попытках запуска изменяет номер, который в кавычках в конце: Валуев Еррор: инвалид литерал ... '90707912L' или 91621320L и т.д.
Этот print win затолкал в код после win = tk.Toplevel(root) и win.withdraw()
Он написал .91109320L
Потом этот же номер в валуеве пишет после нажатия на правую кнопку.

Умка

Ошибка: При редактировании детали на месте в сборке убиваются ВСЕ объекты спецификации.

Пожелание: В колонке Примечание в массе нужны незначащие ноли после запятой.

ТрындецЪ

07.09.17, 08:42:18 #71 Последнее редактирование: 07.09.17, 09:47:38 от ТрындецЪ
Цитата: Вират Лакх от 07.09.17, 02:50:23
В той же основной надписи, в таблице на чертеже, в спецификации, еще где-нибудь - везде ЛКМх2 вызов шаблонов.
Отсюда и привычка. Тут будет неудобно, если не поменять.

Не замечал, спасибо! Поменял. Но этот вариант плох тем, что нельзя выделить фрагмент текста и вызвать шаблон который этот фрагмент заменит, т.к. двойной клик ЛКМ снимает выделение. Это не знаю где прописано, видимо, в самой Windows.
ЦитироватьValueError: invalid literal for int() with base 10: '93116360L'
Не вникая в китайскую грамоту выше, выдвину версию, что у вас все эти дела х32-битные, а на х64 - не канает.
Или у вас тоже 64-битность

У меня Win7 х32, проверял ещё на х64 Win8 с х32 Компасом 16.0 тоже работало.
По поводу .93116360L могу сказать, что у меня в конце буквы не выдавало, возможно в них и проблема.
Попробуйте с разными вариантами:
просто (win);
(str(win)[1:-1])
(int(str(win)[1:-1]))
(float(str(win)[1:-1]))
Думаю, что второй вариант должен сработать.

Цитата: Умка от 07.09.17, 07:46:17
Ошибка: При редактировании детали на месте в сборке убиваются ВСЕ объекты спецификации.

Не замечал и не смог воспроизвести. И локальные пробовал и внешние. Может поподробнее опишите или эту сборку скините, если не выше v16.0.
ЦитироватьПожелание: В колонке Примечание в массе нужны незначащие ноли после запятой.

Строка 104
iSpc.ksSetSpcObjectColumnText(7, 1, 0, str(round(mass*0.001, 2)).replace(".", ",").rstrip("0").rstrip(",") + u" кг") # Примечание
Тут: round(mass*0.001, 2)
2 - это число знаков после запятой.
Чтобы незначащие нули показывались нужно вырезать  .rstrip("0").rstrip(",")
В итоге для трех знаков с незначащими нулями получим:
iSpc.ksSetSpcObjectColumnText(7, 1, 0, str(round(mass*0.001, 3)).replace(".", ",") + u" кг") # Примечание


Умка

Пардонте-с, ошибка при редактировании детали на месте в сборке не повторилась.

Вират Лакх

На обычный (win) вместо валуева выругался AttributeError: Toplevel instance has no attribute '__trunc__'
(str(win)[1:-1]) - заработало! Вот замуты такие приходится преодолевать...
С заменой фрагмента текста можно или обломиться, или продублировать на СКМ или ПКМ...
Что-то я так не догнал, что там с очисткой на СКМ? Я переставил на буттон-2 - вроде работает.
Уф-ф... Так, над чем дольше работаем?

ТрындецЪ

Цитата: Вират Лакх от 07.09.17, 12:48:19
Что-то я так не догнал, что там с очисткой на СКМ? Я переставил на буттон-2 - вроде работает.

Я вставлял шаблон в одно поле,переходил в другое поле, нажимал СКМ и у меня самопроизвольно  вставлялся текст из предыдущего поля.

KiDim

С утра включил комп и снова попробовал библу. Через IDLE запустилась и выдала след. текст.

Python 2.7.13 (v2.7.13:a06454b1afa1, Dec 17 2016, 20:53:40) [MSC v.1500 64 bit (AMD64)] on win32
Type "copyright", "credits" or "license()" for more information.
>>>
============== RESTART: C:\Users\kiselev\Desktop\БЧ_v0.4.2.pyw ==============

Traceback (most recent call last):
  File "C:\Users\kiselev\Desktop\БЧ_v0.4.2.pyw", line 5, in <module>
    import pythoncom, re, sys
ImportError: No module named pythoncom
>>>
Что скажете?

ТрындецЪ

Цитата: KiDim от 07.09.17, 13:22:06
ImportError: No module named pythoncom
Что скажете?

Может быть не видит модуль из-за того, что две версии питона поставили (х32 и х64). Снесите обе и поставьте ту, на которую давал ссылку Вират Лакх.

По поводу проблемы с вызовом шаблонов:
Унифицировал запись. В следующих версиях будет так:  (re.findall(r'\d+', str(win))[0]) - будет вытаскивать только цифры.

Вират Лакх

На том компе, где запортачилось, та же песня. Ни перестановка, ни отключение контроля учетных записей, ни чистка реестра от старого питона не помогают. Тот же ImportError: No module named pythoncom

ТрындецЪ

Цитата: Вират Лакх от 07.09.17, 18:18:41
На том компе, где запортачилось, та же песня. Ни перестановка, ни отключение контроля учетных записей, ни чистка реестра от старого питона не помогают. Тот же ImportError: No module named pythoncom

Погуглил. Пишут, что pythoncom - это модуль для работы с Windows API.
Если нет его, можно тут скачать, насколько я понял.

Вират Лакх

# Надмись "мм" - в коде м на п поменяйте. Пусть это комментарий, но тем не менее.

Этот pythoncom с компасовским питоном приходит, а чистый с сайта без него. Попробуем по вашей ссылке поставить. Надо, видимо, чтобы еще версии совпадали.

Сейчас в текущей версии СКМ так себя ведет. Выделяем текст и нажимаем СКМ. Вставляется копия. Откуда она берется?? Содержимое буфера обмена совсем другое. Можно в другие поля это выделенное вставлять... Переставил на СКМ очистку. Если текст не выделять и потом в другом поле не нажимать СКМ, то все нормально. А если так сделать, то сотрет и сразу вставит. И будет так делать до тех пор, пока не очищу на СКМ исходник. Можно этот баг использовать как копирование текста одним нажатием из одного поля в другое :)
Предлагаю сделать все же СКМ очистку, а третью кнопку зарезервируем на меню.

По поводу вставки шаблона. Вот как лучше, чтобы он сам сразу замещал весь текст или вставлялся в текущую позицию курсора?
Мне кажется, что лучше сразу замещать весь. Создал шаблон вида 'L = +-' или '+-*+-' и вставляй его поверх того, что там устаревшее/ненужное есть. А сейчас получается надо сначала удалить содержимое самому, а потом шаблон. Может вернем замещение?

Вот как я под себя макрос делаю: без Названия по умолчанию, с ОС в 9-й тип колонки, без создания объекта спецификации по умолчанию, с очисткой на СКМ. См. архив.

На локальной детали, когда галочка создавать ОС выключена, ошибочно пишет, что не удалось создать объект спецификации. Я его и не просил создавать.

Ну и хотелось бы подвести итог на сегодня.
Было бы интересно, чтобы макрос понимал объекты спецификации.
А еще интереснее - это более продвинутый путь ввода габаритов. Как я писал в ТЗ, или это специальные переменные в детали-заготовке, или указание ребер.
Как видится указание ребер. Нажимаем некую новую кнопку. Она работает типа как "Длина ребра". Если указали одно ребро, то макрос автоматом вставляет L = <измеренная длина>. Если указали второе ребро, то убирает L и пишет <измеренная длина>х<измеренная длина>. Может даже с тремя ребрами так сделать. И с диаметрами так же: D = , d =. Может, чтобы не выдумывать свои команды пользоваться компасными, просто считывать у них данные.
А по переменным так. Если они отличны от нуля, то вписать при запуске макроса их в габарит. С условиями, конечно. Например, есть переменные bchl, bcha, bchb, bchs, bchd1, bchd2. Если все по нулям, кроме bchd1, то вписать D = <bchd1>. Если бардак в переменных или все по нулям, то как сейчас есть: считать старые габариты.
Или какие ваши идеи?