#python
Вопрос:
Как получить a self.count
от a class MainWindow
, чтобы Class Mythread
выполнить() подсчет
board = Arduino("COM6")
Communication_start= "Communication Successfully started"
Communication_close = "Communication Close"
class MainWindow(QtWidgets.QMainWindow):
def __init__(self):
super(MainWindow, self).__init__()
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
self.ui.label.setText('目前次數')
self.ui.pushButton.setText("Start")
self.ui.pushButton_2.setText("Stop")
self.ui.lineEdit.setText("1")
self.ui.label_2.setText("打點次數")
self.ui.label_3.setText("上升持續時間")
self.ui.lineEdit_2.setText("1")
self.ui.lineEdit_3.setText("1")
self.ui.label_4.setText("下降持續時間")
self.ui.lineEdit_4.setText(Communication_start)
self.ui.toolBar.setWindowTitle("toolBar")
self.ui.pushButton.clicked.connect(self.buttonClicked)
self.ui.pushButton_2.clicked.connect(self.buttonClicked2)
self.my_thread = MyThread()
self.my_thread.my_signal_1.connect(self.set_lcdNumber_func)
def buttonClicked(self):
self.my_thread.start()
count = int(self.ui.lineEdit.text())
self.ui.lineEdit.setText(str(count))
self.count = int(self.ui.lineEdit.text())
up_duration = self.ui.lineEdit_2.text()
self.ui.lineEdit_2.setText(up_duration)
down_duration = self.ui.lineEdit_3.text()
self.ui.lineEdit_3.setText(down_duration)
def buttonClicked2(self):
self.ui.lineEdit_4.setText(Communication_close)
board.exit()
def set_lcdNumber_func(self, num):
self.ui.lcdNumber.display(num)
class MyThread(QThread):
my_signal_1 = pyqtSignal(str)
def __init__(self):
super(MyThread, self).__init__()
def run(self):
for i in range(1,int(count)):
self.my_signal_1.emit(str(i))
board.digital[8].write(1)
board.digital[13].write(1)
time.sleep(float(down_duration))
board.digital[8].write(0)
board.digital[13].write(0)
time.sleep(float(up_duration))
Комментарии:
1. В вашем коде есть синтаксические ошибки, пожалуйста, убедитесь, что вы правильно отформатировали свой вопрос.
2. Тогда, похоже, проблема здесь на самом деле не в том, «как получить переменную», а в том, «как указать объектно-ориентированную архитектуру, чтобы она делала то, что я хочу». Видите ли, чтобы вы могли «получить доступ» к чему-то изнутри
MainWindow
MyThread.run()
, как оно есть, вам нужно иметь его экземпляр. Самого класса недостаточно, если только вам не нужен статический класс (в чем я сомневаюсь).3. Пожалуйста, исправьте синтаксические ошибки в вашем вопросе, отступ имеет решающее значение в Python
4. Нет разумного способа предложить ответ, учитывая состояние вопроса. (а) у него есть проблемы с отступами, (б) он не является самодостаточным, так как есть
import
утверждения, которые необходимы, но не представлены, (в) такие элементы, какboard
,down_duration
,up_duration
inMyThread.run()
, не определены
Ответ №1:
Вы можете создать геттер/сеттеры для доступа к переменной, а затем получить к ней доступ с помощью этих методов из метода run.
PS: Ваш цикл for не имеет правильного отступа. Все циклы for должны иметь отступы, чтобы Python мог их распознать.
Ответ №2:
Обновить ответ
class MyThread(QThread):
my_signal_1 = pyqtSignal(str)
def __init__(self, window):
super(MyThread, self).__init__()
self.window = window
def run(self):
for i in range(1,int(self.window.count)):
self.my_signal_1.emit(str(i))
board.digital[8].write(1)
board.digital[13].write(1)
time.sleep(float(down_duration))
board.digital[8].write(0)
board.digital[13].write(0)
time.sleep(float(up_duration))
=================================================
class MainWindow(QtWidgets.QMainWindow):
self.my_thread = MyThread(self)