如何禁用matplotlib窗口的最大化,最小化和关闭按钮?

时间:2017-06-01 09:26:24

标签: python matplotlib

我正在使用matplotlib绘制图形,我想禁用窗口的最大化,最小化和关闭按钮。

可能吗?

1 个答案:

答案 0 :(得分:1)

matplotlib窗口由正在使用的后端创建。不同的后端需要不同的解决方案。一个常见的后端是Qt后端,因此下面显示了这个后端的两个解决方案。

嵌入PyQt

您可以将matplotlib图嵌入到自定义GUI中,例如使用PyQt。然后,您可以使用GUI包提供的所有选项来调整窗口。

在PyQt中,可以通过将QtCore.Qt.CustomizeWindowHint设置为窗口标志来关闭窗口的顶部栏

QMainWindow.setWindowFlags( QtCore.Qt.CustomizeWindowHint )

左边是正常版本,右边是带有自定义WindowFlag的版本。

enter image description here enter image description here

完整示例:

import matplotlib.pyplot as plt
from PyQt4 import QtGui, QtCore
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar

class Window(QtGui.QMainWindow):
    def __init__(self, fig):
        self.qapp = QtGui.QApplication([])

        QtGui.QMainWindow.__init__(self)
        self.setWindowFlags( QtCore.Qt.CustomizeWindowHint )
        self.widget = QtGui.QWidget()
        self.setCentralWidget(self.widget)
        self.widget.setLayout(QtGui.QVBoxLayout())
        self.widget.layout().setContentsMargins(0,0,0,0)
        self.widget.layout().setSpacing(0)

        self.fig = fig
        self.canvas = FigureCanvas(self.fig)
        self.canvas.draw()

        self.nav = NavigationToolbar(self.canvas, self.widget)
        self.widget.layout().addWidget(self.nav)
        self.widget.layout().addWidget(self.canvas)

        self.show()
        exit(self.qapp.exec_()) 


# create a figure and some subplots
fig, ax = plt.subplots(figsize=(2.4,3))
ax.plot([2,3,5,1])
fig.tight_layout()

# pass the figure to the custom window
a = Window(fig)

另一个选择是隐藏最小化和最大化按钮,但不隐藏顶部栏。

QMainWindow.setWindowFlags( QtCore.Qt.WindowCloseButtonHint )

enter image description here

获取画布MainWindow

如果您不想自己创建一个完整的窗口,可以通过画布的父窗口获取窗口。然后适用与上述相同的选项。为了实现这一点,您需要确保实际使用后来想要进行更改的后端。

import matplotlib
# make sure Qt backend is used
matplotlib.use("Qt4Agg")
from PyQt4 import QtCore  
import matplotlib.pyplot as plt

# create a figure and some subplots
fig, ax = plt.subplots(figsize=(2.4,3))
ax.plot([2,3,5,1])
fig.tight_layout()


plt.gcf().canvas.parent().setWindowFlags( QtCore.Qt.CustomizeWindowHint )
plt.show()