Использование raw_input вызывает проблемы с загрузкой страницы PyQt

Я использую PyQt4 для ввода учетных данных на страницу входа в домен и получения данных с нескольких дополнительных страниц в домене. Все работает точно так, как ожидалось, при предоставлении учетных данных для входа или поиска из кода. Когда я открываю raw_input, чтобы позволить пользователю вводить информацию, это вызывает зависание при попытке загрузить одну из веб-страниц. Я не могу предоставить информацию о самой странице, потому что она находится в корпоративной сети, но не имеет смысла, что простое использование raw_input вызовет проблемы с загрузкой QWebpage.

QNetworkManager выдает 1 из ожидаемых 3 или 4 сигналов .finished, а фрейм QWebpage никогда не выдает сигнал .loadfinished, поэтому он просто зависает.

(Я пытался сбросить stdin, а также seek(0), что дает мне неверную ошибку файлового дескриптора). Кто-нибудь уже сталкивался с такой проблемой?


person Sam Martin    schedule 18.06.2015    source источник
comment
Вы можете предоставить код, хотя?   -  person Padraic Cunningham    schedule 19.06.2015


Ответы (1)


raw_input использует синхронный/блокирующий ввод-вывод, не давая Qt возможности продолжить обработку событий в фоновом режиме. Qt на самом деле не готов к тому, чтобы его обработка была остановлена ​​таким образом. Теоретически он должен возобновиться только после завершения raw_input. Но, возможно, тем временем произошел тайм-аут или что-то в этом роде. Вы действительно должны использовать ввод на основе сигнала/события при использовании Qt.

Если взаимодействие с графическим интерфейсом в порядке, вы должны попробовать QInputDialog::getText, потому что снаружи он выглядит как блокирующий вызов, но внутри позволяет Qt продолжать обработку фоновых заданий.

person textshell    schedule 18.06.2015
comment
Построение диалога вместо использования raw_input, по-видимому, устраняет проблему! Кажется странным, что это такой тонкий сбой ... потратил массу времени на анализ части моего кода webkit безрезультатно. Я надеюсь, что моя боль может помочь другому новичку. Текстшелл спасибо! - person Sam Martin; 19.06.2015
comment
Важная часть заключается в том, что диалоговое окно является средством qt, в то время как raw_input является средством python, которое не взаимодействует с внутренней фоновой работой qt. Если бы Qt предлагал простой способ чтения из консоли, он бы тоже работал. Это действительно возможно реализовать. Но это было бы намного больше работы, чем просто использование диалога, уже предоставленного qt. - person textshell; 19.06.2015