Работаю с PyQt5 на Python.
Есть классы MyWidget(QMainWindow) и ThreadClassCheck(QtCore.QThread).
В MyWidget открывается интерфейс с 2 полями ввода и 1 кнопкой. После нажатия на кнопку из первого (верхнего) поля ввода это слово переносится во второе поле ввода (при этом в первом это слово также остается).
Как можно в классе ThreadClassCheck(QtCore.QThread) обратиться к значению этих двух полей из класса MyWidget?
Дизайн t.ui:
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>491</width>
<height>276</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralwidget">
<widget class="QPushButton" name="pushButton">
<property name="geometry">
<rect>
<x>210</x>
<y>190</y>
<width>93</width>
<height>31</height>
</rect>
</property>
<property name="text">
<string>кнопка</string>
</property>
</widget>
<widget class="QLineEdit" name="lineEditInput">
<property name="geometry">
<rect>
<x>130</x>
<y>40</y>
<width>321</width>
<height>31</height>
</rect>
</property>
</widget>
<widget class="QLabel" name="label">
<property name="geometry">
<rect>
<x>50</x>
<y>40</y>
<width>51</width>
<height>31</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 12pt "MS Shell Dlg 2";</string>
</property>
<property name="text">
<string>Ввод</string>
</property>
</widget>
<widget class="QLabel" name="label_2">
<property name="geometry">
<rect>
<x>50</x>
<y>120</y>
<width>71</width>
<height>31</height>
</rect>
</property>
<property name="styleSheet">
<string notr="true">font: 12pt "MS Shell Dlg 2";</string>
</property>
<property name="text">
<string>Вывод</string>
</property>
</widget>
<widget class="QLineEdit" name="lineEdit_2Output">
<property name="geometry">
<rect>
<x>130</x>
<y>120</y>
<width>321</width>
<height>31</height>
</rect>
</property>
</widget>
</widget>
<widget class="QMenuBar" name="menubar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>491</width>
<height>26</height>
</rect>
</property>
</widget>
<widget class="QStatusBar" name="statusbar"/>
</widget>
<resources/>
<connections/>
</ui>
Код:
from PyQt5.QtWidgets import QApplication, QMainWindow
from PyQt5 import QtCore
from PyQt5 import uic
import sys
import time
class ThreadClassCheck(QtCore.QThread):
signal = QtCore.pyqtSignal(str)
def __init__(self, checkword, parent=None):
super(ThreadClassCheck, self).__init__(parent)
self.is_going = True
self.checkword = checkword
def display(self):
print('ниже выведем первое поле')
print(self.lineEditInput.text())
def run(self):
while True:
# как здесь получить переменную значение из двух полей ввода?
# self.text1 = self.lineEditInput.text()
# self.text2 = self.lineEdit_2Output.text()
# в интерфейсе, но не в классе ThreadClass
ex = MyWidget() # экземпляр интерфейса
ThreadClassCheck.display(ex) # такой вызов тоже не работает, пустая строка
time.sleep(3)
sms = "check"
self.signal.emit(sms)
def stop(self):
self.is_going = False
self.terminate()
class MyWidget(QMainWindow):
def __init__(self):
super().__init__()
uic.loadUi('t.ui', self)
self.pushButton.clicked.connect(self.btn)
self.text2 = self.lineEdit_2Output.text()
self.text1 = self.lineEditInput.text()
def btn(self):
print('кнопка нажата, данные из первой строки:', self.text1)
print('кнопка нажата, данные из второй строки:', self.text2)
self.lineEdit_2Output.setText(self.text1) # из первого поля ввода переносим во второй
def except_hook(cls, exception, traceback):
sys.__excepthook__(cls, exception, traceback)
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = MyWidget()
ex.show()
sys.excepthook = except_hook
sys.exit(app.exec_())
Попробовал через экземпляр, но почему-то выводит пустую строку