【问题标题】:How to close windows in pyqtgraph如何在pyqtgraph中关闭窗口
【发布时间】:2014-11-18 02:23:01
【问题描述】:

我想关闭我所有的 pyqtgraph 小部件。我遵循了here 的建议,但没有奏效。这是我的代码

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 时,它都会关闭所有窗口

【问题讨论】:

    标签: python pyqtgraph


    【解决方案1】:

    您对QApplication.exec_() 的调用不会返回——它会阻塞直到应用程序退出(在这种情况下,应用程序在您关闭窗口时退出)。因此,在您关闭窗口之前,不会调用将关闭窗口的行。

    【讨论】:

    • 有没有办法中断QApplication.exec?我是否需要事先启动一个后台线程,以便在我准备好结束时发送 QApplication.quit()?
    • Qt 是一个基于事件的框架。您需要用户输入或计时器来在应用程序运行时触发回调。也许你应该解释更多你想要完成的事情。
    • 我想让键盘中断关闭所有图表。是否有一些我可以查看的文档或参考资料可以显示如何关闭它?
    • 如果图形窗口处于焦点位置,则它们将负责捕获键,您只需创建一个全局快捷方式:sh = QtGui.QShortcut(QtGui.QKeySequence("Ctrl+C"), window); sh.setContext(QtCore.Qt.ApplicationShortcut)。如果控制台处于焦点位置,则可能很难捕捉到键盘中断。
    猜你喜欢
    • 2014-06-20
    • 2019-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-25
    • 2023-01-24
    • 1970-01-01
    相关资源
    最近更新 更多