Запуск приложения PyQT на Jupyter (и Spyder ) Я обнаружил, что не могу запустить и завершить код дважды. Со второй попытки приложение закрывается, но ядро, похоже, зависло. Единственное решение, которое до сих пор работало, - это перезапустить ядро, но я sh нашел более элегантный способ go с это. Я пытался явно вызвать деструктор, но это не помогло. Предложения?
# main.py
import widget_ChamberPressure as wcp
app = wcp.QApplication([])
window = wcp.MatplotlibWidget()
window.show()
app.exec_()
# widget_ChamberPressure.py
class MatplotlibWidget(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
loadUi("qt_designer.ui",self)
self.threadpool = QThreadPool()
#self.ser = serial.Serial("COM5", baudrate=19200, bytesize=8, timeout=1, stopbits=1, parity=serial.PARITY_NONE)
self.setWindowTitle("Pressure Widget")
self.pushButton_generate_random_signal.clicked.connect(self.acquire_CG)
self.addToolBar(NavigationToolbar(self.MplWidget.canvas, self))
# set several cosmetic parameters of the plot
self.l1, = self.MplWidget.canvas.axes.semilogy(np.nan, np.nan)
self.l2, = self.MplWidget.canvas.axes.semilogy(np.nan, np.nan)
def closeEvent(self, event):
print('Closing')
#self.ser.close()
reply = QMessageBox.question(self, 'Close', "Are you Sure? \nAll your Inputs will be lost.", QMessageBox.Yes, QMessageBox.No)
if reply == QMessageBox.Yes:
sys.stdout = sys.__stdout__
super().closeEvent(event)
#event.accept()
else:
event.ignore()
def acquire_CG(self):
worker = wrk.Worker(self.update_CG_plot)
self.threadpool.start(worker)
def update_CG_plot(self, progress_callback):
t0 = time.time() # get initial time
self.l1.set_xdata(np.array([])) # reset x_data
self.l1.set_ydata(np.array([])) # reset y_data
for i in range(0,5):
s, t = self.fetch_CG()
self.MplWidget.canvas.axes.relim()
self.l1.set_xdata(np.append(self.l1.get_xdata(), t-t0)) # set x_data
self.l1.set_ydata(np.append(self.l1.get_ydata(), s)) # set y_data
self.MplWidget.canvas.axes.autoscale_view() # automatic rescaling
self.MplWidget.canvas.draw()
def fetch_CG(self, name='02RDCG2'):
#...reads data from sensor
# matplotlibwidget.py
class MplWidget(QWidget):
def __init__(self, parent = None):
QWidget.__init__(self, parent)
self.canvas = FigureCanvas(Figure(tight_layout=True))
vertical_layout = QVBoxLayout()
vertical_layout.addWidget(self.canvas)
self.canvas.axes = self.canvas.figure.add_subplot(111)
self.setLayout(vertical_layout)