|
0 / 0 / 0
Регистрация: 03.11.2020
Сообщений: 4
|
|||||||||||
PyQt5 Зависает графический интерфейс при выполнении задачи03.11.2020, 00:56. Показов 7733. Ответов 9
Доброго времени суток. Сразу извиняюсь за вопрос, уверен, для специалистов ответ очевиден, но я пишу свою первую программу с GUI (надоело скрипты через консоль запускать) И столкнулся с проблемой: моя программа должна будет получать список ip, а затем подключаться к каждому и по FTP закидывать туда файл прошивки и в режиме реального времени выводить отчет о выполнении операции. НО! Пока она подключается, заливает файл, переподключается к следующему объекту, само окно висит. В итоге итог работы я узнаю только когда всё кончилось, и интерфейс отвисает.
Я понимаю, что тут нужно использовать многопоточность, но я не понимаю, ЧТО ИМЕННО Я ДЕЛАЮ НЕ ПРАВИЛЬНО ![]() Мучаюсь уже несколько дней, посмотрел кучу примеров с потоками Python, но ни один из них не помог. Накидал максимально простую программку, чтобы на ней тестировать. Она по нажатию кнопки СТАРТ должна просто и в консоль и в окно 8 раз с перерывом в секунду скинуть время. Итог: я нажимаю "СТАРТ", в консоль начинает выводиться время, окно зависает, проходит 8 секунд, окно отвисает и в нем появляются все значения. Я пробовал создавать другой класс, наследуя его от threading.Thread и стартовать его в функции внутри главного окна - не помогло, сейчас я завис на этом варианте, но результат тот же. Я мозг сломал, помогите, пожалуйста. ![]() Вот файл, сгенерированный QT Designer
0
|
|||||||||||
| 03.11.2020, 00:56 | |
|
Ответы с готовыми решениями:
9
Зависает потом отвисает интерфейс при выполнении цикла while Tkinter. Зависает графический интерфейс Зависает интерфейс при выполнении отдельного потока |
|
0 / 0 / 0
Регистрация: 03.11.2020
Сообщений: 4
|
|||||||||||
| 03.11.2020, 13:17 [ТС] | |||||||||||
|
Посмотрел похожие темы от Programming - решение нашел, правда, я не понимаю, почему это не работает
0
|
|||||||||||
|
1567 / 740 / 321
Регистрация: 02.05.2020
Сообщений: 1,659
|
||
| 03.11.2020, 14:45 | ||
|
в втором случае это вынесено в отдельный поток
0
|
||
|
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
|
||||||
| 03.11.2020, 15:40 | ||||||
|
Drackar, В такой простой программе как у вас,потоки я думаю нахрен не нужны. Не смотрел код,но смысл понятен,я сам мучался с такими, и с потоками у меня до сих пор путаница.
Идею понял,когда что-то делается нужно окно с результатами типа прогресс бара или счетчика.То есть у вас окно в сером цвете или в прозрачном то есть завис пока выполняется что-то. Если есть внутри кода какой нибудь цикл загрузки со счетчиком,то это хорошая идея как избавиться от потоков. Да даже если цикла нет,то можно просто текст меняющийся сделать в разных местах Вот как можно сделать: 1)вам нужно окошко в котором будет сообщаловка о результате в режиме реального времени например у меня
0
|
||||||
|
Модератор
|
|
| 05.11.2020, 10:17 | |
|
Сергей225, любая долгая работа должна выполняться в потоках.
Хочешь писать GUI? Люби и потоки применять. Добавлено через 2 минуты Drackar, кстати в Qt есть собственные потоки, QtCore.QThread. Сразу реализованы сигналы запуска и окончания потоков.
1
|
|
|
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
|
|
| 05.11.2020, 10:46 | |
|
DmFat, Я согласен с вами. Если сложный какой-то процесс то лучше потоки применить. А тут просто выгрузка на фтп. У меня в своей пг тоже есть выгрузка на фтп и загрузка с фтп,но потоки не применяю,все прекрасно и шустро и без него,с окошком о результатах о котором описывал. Когда есть несколько окон в котором параллельно что-то делается то точно нужны потоки. А то получается будет куча потоков,для параллельных процессов и еще для дебильного окошка с результатом пфф,так себе затея. Так что считаю лучшим для окошко то что описал,а остальное в потоки пихнуть если есть какие то дополнительные процессы.
0
|
|
|
0 / 0 / 0
Регистрация: 03.11.2020
Сообщений: 4
|
|
| 05.11.2020, 13:01 [ТС] | |
|
DmFat, Спасибо, посмотрю по ним инфу. А там есть возможность ставить его на паузу, а потом возобновлять с того же места? Скажем, у меня есть пул ip-адресов, и с каждым нужно произвести какое-то действие, и я хочу иметь возможность в процессе приостановить выполнение действия, а потом запустить с того же места?
Сергей225, там не только ftp будет, но и получение данных с ккт, смена ip адреса и прочее... загрузка по ftp просто самый долгий из этих процессов, поэтому я его указал. И, да, возможно, можно было бы написать это без потоков, я хз, но у меня ровно нулевой опыт написания программ. До этого были лишь простенькие скрипты на питоне или java и чуть-чуть VueJs. У меня очень мало опыта, и в таких условиях я предпочту идти проторенной дорожкой, а не изголяться, ища обходные пути...
0
|
|
|
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
|
|
| 05.11.2020, 13:17 | |
|
Drackar, Ну вот для простого и попробуйте мой пример,чтобы посмотреть заработало ли как вам надо или нет. А на счет паузы не знаю,может где остановились записать в переменную и закрыть это окошко и при следующем открытии эту переменную со значением впихнуть в окошко типа аля продолжение процесса. Ну чтоб знать что не висит тупо окошко. То есть закройте окошко перед паузой и потом снова откройте но с другой информацией и все. Это самый простой вариант. Ну а сам процесс задачи которую нужно остановить это уже вам там любым способом,типа таймера или другое что-то.
0
|
|
|
Модератор
|
||||||
| 05.11.2020, 13:18 | ||||||
|
Drackar, если только использовать какой либо курсор. Например:
1
|
||||||
|
13 / 10 / 5
Регистрация: 11.10.2019
Сообщений: 290
|
|
| 05.11.2020, 13:30 | |
|
Drackar, То есть я считаю что само информационное окошко сделать без потока,то есть один общий для всех потоков информация. А сами задачи которые пишете,как сказалDmFat, запихните в потоки.
0
|
|
| 05.11.2020, 13:30 | |
|
Помогаю со студенческими работами здесь
10
Разработать графический интерфейс пользователя и программный код решения следующей задачи Какую библиотеку/Что нужно использовать, чтобы сделать графический интерфейс для данной задачи с многопоточностью Зависает форма при выполнении
Зависает форма при выполнении потока Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд.
Даже если у вас. . .
|
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает
монорепозиторий в котором находятся все исходники.
При создании нового решения, мы просто добавляем нужные проекты
и имеем. . .
|
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение:
В этой книге («Подход, основанный на вариантах использования») Ивар утверждает,
что архитектура программного обеспечения — это
структуры,. . .
|
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога
Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
|
|
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip
На первой гифке отладочные линии отключены, а на второй включены:. . .
|
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога
Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем.
. . .
|
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
|
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
|