Одновременное прослушивание сетевого события и ввода с клавиатуры в Python

#python #wxpython

#python #wxpython

Вопрос:

Я хочу написать (GUI) приложение, которое прослушивает как события клавиатуры (события, генерируемые на стороне клиента), так и сетевой порт (события, генерируемые на стороне сервера). Я мог бы воспользоваться некоторыми советами высокого уровня о том, как это сделать. Некоторая дополнительная информация: — Я использую модуль wxPython для графического интерфейса пользователя — я мог бы установить сокет в неблокирующий режим, но таким образом я должен продолжать опрашивать сокет, продолжая выполнять команду recv() . Я делал это раньше, и я могу вспомнить, что это потребовало значительных ресурсов — я мог бы использовать модуль thread, но поскольку я с ним не знаком, я стараюсь избегать этого, но, возможно, я не могу Совет был бы оценен.

Комментарии:

1. Лучше всего оставить сокет в режиме блокировки. Я уверен, что wxWidgets использует поток диспетчеризации событий, так что плохого в recv том, чтобы вводить данные из вашего сокета в основной поток и обрабатывать события клавиатуры, используя обычные методы обработчика событий ваших объектов GUI? Конечно, вам нужно убедиться, что действия вашего recv потока ввода потокобезопасны.

Ответ №1:

У wxPython есть ключевые события. Вот страница документов wxPython по этому вопросу: http://www.wxpython.org/docs/api/wx.KeyEvent-class.html

wxPython не оборачивает каждую вещь в wxWidgets. Разработчики не думали, что им нужно оборачивать материал, который уже имеет отличную поддержку в самом Python. Таким образом, смотрите Python для поддержки сокетов

И если вы хотите стать действительно тяжелым, загляните в Twisted framework. Есть несколько статей об его использовании с wxPython:

Ответ №2:

Я не эксперт по wx. Не могли бы вы использовать собственные механизмы, управляемые событиями wx? Нажатие клавиши, безусловно, вызовет событие. Wx имеет класс сокетов wxSocketClient(), который может преобразовывать события сокетов низкого уровня (данные готовы, закрыты и т. Д.) В событие wx.

Комментарии:

1. Все это довольно ново для меня, но то, что я нашел до сих пор в Интернете, гласит, что события сокетов не интегрированы в структуру событий wxPython.

Ответ №3:

В документах есть wxKeyEvent. Используйте это, чтобы перехватывать ключи и сокет для отправки их по сети или делать все, что вы хотите! Для сокета см. Этот липкий. Это C , но это даст вам лучшую идею!