Я пытаюсь создать простой пользовательский интерфейс, который будет контролировать, могу ли я печатать данные из последовательного порта и с помощью PyQT, я создал простой интерфейс с двумя кнопками - кнопкой начала записи и кнопкой остановки записи ,Программа Python продолжает сбой
Когда я нажимаю кнопку «Начать запись», данные распечатываются, но когда я нажимаю кнопку «Остановить запись», система зависает, и цикл while продолжает работать. Я думаю, это может быть потому, что программа пытается выйти из цикла while, но не может. Я очень благодарен за помощь.
Главный код:
import gui_main
import sys
import numpy
from PyQt4 import QtCore, QtGui
import PyQt4.Qwt5 as Qwt
import matplotlib
import serial
import threading
global readervar
def reader():
readervar= True
ser = serial.Serial(7) #insert COM port number from which data is being collected
ser.baudrate = 9600 #insert baud rate
while True:
if readervar:
line= ser.readline()
print (line)
print(readervar)
else if uiplot.btn2.clicked():
break
readervar=False
def shutter():
readervar=False
def main():
global uiplot
app = QtGui.QApplication(sys.argv)
win_plot = gui_main.QtGui.QMainWindow()
uiplot = gui_main.Ui_Form()
uiplot.setupUi(win_plot)
uiplot.btn1.clicked.connect(reader)
uiplot.btn2.clicked.connect(shutter)
# DISPLAY WINDOWS
win_plot.show()
code = app.exec_()
sys.exit(code)
if __name__ == "__main__":
main()
GUI код:
# -*- coding: utf-8 -*-
# Form implementation generated from reading ui file '.\Form.ui'
#
# Created: Fri Mar 20 15:17:05 2015
# by: PyQt4 UI code generator 4.11.3
#
# WARNING! All changes made in this file will be lost!
from PyQt4 import QtCore, QtGui
try:
_fromUtf8 = QtCore.QString.fromUtf8
except AttributeError:
def _fromUtf8(s):
return s
try:
_encoding = QtGui.QApplication.UnicodeUTF8
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig, _encoding)
except AttributeError:
def _translate(context, text, disambig):
return QtGui.QApplication.translate(context, text, disambig)
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName(_fromUtf8("Form"))
Form.resize(282, 192)
self.centralWidget = QtGui.QWidget(Form)
self.centralWidget.setObjectName(_fromUtf8("centralWidget"))
self.btn1 = QtGui.QPushButton(self.centralWidget)
self.btn1.setGeometry(QtCore.QRect(20, 50, 91, 23))
self.btn1.setObjectName(_fromUtf8("btn1"))
self.btn2 = QtGui.QPushButton(self.centralWidget)
self.btn2.setGeometry(QtCore.QRect(160, 50, 91, 23))
self.btn2.setObjectName(_fromUtf8("btn2"))
self.btn3 = QtGui.QPushButton(self.centralWidget)
self.btn3.setGeometry(QtCore.QRect(110, 90, 75, 23))
self.btn3.setObjectName(_fromUtf8("btn3"))
self.label = QtGui.QLabel(self.centralWidget)
self.label.setGeometry(QtCore.QRect(110, 20, 47, 13))
self.label.setObjectName(_fromUtf8("label"))
Form.setCentralWidget(self.centralWidget)
self.menuBar = QtGui.QMenuBar(Form)
self.menuBar.setGeometry(QtCore.QRect(0, 0, 282, 21))
self.menuBar.setObjectName(_fromUtf8("menuBar"))
Form.setMenuBar(self.menuBar)
self.mainToolBar = QtGui.QToolBar(Form)
self.mainToolBar.setObjectName(_fromUtf8("mainToolBar"))
Form.addToolBar(QtCore.Qt.TopToolBarArea, self.mainToolBar)
self.statusBar = QtGui.QStatusBar(Form)
self.statusBar.setObjectName(_fromUtf8("statusBar"))
Form.setStatusBar(self.statusBar)
self.retranslateUi(Form)
QtCore.QObject.connect(self.btn1, QtCore.SIGNAL(_fromUtf8("clicked()")), self.label.update)
QtCore.QObject.connect(self.btn2, QtCore.SIGNAL(_fromUtf8("clicked()")), self.label.update)
QtCore.QObject.connect(self.btn3, QtCore.SIGNAL(_fromUtf8("clicked()")), Form.close)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
Form.setWindowTitle(_translate("Form", "Form", None))
self.btn1.setText(_translate("Form", "Start Recording", None))
self.btn2.setText(_translate("Form", "Stop Recording", None))
self.btn3.setText(_translate("Form", "Exit", None))
self.label.setText(_translate("Form", "TextLabel", None))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Form = QtGui.QMainWindow()
ui = Ui_Form()
ui.setupUi(Form)
Form.show()
sys.exit(app.exec_())
Внесите свой код inline не как ссылки, также вам нужно указать, какую отладку вы сделали – EdChum
Действительно, введите код. Кроме того, проверьте ошибки и разместите _relevant_ trace. –
Я хочу добавить: Пожалуйста, разместите как можно меньше кода, в идеале, только то, что нам нужно, чтобы увидеть проблему. Пожалуйста, _do not_ просто опубликуйте весь свой проект здесь и ожидайте, что мы пройдем через 500 строк кода, чтобы найти его. –