Выполнить код Python из цикла событий PyQt - PullRequest
4 голосов
/ 04 февраля 2011

Я тестирую графический интерфейс, построенный с использованием PyQt, и мне хотелось бы иметь возможность взаимодействовать с графическим интерфейсом, используя код Python, который выполняется после запуска цикла событий PyQt (app.exec_()). Еще один способ сказать, что мне нужен вызовна app.exec_ для немедленного возврата, как если бы графический интерфейс пользователя был немодальным, за которым следует дополнительный код Python, который взаимодействует с графическим интерфейсом.

Я нашел это пример запуска цикла PyQt в потоке, ноЯ не хочу делать что-то необычное. Есть ли способ заставить цикл сообщений PyQt продолжить обработку сообщений, одновременно выполняя код Python в основном потоке после вызова exec_?

Ответы [ 4 ]

0 голосов
/ 06 октября 2014

Самый простой способ - использовать IPython:

ipython --gui=qt4

См. ipython --help или онлайн-документацию для дополнительных опций (например, gtk, tk и т. Д.).

0 голосов
/ 10 февраля 2011

Не совсем уверен, что ты хочешь делать. Вы ищете что-то вроде Py (известный как PyCrust) для PyQt?

0 голосов
/ 22 февраля 2011

Один из вариантов здесь - использовать вызов QtCore.QTimer.singleShot() для запуска кода Python после вызова `exec _ () '.

Например:

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)

    # Setup the GUI.    
    gui = MyGui()
    gui.showMainWindow()

    # Post a call to your python code.
    QtCore.QTimer.singleShot(1000, somePythonFunction)

    sys.exit(app.exec_()) 

Это выполнит функциюsomePythonFunction() через 1 секунду.Вы можете установить нулевое время, чтобы добавить добавленную функцию в очередь для выполнения.

0 голосов
/ 06 февраля 2011

Я понял. Я могу выполнить тестовый скрипт построчно из основного потока, используя exec, а затем запустить графический интерфейс из рабочего потока.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...