1

すべての 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 を押すたびに、すべてのウィンドウが閉じます。

4

1 に答える 1

3

への呼び出しQApplication.exec_()は返されません。アプリケーションが終了するまでブロックされます (この場合、ウィンドウを閉じるとアプリケーションが終了します)。したがって、ウィンドウを閉じる行は、ウィンドウを閉じるまで呼び出されません。

于 2014-11-14T11:19:51.337 に答える