我正在使用matplotlib绘制图形,我想禁用窗口的最大化,最小化和关闭按钮。
可能吗?
答案 0 :(得分:1)
matplotlib窗口由正在使用的后端创建。不同的后端需要不同的解决方案。一个常见的后端是Qt后端,因此下面显示了这个后端的两个解决方案。
您可以将matplotlib图嵌入到自定义GUI中,例如使用PyQt。然后,您可以使用GUI包提供的所有选项来调整窗口。
在PyQt中,可以通过将QtCore.Qt.CustomizeWindowHint
设置为窗口标志来关闭窗口的顶部栏
QMainWindow.setWindowFlags( QtCore.Qt.CustomizeWindowHint )
左边是正常版本,右边是带有自定义WindowFlag的版本。
完整示例:
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 )
如果您不想自己创建一个完整的窗口,可以通过画布的父窗口获取窗口。然后适用与上述相同的选项。为了实现这一点,您需要确保实际使用后来想要进行更改的后端。
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()