Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
0 / 0 / 0
Регистрация: 24.03.2020
Сообщений: 6
1
PyQt5

Как обратиться к объекту на форме из другого потока?

08.12.2020, 15:04. Показов 2525. Ответов 2

Author24 — интернет-сервис помощи студентам
У меня есть форма Qt. На ней расположен stackNameLabel. У меня есть второй поток, который отвечает за то, чтобы проверять не изменились переменные Bool и в случае, если изменились читать следующий файл, и ставить строчку из файла в этот Label. Но проблема в том, что я не могу обратиться к этому Label из другого потока. Пробовал и App, и App(), бесполезно. На App() говорит: QBasicTimer can only be used with threads started with QThread и поток не выполняется, но и программа не падает.

Делаю:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
import sys
import os
from PyQt5.QtWidgets import QApplication, QWidget
from PyQt5 import uic
import time
from PyQt5.QtCore import *
from PyQt5.QtGui import *
from threading import Thread
 
class App(QWidget):
    def __init__(self):
        self.start()
        self.set()
    
    def set(self):
        #...
   
    def click(self, currentForm, buttonName, var, _var):
        #...
        currentStack = self.gameWindow.stackNameLabel.text()
        myGameThread = Thread(target=self.game, args=(currentStack,))
        myGameThread.start()
        #...
  
    def game(self, stack):
        global clickedNext, clickedBack, clickedAcceptAnswer, clickedRoll
        clickedNext = False
        clickedBack = False
        clickedAcceptAnswer = False
        clickedRoll = False
 
        for j in os.listdir('user_data/' + stack):
            myCard = open('user_data/' + stack + '/' + j)
 
            App.gameWindow.cardNameLabel.setText(myCard.readline()[:-1]) #Здесь ошибка, что в типе App не найден атрибут gameWindow. Пробовал App(), тогда в консоль пишется QBasicTimer can only be used with threads started with QThread и поток не выполняется, но и программа не падает.
            while not(clickedNext and clickedBack and clickedAcceptAnswer and clickedRoll):
                pass
            else:
                clickedNext = False
                clickedBack = False
                clickedAcceptAnswer = False
                clickedRoll = False
                continue
Добавлено через 8 минут
В функции set(), если что, естественно задается
self.gameWindow, импортируется *.ui файл, ибо я открываю окно.

Добавлено через 2 часа 39 минут
pyqtSignal и emit тоже не работают.
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.12.2020, 15:04
Ответы с готовыми решениями:

Как обратиться к объекту на форме из другого класса
Здравствуйте! Очень интересует вопрос... У меня есть нестатическая форма (обычная созданная...

Как обратиться к объекту на форме JFrame из другого класса
Здравствуйте! Может быть вопрос, сто раз задавался, но я конкретного решения не нашел. Главная...

Как обратиться к объекту из другого метода
Есть две кнопки. Одна для создания контейнера, а другая для удаления этого контейнера. Когда создаю...

Не получается с вторичного потока обратиться напрямую к объекту из главного потока
Добрый день. Проблема заключается в том что не могу в WPF с вторичного потока обратится на прямую к...

Как обратиться к объекту формы из другого юнита?
В одном юните находится процедура procedure integral2 ; var x,y:integer ; h:real; begin ...

2
Модератор
Эксперт Python
2689 / 1595 / 513
Регистрация: 21.02.2017
Сообщений: 4,209
Записей в блоге: 1
09.12.2020, 07:54 2
TheHackerMan, код не читабельный, не понятно чего ты хочешь добиться.
0
1539 / 720 / 313
Регистрация: 02.05.2020
Сообщений: 1,604
10.12.2020, 14:00 3
Цитата Сообщение от TheHackerMan Посмотреть сообщение
pyqtSignal и emit тоже не работают.
вы не умеете их готовить (c)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import sys
import time
from PyQt5.QtWidgets import *
from PyQt5.QtCore    import *
from PyQt5.QtGui     import *
 
class Form(QWidget):
  def __init__(self):
    super().__init__(None)
    self.label = QLabel()
    self.setLayout(QHBoxLayout())
    self.layout().addWidget(self.label)
  def changeText(self, text):
    self.label.setText(text)
 
class Thread(QThread):
  message = pyqtSignal(str)
  def run(self):
    time.sleep(3)#эмулируем задержку чтения переменной и работы с файлами
    text = "text"#нашли какуюто строку
    self.message.emit(text);#передаём её
 
app = QApplication(sys.argv)
form = Form()
form.show()
 
thread = Thread()
thread.message.connect(form.changeText)
thread.start()
 
sys.exit(app.exec_())
0
10.12.2020, 14:00
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.12.2020, 14:00
Помогаю со студенческими работами здесь

Как обратиться к объекту другого окна в wpf
Есть окно MainWindow, в котором весь код. Второе окно LogWindow с единственным контролом TextBox, в...

Как обратиться к объекту на другой форме?
В приложении созданы 2 формы. form1 и form2. причём form1 и form2 - это не имена объектов, а имена...

Как получить доступ к переменной и форме из другого статического класса и другого потока
Имеется форма WPF: namespace WpfApplication1 { public partial class MainWindow :...

Как обратиться к элементу управления из другого потока
Всем доброго времени суток! Делаю клиент серверное приложение, где несколько пользователей могут...

Как обратиться к chart и toolStripProgressBar1 из другого потока?
как обратиться к chart и toolStripProgressBar1 из другого потока? chart1.Series.Points.AddY(x);...

Как обратиться к элементу Form1 из другого класса и потока?
class PTools:Form1 { label1.Invoke(new Action(() => label1.Text = "Текст")); } ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru