Я хочу закрыть все свои виджеты pyqtgraph. Я следовал предложениям здесь, но они не работали. Вот мой код
def makeWindows(amp, title):
WYSIZE = 800
WXSIZE = 800
XSIZE = 200
YSIZE = 200
TSIZE = 100
STEPS = np.array([0.0, 0.25, 0.5,.75, 1.0])
first = "00007F"
blue = "007FFF"
cyan = "7FFF7F"
yellow = "FF7F00"
red = "7F0000"
win = QtGui.QMainWindow()
win.resize(WXSIZE, WYSIZE)
CLRS = [first,blue, cyan, yellow, red]
for i,item in enumerate(CLRS):
CLRS[i] = list(ord(c) for c in item.decode('hex'))
CLRS[i].append(255)
clrmp = pg.ColorMap(STEPS, np.array( CLRS))
lut = clrmp.getLookupTable()
plt = pg.PlotItem(labels={'bottom': ('samples', 'm'), 'left': ('stuff', 'm')}, title = title)
plt.setAspectLocked(False)
imv = pg.ImageView(view = plt)
win.setCentralWidget(imv)
#imv.setLevels(3,6)
imv.ui.histogram.gradient.setColorMap(clrmp)
imv.setImage(amp)
win.show()
return win, imv
def main():
app = QtGui.QApplication([])
win1, imv1 = makeWindows(amp, "amp")
if __name__ == '__main__':
if (sys.flags.interactive != 1) or not hasattr(QtCore, 'PYQT_VERSION'):
status = QtGui.QApplication.instance().exec_()
#sys.exit(status)
imv1.close()
win1.close()
app.closeAllWindows()
main()
После того, как я выполню это окно, все окна должны быть закрыты, но это не так. У меня даже изображение не закрывается.
Спасибо за вашу помощь
ОБНОВИТЬ:
Моим первоначальным намерением было создать способ, позволяющий пользователю закрывать все окна при вставке прерывания клавиатуры (ctrl-c).
Я добавил следующую функцию
def close_all():
app = QtGui.QApplication([])
app.closeAllWindows()
и добавил следующие строки ближе к концу makeWindows
sh = QtGui.QShortcut(QtGui.QKeySequence("Ctrl+C"),imv,None, close_all)
sh.setContext(QtCore.Qt.ApplicationShortcut)
Это делает так, что каждый раз, когда пользователь нажимает Ctrl+c, когда окно находится в фокусе, он закрывает все окна.