我有一个PyQt窗口,需要同时拥有绘图和导航工具栏。然而,我似乎无法让这两个对象相互配合;也就是说,工具栏在绘图上方,水平长度相同,适当缩放,而且不会重叠。以下是我的最小工作示例。非常感谢您的查看!
import sys, os
from pyface.qt import QtGui, QtCore
os.environ['ETS_TOOLKIT'] = 'qt4'
from matplotlib.backends.backend_qt4agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.backends.backend_qt4agg import NavigationToolbar2QT as NavigationToolbar
from matplotlib.figure import Figure
import matplotlib.pyplot as plt
import random
class App(QtGui.QMainWindow):
def __init__(self):
super(App, self).__init__()
self.left = 10
self.top = 10
self.title = 'Minimum, working example'
self.width = 640
self.height = 400
self.initUI()
def initUI(self):
self.setWindowTitle(self.title)
self.setGeometry(self.left, self.top, self.width, self.height)
m = PlotCanvas(self, width=5, height=4)
m.move(0,0)
self.show()
class PlotCanvas(FigureCanvas):
def __init__(self, parent=None, width=5, height=4, dpi=100):
fig = Figure(figsize=(width, height), dpi=dpi)
self.axes = fig.add_subplot(111)
FigureCanvas.__init__(self, fig)
self.setParent(parent)
FigureCanvas.updateGeometry(self)
##########################
#trouble seems to be here:
fig.set_tight_layout(True)
self.canvas = FigureCanvas(fig)
self.toolbar = NavigationToolbar(self.canvas, self)
##########################
self.plot()
def plot(self):
data = [random.random() for i in range(25)]
ax = self.figure.add_subplot(111)
ax.plot(data, 'r-')
ax.set_title("Is this getting overlapped by the toolbar?")
self.draw()
if __name__ == '__main__':
app = QtGui.QApplication(sys.argv)
ex = App()
sys.exit(app.exec_())