Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 20, 2022 22:41:51

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

Самодельный внешний модуль не выполняет инструкцию "tkinter" ".bell()"

Olezhka
А у меня нет. Как так? У меня Win 11. И еще заметил, что все скомпилированные в “PYINSTALLER” “EXE” создают у меня два процесса в “Диспетчере задач”. Почему?
У меня Linux. tkinter в Windows и Linux может работать по-разному.
А pyinstaller мы, люди с опытом, не используем вообще, потому что надо правильно дистрибутивы делать. То есть делается установщик программы, а потом этот установщик ставит программу в Program Files, как все обычные установщики программ делают. И тогда это просто скрипты или скомпилированные скрипты, но везде всё работает, во всех реестрах всё записано, все файлы настроек созданы и так далее.



Офлайн

#2 Дек. 20, 2022 22:42:14

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Самодельный внешний модуль не выполняет инструкцию "tkinter" ".bell()"

py.user.next
Вот пример тебе
Спасибо!

Офлайн

#3 Дек. 20, 2022 22:46:25

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

Самодельный внешний модуль не выполняет инструкцию "tkinter" ".bell()"

Olezhka
А вот это имя “__main__” модуль берет из основной программы? Оно для модуля и для основной программы общее?
Поле __name__ есть у каждого модуля, потому что каждый модуль - это объект со своими полями и методами. Ну, обычно там только поля у модулей. Если модуль вызывается сам по себе, в его поле __name__ ставится вот эта строка “__main__”, означающая, что он запускается как отдельный модуль, а не импортируется. Если же модуль импортируется, то в его поле __name__ ставится строка с его именем.



Отредактировано py.user.next (Дек. 20, 2022 22:47:13)

Офлайн

#4 Дек. 21, 2022 10:40:38

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Самодельный внешний модуль не выполняет инструкцию "tkinter" ".bell()"

Спасибо тебе за дельные советы!

py.user.next
То есть делается установщик программы
NSIS-установщик или какой-то другой?
py.user.next
Все модули должны импортироваться в самом верху скрипта. Нельзя делать import посередине скрипта.
А почему посередине нельзя? Ведь и в середине работает импорт. Потому что некрасиво? Не по-профессиональному?
А еще я заставил сигнал работать и без “root”. Просто использовал конструктор “Tk()” с псевдонимом:
 import tkinter as tk
tk.Tk().bell()
И что интересно, тут окно появляется даже без метода “.mainloop()” в конце кода! Но так делать, я так понимаю, тоже некрасиво?


Офлайн

#5 Дек. 21, 2022 11:53:15

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Самодельный внешний модуль не выполняет инструкцию "tkinter" ".bell()"

py.user.next
Из-за этого как раз и нельзя импортировать модули через звёздочку типа
Так ведь, если я правильно понял, инструкция
 from tkinter import *
означает не импорт самого модуля, а импорт всех методов (функций, конструкторов) данного модуля.

Офлайн

#6 Дек. 21, 2022 11:59:09

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Самодельный внешний модуль не выполняет инструкцию "tkinter" ".bell()"

py.user.next
import mod1

def main():
mod1.main()
Тут зацикливание какое-то! Функция вызывает сама себя. В стиле
 while True:

Офлайн

#7 Дек. 21, 2022 12:40:57

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

Самодельный внешний модуль не выполняет инструкцию "tkinter" ".bell()"

Olezhka
NSIS-установщик или какой-то другой?
yandex. установщики
Поизучай их все. Там у каждого свои плюсы и минусы. Но в результате у тебя должен получиться setup.exe, который ты и будешь потом поставлять клиентам. Они будут его запускать и из него всё будет устанавливаться. Вспомни просто, как ты устанавливал Python в Windows. Ты скачал установщик и запустил его, а дальше Python уже поставился где надо и как надо и ярлыки все создал, чтобы его запускать можно было. Вот это всё установщик делает.

Olezhka
А почему посередине нельзя?
Потому что принято это делать наверху в соответствии с PEP8
Imports are always put at the top of the file, just after any module comments and docstrings, and before module globals and constants.

Imports should be grouped in the following order:

Standard library imports.
Related third party imports.
Local application/library specific imports.

You should put a blank line between each group of imports.
Если ты в середине симпортировал модуль, то потом ты можешь об этом забыть и где-то ниже опять начать его импортировать, и так ты будешь делать десять, пятьдесят, сто раз. Весь код будет заполнен этими лишними импортированиями. Если же ты вверху импортируешь все модули, то ты там повторно никогда не симпортируешь один и тот же модуль, потому что все импорты ты видишь в одном месте.

Olezhka
Так ведь, если я правильно понял, инструкция
означает не импорт самого модуля, а импорт всех методов (функций, конструкторов) данного модуля.
Потому что не принято это делать в соответствии с PEP8
Wildcard imports (from <module> import *) should be avoided, as they make it unclear which names are present in the namespace, confusing both readers and many automated tools.
Модуль обычно не один импортируется и у разных модулей внутри могут быть одинаковые имена. Если в одном модуле есть класс под именем Button и в другом модуле есть класс под именем Button, как ты отличишь эти два разных класса? Как ты будешь обращаться к обоим классам, если они будут нужны оба каждый для своей ситуации?

Olezhka
Тут зацикливание какое-то! Функция вызывает сама себя.
Она не вызывает саму себя. Функция из одного модуля вызывает функцию из другого модуля. Просто это как раз тот случай, когда в разных модулях разные функции под одним и тем же именем. Это как в разных папках хранится файл file.txt, только в одном из них написано “привет”, а в другом на писано “пока”. Имена у них одинаковые, а содержимое разное.



Отредактировано py.user.next (Дек. 21, 2022 12:46:21)

Офлайн

#8 Дек. 21, 2022 14:31:30

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Самодельный внешний модуль не выполняет инструкцию "tkinter" ".bell()"

py.user.next
Если ты в середине симпортировал модуль, то потом ты можешь об этом забыть и где-то ниже опять начать его импортировать, и так ты будешь делать десять, пятьдесят, сто раз. Весь код будет заполнен этими лишними импортированиями.
Нет, понятно, что я так делать не буду. Но я ради эксперимента пробовал повторно импортировать один и тот же модуль. Он импортируется с тем же ID. То есть просто перезаписывается. Так ведь? Или повторный импорт просто игнорируется интерпретатором?
py.user.next
Потому что не принято это делать в соответствии с PEP8
Это потому что, когда импортируются все методы, код разрастается? Память забивается?
py.user.next
yandex. установщики
А не хулиганят ли многие из этих установщиков, добавляя в код всяких яндекс-троянов или отправляя исходник твоей программы через “бэкдор”-порт своему создателю? Или я параною?

Отредактировано Olezhka (Дек. 21, 2022 14:44:54)

Офлайн

#9 Дек. 21, 2022 22:11:49

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

Самодельный внешний модуль не выполняет инструкцию "tkinter" ".bell()"

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

Вот пример перекрытия имени модуля каким-то числом
  
>>> import tkinter
>>> 
>>> tkinter.Tk
<class 'tkinter.Tk'>
>>> 
>>> tkinter = 1
>>> 
>>> tkinter.Tk
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'Tk'
>>> 
>>> tkinter + 2
3
>>>
Когда имена модулей все наверху, мы знаем, что мы не можем использовать эти имена для названий каких-то там переменных или функций.

Olezhka
Это потому что, когда импортируются все методы, код разрастается? Память забивается?
Память не забивается, забивается пространство имён. Это типа как взять все файлы со всех папок и положить в одну папку, а потом пытаться что-то найти в этой одной папке. При этом многие имена могут быть вообще одинаковыми. Начнут появляться там файлы file(1).txt, file(2).txt, file(3).txt и ты не будешь знать, что в каком файле, потому что эти цифры 1 2 3 ни о чём не говорят. Другое дело, если эти файлы все лежат в своих папках и из этого понятно, что file.txt в папке cat содержит какую-то информацию про кошку, а file.txt в папке ship содержит какую-то информацию про корабль. А если же они называются file(1).txt и file(2).txt в папке all, то там непонятно, что там в этих файлах и про что.

Модуль определяет своё пространство имён. Объект определяет своё пространство имён. Функция определяет своё пространство имён.

Поэтому ты и можешь, как в примере выше, использовать функцию main() из одного модуля и использовать функцию main() из другого модуля. Это разные функции, имена у них одинаковые, но к ним можно использовать одновременный доступ, потому что они в разных пространствах имён находятся.

Olezhka
А не хулиганят ли многие из этих установщиков, добавляя в код всяких яндекс-троянов или отправляя исходник твоей программы через “бэкдор”-порт своему создателю? Или я параною?
Это не яндексовские установщики, это Яндекс их просто нашёл. Продукцией Яндекса лучше не пользоваться, потому что у них она некачественная. Во-первых, в Яндексе работает много тупых людей, которые пишут полную лажу по меркам мирового уровня, но преподносится это всё как откровение века. Вот они так Яндекс-музыку сделали. Я включаю её на ночь, спать ложусь, просыпаюсь в три часа ночи - она не играет. Смотрю - что-то повисло у них там в сервисе. Потом снова и снова. Пиши им, не пиши им, - ничего не поможет. Там просто вот набирают тупых и отмазки какие-то лепят только постоянно. И критерии там у них “пишите так, чтобы было похоже на правду”. То есть они хотят казаться, а не быть. Так они ещё авторам наврали, что эту музыку нельзя будет скачивать, поэтому там можно все альбомы выкладывать. Как нельзя скачивать? Я даже без скачивания открываю просто кэш браузера и там вся эта музыка лежит в виде mp3-файлов, просто берёшь их, копируешь, и они у тебя будут лежать на диске без всякого сайта и играть. Мне даже не пришлось никак их качать специально. То есть авторы не шарят, они авторам врут спокойно и денежки просто делают на рекламе, а если ничего не работает, то просто отмазки лепят, пока человеку не надоест писать им.

Короче, можно долго писать. Там ещё много чего есть такого. Не будем заостряться. А знаешь, как Яндекс-диск блокируется прекрасно без причины? просто вот такая “умная” нейросеть у них типа (ну, просто дураками очередными написанная), а ты потом не можешь собственные файлы с него обратно достать. Благо, что я туда ничего не клал в единственном экземпляре, иначе просто потерял бы просто важные данные и всё. Так что забудь про эти чудесные продукты. Не будем тут про них писать, слишком много чести. Полдня там этот WebDAV настраивал подключал его в Linux к директориям. А они мне просто грохнули облачный-диск и написали “закрыто по подозрению в совершении сами не знаем чего”. В Google-диск всё то же самое выложил - всё пре-крас-но! Вот с этими можно работать. Столько времени на этот Яндекс потратил, чо-то больше как-то не хочется.

Ну, ты сам знаешь про эти их яндекс-трояны, как ты говоришь. Вот это их стиль! Я подтверждаю! Только там ещё хуже. Думаю, причина это всего в тупизне сотрудников, набирают потому что всех подряд и держат годами.

По всему миру Microsoft всех достала, а в России - Яндекс. Хорошо, что хоть альтернативы есть какие-то, а то бы они вообще в конец обнаглели, как монополисты всякие обычно делают.

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

Если ты так не будешь делать, а будешь качать её с софтосборников всяких, то рано или поздно ты нарвёшься на прошивку. Что это такое? Это сначала человек скачивает эту программу с сайта производителя, потом он в неё зашивает вторую программу и потом он эту программу с зашитой в неё программой выкладывает на софтосборник. Софтосборник при анализе того, что на него выкладывают, может не обнаружить это дело, потому что он там только антивирусами это проверяет и всё. Но зашить-то можно самодельную прогу, которая массовой не является и, следовательно, антивирусы её не знают. Ну и всё, она спокойно пройдёт на софтосборник. И ты там спокойно её оттуда скачаешь, своими антивирусами проверишь её, там всё покажет, что она чистая, и ты её запустишь, а в ней прошивка, которая начнёт действовать, а антивирус при этом будет тебе показывать, что всё отлично на компьютере. Потому что тот, кто эту прошивку делает, прекрасно знает про антивирусы и они у него все установлены и он на всех них проверил эту свою прошивку, прежде чем её зашивать куда-то.

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

Поэтому качай программы только с сайтов производителей этих программ. (Их тоже могут прошить, взломав их сайты там и так далее, но это другой вопрос.)



Отредактировано py.user.next (Дек. 21, 2022 23:01:22)

Офлайн

#10 Дек. 22, 2022 01:51:24

Olezhka
Зарегистрирован: 2022-12-13
Сообщения: 118
Репутация: +  0  -
Профиль   Отправить e-mail  

Самодельный внешний модуль не выполняет инструкцию "tkinter" ".bell()"

py.user.next
Когда имена модулей все наверху, мы знаем, что мы не можем использовать эти имена для названий каких-то там переменных или функций.
Круто! Спасибо за подробное разъяснение!
py.user.next
По всему миру Microsoft всех достала
Чем достала? Троянами? Или кривыми патчами и обновами, после установки которых система начинает тормозить?
py.user.next
Полдня там этот WebDAV настраивал подключал его
Наверное, на “Яндексе” админы эту твою деятельность посчитали подозрительной… может даже подготовкой DDOS атаки сочли Или “нейросеть” их тебя забанила. Помню, я еще в “Алгоритме 2” когда работал, написал прогу, которая по тегам и маркерам в HTML-коде страниц искала картинки и их скачивала ко мне. Парсингом картинок занимался!.. И помню, что мне пришлось вводить задержку времени секунды 2 между скачками. А иначе мне соединение сервак обрывал, видать, из-за слишком частых запросов
py.user.next
Яндекс-диск
А я пользуюсь “Mediafire”.
py.user.next
Если тебе нужна программа, выясняй сначала, кто её сделал
А я обычно, если какую-то прогу в чем-то подозреваю, прогоняю ее через “Procmon”. И потом долго ломаю глаза, выискивая среди тысяч строк, какие там она делала файловые операции, какие процессы дочерние запускала, чего с реестром творила, лезла ли куда-то в сеть… “Procmon” крутой! Он ВСЕ показывает! Или ты знаешь какой-нибудь монитор или отладчик еще круче? Но, сколько ни пользуюсь “Procmon”ом, меня всегда посещает мысль “Так ведь недобросовестная программа, которая должна делать на моем ПК что-то криминальное, она же элементарно может проверять сперва, висит ли ”Procmon“ в процессах. И если висит, то она затаится, ничего хулиганить пока не будет, а будет дожидаться, когда ”Procmon“ уйдет из процессов!
py.user.next
а в ней прошивка, которая начнёт действовать
Помню, давным давно читал статью про резидентные и нерезидентные вирусы… Интересная тема! Но, в чем там между ними разница, давно уже забыл! Или так и не понял…
P.S. А еще есть куча всяких онлайн-сервисов. С нейросетями и без. Которые фотки там как-то обрабатывают, видео. Есть даже сайты для обфускации исходного кода. Ну так я уверен, что все эти онлайн-сервисы… да! они чем-то тебе помогают… может даже бесплатно… НО! Они сто процентно воруют все то, что ты к ним загрузил! Авось, пригодится! Может, ты там очень ценную программу написал, которую у тебя можно украсть и продать!.. Тоже на эту тему вспомнил историю… Написал я один раз ради прикола “вирус”, который с согласия одного сотрудника на работе установил на его рабочий ноутбук. Этот сотрудник - Гриша - тоже увлекался компьютерами… И функция этого вируса была - копировать все данные с подключаемых к ноутбуку флэшек. Только из-за этого работа с флэшкой получалась заторможенной… она долго загружалась, долго открывалась в проводнике… Было палевно! Особенно, если на флешке оказывалась пара фильмов гигабайта по два! А потом мне стало интересно, а что же там Гриша с помощью моего “вируса” насобирал. И я написал второй “вирус”. Так и назвал его “Vorishka_u_Grishki” Установил его на свою флэшку. Во-первых, он запрещал моему первому “вирусу” собирать данные с моей флэшки, а во-вторых, поскольку я знал, куда первый “вирус” прячет скопированные с флэшек данные, он лез в ту папку и копировал ко мне на флэшку все то, что насобирал первый “вирус” у Гришки! Во весело-то было!
… А у Гришки… кстати, он тоже с Винды потом перешел на Линукс. Как он мне объяснял “На Линуксе пока нет ни одного вируса!” Но было это лет 10 назад… Я один чтоль пока дурачок остался, который с Винды на Линукс не перешел?! Ну да ладно! Помню, Гриша этот мне рассказывал, как к нему домой пришла его знакомая. Хотела показать ему фотки. Вставила SD-флэшку в его ноутбук дома… и тут, то ли у него был вирус… то ли на самой флэшке был вирус… В общем он все фотки на ее флэшке зашифровал. Они больше не открывались. Произошло это во время копирования фоток с флэшки на ноут. Но они заподозрили что-то неладное и выдернули флэшку. То есть вирус, по идее, зашифровав “jpeg”и должен был вывести окошко, мол положите столько-то денег на такой-то счет, чтобы разблокировать. Но вирус не успел завершить свою работу! Потом Гришка принес ко мне на работу флэшку с этими закодированными фотками. Я посмотрел. Изучил документацию на формат “jpeg”. Там должна быть куча маркеров в шапке файла. Все эти маркеры исчезли. Также после шапки с маркерами дальше идет в нормальном файле простыня пикселей (координаты, цвет, прозрачность). Массив данных. И единственное, что я понял, это то, что вирус как бы порезал каждую картинку на горизонтальную “соломку” и перемешал. То ли рандомно, то ли по какому-то алгоритму. Но я так восстановить их и не смог! Мозгов не хватило!

Отредактировано Olezhka (Дек. 22, 2022 02:19:27)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version