- Notifications
You must be signed in to change notification settings - Fork 19
Expand file tree
/
Copy pathaddingSaveButton.py
More file actions
Latest commit
144 lines (108 loc) · 4.58 KB
/
Copy pathaddingSaveButton.py
File metadata and controls
144 lines (108 loc) · 4.58 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
importsys
importrandom
importmatplotlib
matplotlib.use("Qt5Agg")
fromPyQt5importQtCore
fromPyQt5.QtWidgetsimportQApplication, QMainWindow, QMenu, QVBoxLayout, QSizePolicy, QMessageBox, QWidget, QPushButton
fromnumpyimportarange, sin, pi
frommatplotlib.backends.backend_qt5aggimportFigureCanvasQTAggasFigureCanvas
frommatplotlib.backends.backend_qt5aggimportNavigationToolbar2QTasNavigationToolbar
frommatplotlib.figureimportFigure
# customize navigation toolbar
classNavToolbar(NavigationToolbar):
toolitems= [('Save', 'Save the figure', 'filesave', 'save_figure')]
classMyMplCanvas(FigureCanvas):
"""Ultimately, this is a QWidget (as well as a FigureCanvasAgg, etc.)."""
def__init__(self, parent=None, width=5, height=4, dpi=100, title='title'):
self.title=title
fig=Figure(figsize=(width, height), dpi=dpi)
self.axes=fig.add_subplot(111)
fig.suptitle(title)
# We want the axes cleared every time plot() is called
self.axes.hold(False)
self.compute_initial_figure()
FigureCanvas.__init__(self, fig)
self.setParent(parent)
FigureCanvas.setSizePolicy(self,
QSizePolicy.Expanding,
QSizePolicy.Expanding)
FigureCanvas.updateGeometry(self)
defcompute_initial_figure(self):
pass
classMyStaticMplCanvas(MyMplCanvas):
"""Simple canvas with a sine plot."""
defcompute_initial_figure(self):
t=arange(0.0, 3.0, 0.01)
s=sin(2*pi*t)
self.axes.plot(t, s)
self.axes.set_ylabel('label1')
self.axes.set_xlabel('label')
self.axes.grid(True)
#self.axes.set_ylim(0, 0.5)
classMyDynamicMplCanvas(MyMplCanvas):
"""A canvas that updates itself every second with a new plot."""
def__init__(self, *args, **kwargs):
MyMplCanvas.__init__(self, *args, **kwargs)
timer=QtCore.QTimer(self)
timer.timeout.connect(self.update_figure)
timer.start(1000)
defcompute_initial_figure(self):
self.axes.plot([0, 1, 2, 3], [1, 2, 0, 4], 'r')
self.axes.set_ylabel('label1')
self.axes.set_xlabel('label')
self.axes.grid(True)
defupdate_figure(self):
# Build a list of 4 random integers between 0 and 10 (both inclusive)
l= [random.randint(0, 10) foriinrange(4)]
self.axes.plot([0, 1, 2, 3], l, 'r')
self.axes.set_ylabel('label y din plot')
self.axes.set_xlabel('label x din plot')
self.axes.grid(True)
self.draw()
classApplicationWindow(QMainWindow):
def__init__(self):
QMainWindow.__init__(self)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.setWindowTitle("application main window")
self.file_menu=QMenu('&File', self)
self.file_menu.addAction('&Quit', self.fileQuit,
QtCore.Qt.CTRL+QtCore.Qt.Key_Q)
self.menuBar().addMenu(self.file_menu)
self.help_menu=QMenu('&Help', self)
self.menuBar().addSeparator()
self.menuBar().addMenu(self.help_menu)
self.help_menu.addAction('&About', self.about)
self.main_widget=QWidget(self)
l=QVBoxLayout(self.main_widget)
sc=MyStaticMplCanvas(self.main_widget, width=5, height=4, dpi=100, title='Title 1')
dc=MyDynamicMplCanvas(self.main_widget, width=5, height=4, dpi=100, title='Title 2')
scntb=NavigationToolbar(sc, self.main_widget) # full toolbar
dcntb=NavToolbar(dc, self.main_widget) # only save button
l.addWidget(sc)
l.addWidget(scntb)
l.addWidget(dc)
l.addWidget(dcntb)
self.main_widget.setFocus()
self.setCentralWidget(self.main_widget)
self.statusBar().showMessage("All hail matplotlib!", 2000)
deffileQuit(self):
self.close()
defcloseEvent(self, ce):
self.fileQuit()
defabout(self):
QMessageBox.about(self, "About",
"""embedding_in_qt5.py example
Copyright 2015 BoxControL
This program is a simple example of a Qt5 application embedding matplotlib
canvases. It is base on example from matplolib documentation, and initially was
developed from Florent Rougon and Darren Dale.
http://matplotlib.org/examples/user_interfaces/embedding_in_qt4.html
It may be used and modified with no restriction; raw copies as well as
modified versions may be distributed without limitation.""")
if__name__=='__main__':
app=QApplication(sys.argv)
aw=ApplicationWindow()
aw.setWindowTitle("PyQt5 Matplot Example")
aw.show()
#sys.exit(qApp.exec_())
app.exec_()