Уведомления

Группа в Telegram: @pythonsu

#1 Май 5, 2023 12:46:55

Vladej
Зарегистрирован: 2020-03-01
Сообщения: 15
Репутация: +  1  -
Профиль   Отправить e-mail  

Алгоритм для любителя "кодировать".

Здравствуйте. Это снова я, махровый любитель “кодить” с трёх ночи. Очень интересное для меня хобби, но при этом довольно утомительное. Когда приходим в ресторан, то перед нами тарелка и приборы по бокам. В тарелку нам “положили” нечто такое, чего дома вряд ли встретишь. Главное, что съедобное. Для того, чтобы попробовать, нужны приборы. В случае с программированием любитель вроде меня часто полагается на интуитивную спонтанность в поисках правильного решения, иногда вообще методом тыка в пустоту. Это занимает очень много времени. Я использую VSCode но не имею нормальных приборов для быстрого освоения той или иной идеи. Не хватает упорядоченности в таком деле. Бывает, что решение оказывается очень простым, очень. Но на его поиски потрачено уйма времени. Поделитесь опытом, как вы строите своё изучение языка, каков алгоритм у вас сложился, который облегчает это занятие? Надеюсь, задал несложный вопрос.

Офлайн

#2 Май 5, 2023 15:36:32

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Алгоритм для любителя "кодировать".

Vladej
Когда приходим в ресторан, то перед нами тарелка и приборы по бокам. В тарелку нам “положили” нечто такое, чего дома вряд ли встретишь. Главное, что съедобное. Для того, чтобы попробовать, нужны приборы.
Ты знаешь, филология в программировании до добра не доведёт. Там надо знать математику, а у филологов с этим туго, так как мышление другое.

Vladej
Я использую VSCode но не имею нормальных приборов для быстрого освоения той или иной идеи.
Это же редактор кода просто.

Vladej
Бывает, что решение оказывается очень простым, очень.
Да, ты просто берёшь глыбу и откалываешь от неё все лишние части от скульптуры, которая в ней прячется. Сколько нужно знать и уметь, чтобы это делать? Ну, нужно годами учиться, пока вся лишняя шелуха слезет.

Vladej
Поделитесь опытом, как вы строите своё изучение языка, каков алгоритм у вас сложился, который облегчает это занятие?
Первые три года ты входишь в программирование только. Я имею в виду первые три года самообразования в этом направлении. В вузе бы из тебя выжали всё, как из лимона, очень интенсивно, тебя бы заставляли прорешивать сотни задач за месяцы, чтобы ты за полгода проходил сразу много материала, а при их откладывании тобой стимулировали бы тебя отчислением из вуза и социальной смертью, хотя она надумана, конечно, но для молодого такая байка сойдёт. Ещё, знаешь, неизвестно, кому повезло, тому дворнику, который просто метёт метлой с рассвета и до забора и получает свою зарплату периодически, или тому преподу, который весь такой умный, но ему даже покушать купить не на что, так как “деньги будут потом” и “работайте так, как будто деньги есть”. Так что вуз, конечно, - это хорошо, но и самообразование вне вуза много нервов бережёт и идёт в целом лучше и свободнее.

Три года ты просто входишь в тему. Затем тебе открываются направления, по которым ты можешь идти уже. Там тебе уже не надо ничего пробовать, ты уже знаешь, что не надо идти туда-то, потому что там у тебя всё равно ничего не выйдет. Так что ты выбираешь направление. И по этому направлению ты учишься ещё года четыре. Проходит так семь лет и через семь лет ты получаешь такое открытие направлений разных, которые раньше были закрыты. И после этого ты уже начинаешь учиться по-настоящему. Но и технологии начинают впитываться одна за одной. Поэтому кайф от этого получаешь, не то что раньше, в первые три года, когда долбишься в стену и ничего не получается всё равно. Я когда-то так до-о-о-олго с методом Гаусса сидел для решения системы уравнений. Вроде на бумаге могу легко решить её (нахождения корней в системе уравнений, включая фундаментальное решение (решение без точного решения)), а в коде вообще не получается её записать. Сейчас я об этом даже не думаю - ерунда. Во-первых, она нафиг не нужна, во-вторых, она делается просто не так, как я пытался тогда. Главное, нужно понимать, что каждый код требует своей сложности, и если код сложный, то не надо пытаться уложить его в простую форму. Надо дать коду любую сложность, которая ему требуется. А не можешь дать такую сложность, то и, значит, уровень не твой ещё, надо спуститься на что-то попроще. Это всё - подобное чутьё - со временем приходит.

Vladej
Поделитесь опытом, как вы строите своё изучение языка
Ну, VSCode для этого маловато. VSCode - это часть необходимых компонентов. Придумать программу VSCode не поможет. Разработать план реализации программы VSCode тоже не поможет. Так что для этого тебе придётся читать книги от профессионалов и признанных личностей в деле программирования. И там уже смотреть, как они описывают разработку программы на примере. Смотри, кто что сделал за всю свою жизнь, и если человек хоть что-то создал, а потом и книгу написал для других, то эту книгу можно читать. Если же он просто болтун или же местечковый специалист, то лучше его проигнорировать, несмотря на регалии. Для изучения же самого языка нужно получить его исходную документацию, скачать её себе в компьютер и заниматься по ней, проходить её последовательно пункт за пунктом, прорешивая каждую часть. Примеров и задачек там нет обычно, но надо для запоминания конструкций каждую особенность записать в коде руками и посмотреть, как она работает. Так ты и выучишь постепенно то, с чем работаешь, и заодно проверишь свои расхождения в теоретических представлениях и практических результатах. Бывает так, что тебе кажется одно, а на практике проверяешь и оно оказывается другим. Теоретически ожидаешь там одну кодировку и уверен в этом, что она там и будет, потом проверяешь, а там оказывается другая кодировка и ты начинаешь это расследовать и приходишь к выводу, что там есть потайная настройка. Такие секреты на дороге не валяются, их надо добыть самому. Труда много в этом.



Отредактировано py.user.next (Май 5, 2023 15:51:15)

Офлайн

#3 Май 5, 2023 21:29:17

Vladej
Зарегистрирован: 2020-03-01
Сообщения: 15
Репутация: +  1  -
Профиль   Отправить e-mail  

Алгоритм для любителя "кодировать".

py.user.next
Это же редактор кода просто
ну да, если уже всё знаешь, то это просто блокнот для редактирования кода.
py.user.next
Да, ты просто берёшь глыбу и откалываешь
А вы, смотрю, тоже филолог ? Но только не в ресторане, а в руднике. Я такой же филолог, как и программист. Но хоть в филологии преуспел, спасибо, польстили. Вообще-то, насколько понимаю, данный язык относится к числу ООП. А это значит, что при первых шагах “филология” или что-то аналогичное востребовано. Или я не прав? Но это так, между прочим.
py.user.next
Сейчас я об этом даже не думаю - ерунда……
это было интересно узнать. я хоть и нулевой уровень (в год ковида, когда сидели по домам, скомпилировал себе две программульки для личного пользования, сейчас пытаюсь написать третью), но мой “опыт” показывает, что то, что пытаешься создать, на самом деле проще, чем думаешь. Как будто заранее ищешь нечто сложное, а оно на деле неожиданно простое. Но это связано с недостатком информации, знал бы заранее, “написал” бы как правильно, не уходя в небеса. А вот чтобы знать, нужны какие-то допприборы под рукой, потому и тема про алгоритм действий.
py.user.next
нахождения корней в системе уравнений, включая…
вы меня извините, но наверное для этого и пришлось столько лет … , а у меня запросы простые, “крестьянские”. Хотя от вуза я бы не отказался, но с моим слухом мне там только орать придётся. Поэтому самоучимся. А вот что касается всё же Гаусса…? Это диск можно за минуту переформатировать. А человек - очень инертное природное образование, его переформатирование может занимать десятки лет, но если с курсами и активной практикой, то десять лет, и то результат не будет идеальным. Это так в любой отрасли.
py.user.next
но надо для запоминания конструкций каждую особенность записать в коде руками и посмотреть, как она работает.
именно так и начинал, сразу писать код и испытывать. А вот с приборами непонятно. Они вроде есть - документация, примеры с известных ресурсов (книги от профи… это вообще что такое? какое это имеет отношение к программированию? скорее всего это про личное, у меня нет времени читать книжки), но алгоритм всё равно не налаживается. Не сложилась за столько лет существования этой отрасли некая структура, даже расширения VSCode не компенсируют нехватку информации. Вообще считаю, что наличие такого количества расширений - это признак отсутствия некой выстроенной структуры, отчасти присутствует анархия, вот и разбирайся сам, если охота.

Ну что же, спасибо за ответ. Не скажу, что помог, но всё равно.

Офлайн

#4 Май 6, 2023 10:57:08

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Алгоритм для любителя "кодировать".

Vladej
Они вроде есть - документация, примеры с известных ресурсов (книги от профи… это вообще что такое? какое это имеет отношение к программированию? скорее всего это про личное, у меня нет времени читать книжки), но алгоритм всё равно не налаживается.
Зайди просто сюда.
В разные годы я писал здесь таким вот начинающим инфу.

Vladej
Не сложилась за столько лет существования этой отрасли некая структура
Да сложилось всё, просто ты не прочитал ни одной книжки. В них всё и написано - то, что ты тут спрашиваешь.



Офлайн

#5 Май 6, 2023 14:23:57

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Алгоритм для любителя "кодировать".

Я использую VSCode но не имею нормальных приборов для быстрого освоения той или иной идеи.
У меня для тебя плохие новости.
Ибо единственный инструмент программиста это его голова



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#6 Май 6, 2023 16:10:19

Vladej
Зарегистрирован: 2020-03-01
Сообщения: 15
Репутация: +  1  -
Профиль   Отправить e-mail  

Алгоритм для любителя "кодировать".

ZerG
У меня для тебя плохие новости.
Ибо единственный инструмент программиста это его голова
очень здорово, “да здравствуй анархия - мать порядка”!
Программирование - это точная дисциплина, подразумевающая чёткий же алгоритм.
И если процесс начинается с захламления головы, а потом процесс разбора хлама в течение десяти лет, то да - единственным инструментом остаётся голова, а не чёткий алгоритм. Может это особенность пайтона? Не знаю как на других языках. Вот слышал, что программный код самолёта F-16 состоит из более чем миллиона строк. Невозможно проверить, но даже если полмиллиона, вы также будете “надеяться” на свою голову, анархист?

Офлайн

#7 Май 7, 2023 00:34:17

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Алгоритм для любителя "кодировать".

Vladej
скомпилировал себе две программульки для личного пользования, сейчас пытаюсь написать третью
Vladej
Как будто заранее ищешь нечто сложное, а оно на деле неожиданно простое. Но это связано с недостатком информации, знал бы заранее, “написал” бы как правильно, не уходя в небеса. А вот чтобы знать, нужны какие-то допприборы под рукой, потому и тема про алгоритм действий.
Приведи пример этих программ. Посмотрим, что ты знал, что ты не знал и почему так получилось. Сам ты явно в каких-то дебрях плаваешь.

Vladej
Вообще-то, насколько понимаю, данный язык относится к числу ООП. А это значит, что при первых шагах “филология” или что-то аналогичное востребовано.
А что такое ООП, ты же не знаешь. Ну, относится он к числу ООП-языков; ну, и о чём тебе это говорит?

Vladej
И если процесс начинается с захламления головы, а потом процесс разбора хлама в течение десяти лет, то да - единственным инструментом остаётся голова, а не чёткий алгоритм.
Начни думать с программ. Вот есть разные программы сложные, которыми ты пользуешься каждый день: нажал на одну кнопку - она тебе выдала всё и даже больше. Кто их написал? Программисты. А как вот эти программисты, которые уже написали вот эти программы, стали программистами? Они учились либо в вузах, либо сами по книжкам, либо и в вузах и сами по книжкам. А как они учились в вузах, по какому алгоритму? А как они учились по книжкам, по какому алгоритму? Вот так они и научились. Когда сам учишься, то ты просто стараешься приблизить своё обучение к вузовскому, поэтому применяешь вузовский алгоритм, собирая его сам вручную.

А то, что ты пишешь, по большому счёту похоже на ахинею очередного гения. “Я вот ничего не знаю, но хочу всё знать, поэтому то, что знают другие, я буду отрицать, а вместо этого буду выдавать себя за хранителя секрета, который не знает никто. Я новый Перельман, я новый Нострадамус, я новый Платон, я новый Ньютон и новый Ломоносов одновременно, а они все, вот эта вся шушера мелкая, они все - лохи!”. В лучшем случае это закончится ничем. В худшем - сначала изоляцией (тебя все будут посылать постепенно и ты будешь сам с собой эти мысли умные мыслить), а потом и психушкой с синдромом каким-нибудь среди таких же по палате. Там их много лежит и все как один Наполеоны.



Отредактировано py.user.next (Май 7, 2023 14:23:08)

Офлайн

#8 Май 7, 2023 22:20:34

Vladej
Зарегистрирован: 2020-03-01
Сообщения: 15
Репутация: +  1  -
Профиль   Отправить e-mail  

Алгоритм для любителя "кодировать".

не знаю как разговаривать с человеком, который зарегистрирован аж в 2010 году. У меня компьютер появился в 2006, а вы уже советы свои раздавали по “узкой” теме, “страна советов” называется. Ну и что мне с вами делать, next? Next - это ваше последнее имя? А первое какое? А может py.user.update(self.py(v2.0)) или вы всё про вузы с наполеонами будете рассказывать? Это не имеет никакого отношения к программированию. Ну коли спросили:

py.user.next
Приведи пример этих программ. Посмотрим, что ты знал, что ты не знал и почему так получилось
я уже состряпал третью программульку сегодня, всего 230 строк, скомпилировал в .exe. Как говорят индейцы: сегодня хороший день для смерти (надеюсь вы понимаете поговорку). Потратил времени - два-три часа свободного после работы времени почти каждый день в течение трёх месяцев. Вы мне и здесь будете про вузы с наполеонами рассказывать? Я сам слона проглочу, если понадобится. Как сама программа работает по чёткой инструкции, так и программирование следует чёткой инструкции, науки здесь как таковой нет, нужно просто знать ПДД - где можно направо, а где можно налево. В вузах же осваивается логика, выстраивается менталитет будущего программиста (вообще любого отраслевика, иначе на практике будет выглядеть… дворником в рясе). Почему я говорю, что решение часто бывает неожиданно простым? Потому что менталитет не подготовлен к логическим задачам, наш мозг - это анархия: как хочу, так и ворочу, поэтому всё простое для него является неожиданным и действенным. Ну вот, пожалуйста, один из последних моментов:
 import pyautogui as pg
..........
pos = pg.position()
self.setGeometry(pos[0], pos[1]-50, 400, 200)
элементарно же, правда? Я этого не знал, когда искал способ привязать к курсору. А когда начал рыться, навалился весь хлам, и где-то там заблестела жемчужинка. Оказалось, что нужно всего лишь три дополнительные строчки в коде! Вот потому и спрашиваю: каков должен быть алгоритм в поисках решений, без рассказов про вузы с советами и наполеонами. Код же есть, pyautogui есть, а роешься как будто во мраке.



Офлайн

#9 Май 8, 2023 00:47:39

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 9849
Репутация: +  853  -
Профиль   Отправить e-mail  

Алгоритм для любителя "кодировать".

Vladej
Я этого не знал, когда искал способ привязать к курсору.
А почему ты тогда этого не знал, а сейчас это знаешь? Наверное потому, что ты это проделал, проработал.

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

Вот ты говоришь “я ищу простые решения”. Так простые решения так и находятся: ты в голове у себя отметаешь сто сложных решений и выбираешь из них самое простое. А чтобы его знать, чтобы знать все эти сто решений, нужно это всё проработать. И для этого как раз и существуют вузы, которые сначала тебе это всё расскажут, а потом будут тебя каждый день заставлять это всё прорабатывать.

Так что ты просто дурак. Значит, ты дурак, у тебя постоянно при этом прёт, что ты не дурак. Ты пытаешься доказать всем, что ты не дурак, хотя у тебя даже об этом никто не спрашивал ничего и не говорил тебе даже, никто и не думал даже о твоих умственным способностях. Ты просто сразу заходишь и первым делом говоришь “Здравствуйте! А я-то не дурак!”. Ты этого не замечаешь, но нам это видно всем и мы тебе просто об этом не говорим. Но при этом все постоянно тебе говорят, что ты дурак. Вот ты ходил где-то там в реале, пришлось оттуда уходить, там уже все посылают тебя. И ты припёрся уже на форум в Интернете, чтобы рассказать заодно, какой ты умный, опять. Но у тебя и тут ничего не выходит, поэтому ты начинаешь злиться в отчаянии “Где же моё спасение? спасение от того, что я дурак? а то я уже начинаю это чувствовать, что это правда всё”. А проблема в том, что ты не можешь принять это. У тебя завышенная самооценка и из-за этого ты испытаваешь все эти проблемы. Ты людей пытаешься убедить в том и людям пытаешься доказать то, чем ты не являешься.

Никто не воспринимает тебя здесь как умного. Забудь это.
Никто не воспринимает тебя здесь как программиста. Забудь это.

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

Так что решение у этого всего простое. Ты принимаешь мысль такую “я - полный дурак”. Спокойно её принимаешь, без эмоций, успокаиваешься, короче. Потом ты с этой мыслью выходишь на улицу или куда там и общаешься со всеми. Если у тебя хватит смелости, можешь сказать людям, с которыми общаешься, что вот мол я-то дурак на самом деле. И вот тогда люди станут с тобой общаться хорошо. Потому что дураком быть не плохо, плохо быть говном. Никто не будет тебя судить за то, что ты дурак. Дураков много, они имеют право на жизнь и не могут прыгнуть выше своей головы, они в этом не виноваты. Никто тебя не будет за это мочить. Другое дело, если ты со своим мнением тупорылым лезешь куда-то на верха. Оттуда тебя выкинут сразу, и ты будешь страдать от этого выкидывания, да, потому что тебе там не место.

Vladej
не знаю как разговаривать с человеком, который зарегистрирован аж в 2010 году. У меня компьютер появился в 2006
У меня комп появился дома в 1993-м году. В Интернет я попал в 1998-м году. И то я за год до этого про Интернет читал книгу, я готовился к выходу в Интернет. Так что у меня основательный подход к этому. За компом я вырос и всегда хотел этим заниматься. Это не вынужденная какая-то хрень, как у тебя. Ты припёрся из-за бабок сюда, скорее всего, иначе бы ты тут был раньше. А те, кто из-за бабок приходят, они все поголовно ищут волшебную пилюлю, типа съел - и всё знаешь за секунду.

Vladej
Ну и что мне с вами делать, next? Next - это ваше последнее имя? А первое какое? А может py.user.update(self.py(v2.0))
Я когда регистрировался тут, тут уже был py.user. В то время я уже знал язык C и писал на нём связные списки часто, поэтому мой ник означает, что я по-сишному взял узел py.user и сослался на указатель на следующий элемент в связном списке после него, который хранится прямо в этом же узле. То есть получилось, что на форуме есть два py.user'а одновременно в одном списке py.user'ов и один другому никак не мешает. Тебе, как непрограммисту, этого всего не понять. Пока ты с одним языком копошишься, со своим первым языком, мы уже знаем по несколько языков. И на твои бредни поэтому своё внимание даже не обращаем.

Vladej
Это не имеет никакого отношения к программированию.
Это всё имеет отношение к программированию. Это ты просто не в теме и абсолютно левый человек в этой области.



Отредактировано py.user.next (Май 8, 2023 01:01:22)

Офлайн

#10 Май 8, 2023 13:47:31

Vladej
Зарегистрирован: 2020-03-01
Сообщения: 15
Репутация: +  1  -
Профиль   Отправить e-mail  

Алгоритм для любителя "кодировать".

py.user.next
Ты припёрся из-за бабок сюда
Я!? Мда-а… прочитал тут про себя … давненько в зеркало не смотрел. Это примерно так:

class Snipping(QtWidgets.QMainWindow):
closed = QtCore.pyqtSignal()

def setupUi(self):
self.py_user_next.closed.connect(self.closed)

def closed(self):
pixmap = QtGui.QPixmap('Vladej')
self.mirror.setPixmap(pixmap)
self.show()

Похоже? Зеркало очень кривое. Про “бабки” вы пролетели полностью, можете мне верить. Касательно “дурака” - это всё очень субъективно, когда не знаешь другого человека, и вообще, к программированию это всё отношения не имеет. Предлагаю рассуждать на конкретной для меня “проблеме”. Хотелось бы понять ход рассуждений тех, кто давным-давно пишет код.

Небольшое отступление. В 2020 “написал” для себя компактный, настольный переводчик с нескольких языков на русский. Он мне помогает читать комментарии, которые оставляют в коде. Китайцы, отчасти турки - довольно словоохотливые. Это помогало и помогает понять работу кода. Ну и англ. тоже. Когда мне нужен перевод, то окно программы выходит поверх других окон и показывает перевод. Это благодаря одной строчке в коде:
self.setWindowState(Qt.WindowActive)

без него программка переводила, но поверх не выходила, приходилось из панели задач разворачивать. Сейчас я попробовал сделать себе переводчик текста, который присутствует на картинке. Метод OCR + переводчик с англ.. Программка запускается в трее и включается по горячей клавише, чтобы сделать скриншот участка. Появляется перекрестие и всё такое далее. Если я делаю второй следом скриншот, то программка мигает в панели задач, и перекрестие появляется только после развёртывания из панели. Qt.WindowActive тут не помогает. Слона я и сам проглочу рано или поздно, но с этого момента хотелось бы услышать каков ход мышления у вас в поисках решения, а не готовая подсказка. Вот с чего я должен начинать поиск, абсолютно не зная направления? А код, пожалуйста:
 import json
import os
import time
import cv2
import keyboard
import pyperclip
import requests
from PIL import Image, ImageGrab
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtCore import QObject, QPoint, QRect, QRectF, Qt, pyqtSignal
from PyQt5.QtGui import QColor, QIcon, QPainter, QPainterPath
from PyQt5.QtWidgets import QAction, QApplication, QMenu, QSystemTrayIcon
from pytesseract import pytesseract
from Transler51 import Ui_MainWindow
import pyautogui as pg
URL = "https://translate.api.cloud.yandex.net/translate/v2/translate"
KEY = "............"
class KeyboardManager(QObject):
    pasteSignal = pyqtSignal()
    def start(self):
        keyboard.add_hotkey("f8", self._f8_callback)
    def _f8_callback(self):
        self.pasteSignal.emit()
class Snip(QtWidgets.QMainWindow):
    closed = pyqtSignal()
    def __init__(self, parent=None):
        super(Snip, self).__init__(parent)
        self.setAttribute(Qt.WA_NoSystemBackground, True)
        self.setAttribute(Qt.WA_TranslucentBackground, True)
        self.setStyleSheet("background:transparent;")
        self.setWindowFlags(Qt.FramelessWindowHint)
        self.outsideSquareColor = "yellow"
        self.squareThickness = 2
        self.start_point = QPoint()
        self.end_point = QPoint()
    def mousePressEvent(self, event):
        self.start_point = event.pos()
        self.end_point = event.pos()
        self.update()
    def mouseMoveEvent(self, event):
        self.end_point = event.pos()
        self.update()
    def mouseReleaseEvent(self, QMouseEvent):
        r = QRect(self.start_point, self.end_point).normalized()
        self.hide()
        img = ImageGrab.grab(bbox=r.getCoords())
        img.save("D:\.......\testImage.png")
        QApplication.restoreOverrideCursor()
        self.closed.emit()
        self.start_point = QPoint()
        self.end_point = QPoint()
    def paintEvent(self, event):
        trans = QColor(22, 100, 233)
        r = QRectF(self.start_point, self.end_point).normalized()
        qp = QPainter(self)
        trans.setAlphaF(0.2)
        qp.setBrush(trans)
        outer = QPainterPath()
        outer.addRect(QRectF(self.rect()))
        inner = QPainterPath()
        inner.addRect(r)
        r_path = outer - inner
        qp.drawPath(r_path)
        qp.setPen(
            QtGui.QPen(QColor(self.outsideSquareColor),
                       self.squareThickness)
        )
        trans.setAlphaF(0)
        qp.setBrush(trans)
        qp.drawRect(r)
class MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.ui = Ui_MainWindow()
        self.ui.setupUi(self)
        self.ui.pushButton_3.clicked.connect(self.Flags)
        self.ui.pushButton_2.clicked.connect(self.copy_clipboard)
        self.ui.pushButton.clicked.connect(self.close)
        self.ui.textEdit.setStyleSheet("font: 10pt \"Tahoma\";\n"
                                       "background-color: rgb(66, 66, 66);\n"
                                       "color: rgb(255, 255, 255);")
        self.snipper = Snip()
        self.snipper.closed.connect(self.read)
        keyboard_manager = KeyboardManager(self)
        keyboard_manager.pasteSignal.connect(self.activateSnipping)
        keyboard_manager.start()
        self.createTrayIcon()
        icon = QIcon(r'D:\........\.png')
        self.trayIcon.setIcon(icon)
        self.trayIcon.show()
        self.trayIcon.showMessage(
            'Привет', 'Используй F8\nred - CLOSE\nblue - COPY\ngreen - OnTop')
    def Flags(self):
        self.setWindowFlags(self.windowFlags() ^
                            QtCore.Qt.WindowStaysOnTopHint)
        self.show()
    def createTrayIcon(self):
        self.screenAction = QAction("&Screen", self,
                                    triggered=self.activateSnipping)
        self.screenAction.setShortcut('F8')
        self.quitAction = QAction("&Quit", self,
                                  triggered=QApplication.instance().quit)
        self.trayIconMenu = QMenu(self)
        self.trayIconMenu.addAction(self.screenAction)
        self.trayIconMenu.addSeparator()
        self.trayIconMenu.addAction(self.quitAction)
        self.trayIcon = QSystemTrayIcon(self)
        self.trayIcon.setContextMenu(self.trayIconMenu)
    def activateSnipping(self):
        self.snipper.showFullScreen()
        QtWidgets.QApplication.setOverrideCursor(QtCore.Qt.CrossCursor)
        self.hide()
    def mousePressEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.old_pos = event.pos()
    def mouseMoveEvent(self, event):
        if not self.old_pos:
            return
        delta = event.pos() - self.old_pos
        self.move(self.pos() + delta)
    def mouseReleaseEvent(self, event):
        if event.button() == Qt.LeftButton:
            self.old_pos = None
    def read(self):
        image = r'D:\........\.png'
        preprocess = "thresh"
        image = cv2.imread(image)
        gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
        if preprocess == "blur":
            gray = cv2.medianBlur(gray, 3)
        elif preprocess == "thresh":
            gray = cv2.threshold(gray, 0, 255,
                                 cv2.THRESH_BINARY | cv2.THRESH_OTSU)[1]
        filename = "D:/....../Translate/{}.png".format(os.getpid())
        cv2.imwrite(filename, gray)
        path_to_tesseract = r"C:\Program Files\Tesseract-OCR\tesseract.exe"
        pytesseract.tesseract_cmd = path_to_tesseract
        text = pytesseract.image_to_string(Image.open(filename))
        os.remove(filename)
        with open(r"D:\...........\text.txt", "w") as file:
            file.write(text)
            file.close()
        self.translate(text)
    def translate(self, text):
        pos = pg.position()
        self.setGeometry(pos[0], pos[1]-50, 400, 200)
        headers = {"Content-Type": "application/json",
                   "Authorization": "Api-Key " + KEY}
        params = {
            "texts": text,
            "sourceLanguageCode": 'en',
            "targetLanguageCode": 'ru'
        }
        response = requests.post(URL, headers=headers, data=json.dumps(params))
        translations = response.json()['translations']
        output = []
        if len(translations) < 2:
            output = translations[0]['text']
            self.ui.textEdit.setPlainText(output)
            self.show()
        else:
            for el in translations:
                output += [el['text']]
        return output
    def copy_clipboard(self, text):
        text = self.ui.textEdit.toPlainText()
        pyperclip.copy(text)
        time.sleep(3)
        pg.hotkey('ctrl', 'a')
        pg.hotkey('ctrl', 'c')
        return pyperclip.paste()
if __name__ == '__main__':
    import sys
    app = QApplication(sys.argv)
    window = MainWindow()
    window.setStyleSheet("background-color: rgb(66, 66, 66);")
    window.setWindowFlags(QtCore.Qt.Window |
                          Qt.CustomizeWindowHint)
#    window.show()
    sys.exit(app.exec_())

Отредактировано Vladej (Май 8, 2023 14:06:42)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version