2016-10-28 7 views
2

Я написал приложение с Pyside (QtPy). Приложение позволяет пользователю: 1. Сканировать путь. Приложение сканирует путь по умолчанию и отображает существующие папки в этом пути в виде списка флажков. 2. Пользователь может выбрать несколько папок и выполнить процесс (кнопку) во всех этих папках.Как отправить список из основного интерфейса в Qthread в Pyside, QtPy python?

В фоновом режиме: Когда пользователь нажимает «процесс», я просматриваю список флажков и создаю новый список только для выбранной папки (флажки «checked» или «выбранные пользователем папки»).

Фактический процесс для этих папок будет выполняться в цикле в классе QThread.

Задача - Как мой QThread может использовать «список выбранных папок» из основного метода пользовательского интерфейса? На этом этапе единственный способ, которым я смог заставить его работать, - сделать этот список глобальным параметром. Основной метод пользовательского интерфейса задает значения глобальному списку, QThread может читать этот глобальный список.

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

спасибо.

+1

Вы должны быть ль продлить [это] (http://stackoverflow.com/a/ 35534047/1994235) ответьте так, чтобы данные были включены в сигнал от основного потока к qthread (он работает точно так же, как и в обратном направлении, о котором вы сказали, что знаете, как это сделать) –

+0

Привет, спасибо за ваш ответ, поэтому просто чтобы убедиться, что я понимаю, на основе этого: «... поместите свой код в подкласс QObject и переместите этот объект в стандартный экземпляр QThread ...» Мне нужно изменить текущий код, который использует «run», метод к QObject, который позже я буду перемещать ToThread. –

+0

Хорошо. Я переместил весь свой метод QThread «Запуск» на новый метод запуска в myWorker и связал его с сигналом «начального» потока, и он работает как шарм. Но я заметил, что могу выполнить тот же список, что и моя текущая реализация. Довольно смущающе, насколько это просто ... Я мог бы просто сделать что-то вроде: self.myQThread.list = self.myUIlist и теперь мой метод run в потоке видит этот список. –

ответ

0

На самом деле, у меня получилось очень простое решение. Я установил свой список в новом списке в объект потока.

self.runningProcess = clMyThread() #This is my thread object 
self.runningProcess.ThreadList = self.MainList 

self.MainList будет то, что список вы получили в пользовательском интерфейсе, как на входе, а ThreadList тот же список, в резьбе.

Итак, когда вы что-то делать для этого списка в функции потока выполнения, вы можете:

for item in self.ThreadList: 
    do_something() 
+0

Эй, спасибо, я взял такой же подход, но кажется, что, поскольку я запускаю петлю в фоновом потоке, мой компьютер разогревается очень быстро, есть ли способ справиться с этим, без запуска процессора с ума? – Aboogie

+0

Какой процесс вы там работаете? –

 Смежные вопросы

  • Нет связанных вопросов^_^