pyTEMlib 0.2020.11.1__py3-none-any.whl → 0.2024.9.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of pyTEMlib might be problematic. Click here for more details.

Files changed (60) hide show
  1. pyTEMlib/__init__.py +11 -11
  2. pyTEMlib/animation.py +631 -0
  3. pyTEMlib/atom_tools.py +240 -245
  4. pyTEMlib/config_dir.py +57 -33
  5. pyTEMlib/core_loss_widget.py +658 -0
  6. pyTEMlib/crystal_tools.py +1255 -0
  7. pyTEMlib/diffraction_plot.py +756 -0
  8. pyTEMlib/dynamic_scattering.py +293 -0
  9. pyTEMlib/eds_tools.py +609 -0
  10. pyTEMlib/eels_dialog.py +749 -491
  11. pyTEMlib/{interactive_eels.py → eels_dialog_utilities.py} +1199 -1177
  12. pyTEMlib/eels_tools.py +2031 -1698
  13. pyTEMlib/file_tools.py +1276 -560
  14. pyTEMlib/file_tools_qt.py +193 -0
  15. pyTEMlib/graph_tools.py +1166 -450
  16. pyTEMlib/graph_viz.py +449 -0
  17. pyTEMlib/image_dialog.py +158 -0
  18. pyTEMlib/image_dlg.py +146 -232
  19. pyTEMlib/image_tools.py +1399 -1028
  20. pyTEMlib/info_widget.py +933 -0
  21. pyTEMlib/interactive_image.py +1 -226
  22. pyTEMlib/kinematic_scattering.py +1196 -0
  23. pyTEMlib/low_loss_widget.py +176 -0
  24. pyTEMlib/microscope.py +61 -81
  25. pyTEMlib/peak_dialog.py +1047 -410
  26. pyTEMlib/peak_dlg.py +286 -242
  27. pyTEMlib/probe_tools.py +653 -207
  28. pyTEMlib/sidpy_tools.py +153 -136
  29. pyTEMlib/simulation_tools.py +104 -87
  30. pyTEMlib/version.py +6 -3
  31. pyTEMlib/xrpa_x_sections.py +20972 -0
  32. {pyTEMlib-0.2020.11.1.dist-info → pyTEMlib-0.2024.9.0.dist-info}/LICENSE +21 -21
  33. pyTEMlib-0.2024.9.0.dist-info/METADATA +92 -0
  34. pyTEMlib-0.2024.9.0.dist-info/RECORD +37 -0
  35. {pyTEMlib-0.2020.11.1.dist-info → pyTEMlib-0.2024.9.0.dist-info}/WHEEL +5 -5
  36. {pyTEMlib-0.2020.11.1.dist-info → pyTEMlib-0.2024.9.0.dist-info}/entry_points.txt +0 -1
  37. pyTEMlib/KinsCat.py +0 -2758
  38. pyTEMlib/__version__.py +0 -2
  39. pyTEMlib/data/TEMlibrc +0 -68
  40. pyTEMlib/data/edges_db.csv +0 -189
  41. pyTEMlib/data/edges_db.pkl +0 -0
  42. pyTEMlib/data/fparam.txt +0 -103
  43. pyTEMlib/data/microscopes.csv +0 -7
  44. pyTEMlib/data/microscopes.xml +0 -167
  45. pyTEMlib/data/path.txt +0 -1
  46. pyTEMlib/defaults_parser.py +0 -90
  47. pyTEMlib/dm3_reader.py +0 -613
  48. pyTEMlib/edges_db.py +0 -76
  49. pyTEMlib/eels_dlg.py +0 -224
  50. pyTEMlib/hdf_utils.py +0 -483
  51. pyTEMlib/image_tools1.py +0 -2194
  52. pyTEMlib/info_dialog.py +0 -237
  53. pyTEMlib/info_dlg.py +0 -202
  54. pyTEMlib/nion_reader.py +0 -297
  55. pyTEMlib/nsi_reader.py +0 -170
  56. pyTEMlib/structure_tools.py +0 -316
  57. pyTEMlib/test.py +0 -2072
  58. pyTEMlib-0.2020.11.1.dist-info/METADATA +0 -20
  59. pyTEMlib-0.2020.11.1.dist-info/RECORD +0 -45
  60. {pyTEMlib-0.2020.11.1.dist-info → pyTEMlib-0.2024.9.0.dist-info}/top_level.txt +0 -0
pyTEMlib/info_dialog.py DELETED
@@ -1,237 +0,0 @@
1
- """
2
- InfoDialog for interactive_eels
3
- """
4
-
5
- from PyQt5 import QtCore, QtWidgets
6
-
7
- import numpy as np
8
- import sidpy
9
- from pyTEMlib import info_dlg
10
- import pyTEMlib.eels_tools as eels
11
- import pyTEMlib.interactive_eels as ieels
12
- from pyTEMlib.microscope import microscope
13
-
14
- from pyTEMlib import file_tools as ft
15
- _version = 000
16
-
17
-
18
- class InfoDialog(QtWidgets.QDialog):
19
- """
20
- EELS Input Dialog for Chemical Analysis
21
-
22
- Opens a PyQt5 GUi Dialog that allows to set the experimental parameter necessary for a Quantification.
23
-
24
-
25
- The dialog operates on a sidpy dataset which
26
- -reads and sets the spectral dimension with ``offset`` and ``dispersion``.
27
- -reads and writes an 'experiment' dictionary in the metadata of the sidpy Dataset.
28
-
29
- access dimension with dataset.energy_scale
30
- access experimental parameters with ``dataset.metadata['experiment']``
31
-
32
- experimental parameters are:
33
- -acquisition time
34
- -convergence angle
35
- -collection angle
36
- -acceleration voltage
37
-
38
- -flux of electrons
39
- """
40
-
41
- def __init__(self, dataset=None):
42
- super().__init__(None, QtCore.Qt.WindowStaysOnTopHint)
43
- # Create an instance of the GUI
44
- self.ui = info_dlg.UiDialog(self)
45
- self.set_action()
46
-
47
- self.dataset = dataset
48
- self.spec_dim = []
49
- self.energy_scale = np.array([])
50
- self.experiment = {}
51
- self.energy_dlg = None
52
- self.axis = None
53
- self.show()
54
-
55
- if dataset is None:
56
- # make a dummy dataset for testing
57
- dataset = ft.make_dummy_dataset(sidpy.DataTypes.SPECTRUM)
58
- if not isinstance(dataset, sidpy.Dataset):
59
- raise TypeError('dataset has to be a sidpy dataset')
60
-
61
- self.set_dataset(dataset)
62
-
63
- self.dataset.plot()
64
- if hasattr(self.dataset.view, 'axes'):
65
- self.axis = self.dataset.view.axes[-1]
66
- elif hasattr(self.dataset.view, 'axis'):
67
- self.axis = self.dataset.view.axis
68
- self.figure = self.axis.figure
69
- self.plot()
70
- self.update()
71
-
72
- def set_dataset(self, dataset):
73
- self.dataset = dataset
74
- if not hasattr(self.dataset, '_axes'):
75
- self.dataset._axes = self.dataset.axes
76
- if not hasattr(self.dataset, 'meta_data'):
77
- self.dataset.meta_data = {}
78
-
79
- self.spec_dim = ft.get_dimensions_by_type(sidpy.DimensionTypes.SPECTRAL, dataset)
80
- if len(self.spec_dim) != 1:
81
- raise TypeError('We need exactly one SPECTRAL dimension')
82
- self.spec_dim = self.spec_dim[0]
83
- self.energy_scale = self.spec_dim[1].values.copy()
84
-
85
- minimum_info = {'offset': self.energy_scale[0],
86
- 'dispersion': self.energy_scale[1] - self.energy_scale[0],
87
- 'exposure_time': 0.0,
88
- 'convergence_angle': 0.0, 'collection_angle': 0.0,
89
- 'acceleration_voltage': 100.0, 'binning': 1, 'conversion': 1.0,
90
- 'flux': 1.0, 'current': 1.0}
91
-
92
- if 'DM' in self.dataset.original_metadata:
93
- if 'experiment' not in self.dataset.metadata:
94
- self.dataset.metadata['experiment'] = {}
95
-
96
- self.dataset.metadata['experiment'].update(eels.read_dm3_eels_info(self.dataset.original_metadata))
97
-
98
- self.experiment = self.dataset.metadata['experiment']
99
-
100
- for key, item in minimum_info.items():
101
- if key not in self.experiment:
102
- self.experiment[key] = item
103
-
104
- def set_dimension(self):
105
- self.spec_dim = ft.get_dimensions_by_type(sidpy.DimensionTypes.SPECTRAL, self.dataset)
106
- self.spec_dim = self.spec_dim[0]
107
- old_energy_scale = self.spec_dim[1]
108
- self.dataset.set_dimension(self.spec_dim[0], sidpy.Dimension(np.array(self.energy_scale),
109
- name=old_energy_scale.name,
110
- dimension_type=sidpy.DimensionTypes.SPECTRAL,
111
- units='eV',
112
- quantity='energy loss'))
113
-
114
- def update(self):
115
-
116
- self.ui.offsetEdit.setText(f"{self.experiment['offset']:.3f}")
117
- self.ui.dispersionEdit.setText(f"{self.experiment['dispersion']:.3f}")
118
- self.ui.timeEdit.setText(f"{self.experiment['exposure_time']:.6f}")
119
-
120
- self.ui.convEdit.setText(f"{self.experiment['convergence_angle']:.2f}")
121
- self.ui.collEdit.setText(f"{self.experiment['collection_angle']:.2f}")
122
- self.ui.E0Edit.setText(f"{self.experiment['acceleration_voltage']/1000.:.2f}")
123
-
124
- self.ui.binningEdit.setText(f"{self.experiment['binning']}")
125
- self.ui.conversionEdit.setText(f"{self.experiment['conversion']:.2f}")
126
- self.ui.fluxEdit.setText(f"{self.experiment['flux']:.2f}")
127
- self.ui.VOAEdit.setText(f"{self.experiment['current']:.2f}")
128
-
129
- def on_enter(self):
130
- sender = self.sender()
131
-
132
- if sender == self.ui.offsetEdit:
133
- value = float(str(sender.displayText()).strip())
134
- self.experiment['offset'] = value
135
- sender.setText(f"{value:.2f}")
136
- self.energy_scale = self.energy_scale - self.energy_scale[0] + value
137
- self.set_dimension()
138
- self.plot()
139
- elif sender == self.ui.dispersionEdit:
140
- value = float(str(sender.displayText()).strip())
141
- self.experiment['dispersion'] = value
142
- self.energy_scale = np.arange(len(self.energy_scale)) * value + self.energy_scale[0]
143
- self.set_dimension()
144
- self.plot()
145
- sender.setText(f"{value:.3f}")
146
- elif sender == self.ui.timeEdit:
147
- value = float(str(sender.displayText()).strip())
148
- self.experiment['exposure_time'] = value
149
- sender.setText(f"{value:.2f}")
150
- elif sender == self.ui.convEdit:
151
- value = float(str(sender.displayText()).strip())
152
- self.experiment['convergence_angle'] = value
153
- sender.setText(f"{value:.2f}")
154
- elif sender == self.ui.collEdit:
155
- value = float(str(sender.displayText()).strip())
156
- self.experiment['collection_angle'] = value
157
- sender.setText(f"{value:.2f}")
158
- elif sender == self.ui.E0Edit:
159
- value = float(str(sender.displayText()).strip())
160
- self.experiment['acceleration_voltage'] = value*1000.0
161
- sender.setText(f"{value:.2f}")
162
- elif sender == self.ui.E0Edit:
163
- value = float(str(sender.displayText()).strip())
164
- self.experiment['acceleration_voltage'] = value
165
- sender.setText(f"{value:.2f}")
166
- elif sender == self.ui.binXEdit or sender == self.ui.binYEdit:
167
- if self.dataset.data_type == sidpy.DataTypes.SPECTRAL_IMAGE:
168
- bin_x = int(self.ui.binXEdit.displayText())
169
- bin_y = int(self.ui.binYEdit.displayText())
170
- self.dataset.view.set_bin([bin_x, bin_y])
171
- self.ui.binXEdit.setText(str(self.dataset.view.bin_x))
172
- self.ui.binYEdit.setText(str(self.dataset.view.bin_y))
173
- else:
174
- print('not supported yet')
175
-
176
- def plot(self):
177
- if self.dataset.data_type == sidpy.DataTypes.SPECTRAL_IMAGE:
178
- spectrum = self.dataset.view.get_spectrum()
179
- self.axis = self.dataset.view.axes[1]
180
- else:
181
- spectrum = np.array(self.dataset)
182
- self.axis = self.dataset.view.axis
183
-
184
- x_limit = self.axis.get_xlim()
185
- y_limit = self.axis.get_ylim()
186
- self.axis.clear()
187
-
188
- self.axis.plot(self.energy_scale, spectrum, label='spectrum')
189
- self.axis.set_xlim(x_limit)
190
- self.axis.set_ylim(y_limit)
191
- self.figure.canvas.draw_idle()
192
-
193
- def on_list_enter(self):
194
- sender = self.sender()
195
- if sender == self.ui.TEMList:
196
- microscope.set_microscope(self.ui.TEMList.currentText())
197
- self.experiment['microscope'] = microscope.name
198
- self.experiment['convergence_angle'] = microscope.alpha
199
- self.experiment['collection_angle'] = microscope.beta
200
- self.experiment['acceleration_voltage'] = microscope.E0
201
- self.update()
202
-
203
- def set_energy_scale(self):
204
- self.energy_dlg = ieels.EnergySelector(self.dataset)
205
-
206
- self.energy_dlg.signal_selected[bool].connect(self.set_energy)
207
- self.energy_dlg.show()
208
-
209
- def set_energy(self, k):
210
- self.spec_dim = ft.get_dimensions_by_type(sidpy.DimensionTypes.SPECTRAL, self.dataset)
211
- self.spec_dim = self.spec_dim[0]
212
-
213
- self.energy_scale = self.spec_dim[1]
214
- self.experiment['offset'] = self.energy_scale[0]
215
- self.experiment['dispersion'] = self.energy_scale[1] - self.energy_scale[0]
216
- self.update()
217
-
218
- def on_check(self):
219
- pass
220
-
221
- def set_action(self):
222
- self.ui.offsetEdit.editingFinished.connect(self.on_enter)
223
- self.ui.dispersionEdit.editingFinished.connect(self.on_enter)
224
- self.ui.timeEdit.editingFinished.connect(self.on_enter)
225
-
226
- self.ui.TEMList.activated[str].connect(self.on_list_enter)
227
-
228
- self.ui.convEdit.editingFinished.connect(self.on_enter)
229
- self.ui.collEdit.editingFinished.connect(self.on_enter)
230
- self.ui.E0Edit.editingFinished.connect(self.on_enter)
231
- self.ui.binningEdit.editingFinished.connect(self.on_enter)
232
- self.ui.conversionEdit.editingFinished.connect(self.on_enter)
233
- self.ui.fluxEdit.editingFinished.connect(self.on_enter)
234
- self.ui.VOAEdit.editingFinished.connect(self.on_enter)
235
- self.ui.energy_button.clicked.connect(self.set_energy_scale)
236
- self.ui.binXEdit.editingFinished.connect(self.on_enter)
237
- self.ui.binYEdit.editingFinished.connect(self.on_enter)
pyTEMlib/info_dlg.py DELETED
@@ -1,202 +0,0 @@
1
- # -*- coding: utf-8 -*-
2
- """
3
- InfoDialog user interface definitions
4
- """
5
-
6
- from PyQt5 import QtCore, QtGui, QtWidgets
7
- from pyTEMlib.microscope import microscope
8
-
9
-
10
- class UiDialog(object):
11
- def __init__(self, dialog):
12
- dialog.setObjectName('Spectrum Info')
13
- dialog.resize(371, 184)
14
-
15
- valid_float = QtGui.QDoubleValidator()
16
- valid_int = QtGui.QIntValidator()
17
-
18
- self.TEM = []
19
- self.TEM = microscope.get_available_microscope_names()
20
-
21
- self.layout = QtWidgets.QGridLayout()
22
- self.layout.setVerticalSpacing(2)
23
-
24
- self.separator1 = QtWidgets.QLabel(dialog)
25
- self.separator1.setAutoFillBackground(True)
26
- palette = self.separator1.palette()
27
- palette.setColor(self.separator1.backgroundRole(), QtCore.Qt.blue)
28
- palette.setColor(self.separator1.foregroundRole(), QtCore.Qt.white)
29
- self.separator1.setAlignment(QtCore.Qt.AlignCenter)
30
- self.separator1.setMaximumHeight(50)
31
-
32
- self.separator1.setPalette(palette)
33
- ######################################################################
34
- self.separator1.setText("Energy Scale")
35
-
36
- row = 0
37
- self.layout.addWidget(self.separator1, row, 0, 1, 4)
38
- ######################################################################
39
-
40
- row += 1
41
- self.offsetLabel = QtWidgets.QLabel("Offset")
42
- self.offsetEdit = QtWidgets.QLineEdit(" 1.00")
43
- self.offsetEdit.setValidator(valid_float)
44
- self.offsetUnit = QtWidgets.QLabel("eV")
45
-
46
- self.layout.addWidget(self.offsetLabel, row, 0)
47
- self.layout.addWidget(self.offsetEdit, row, 1)
48
- self.layout.addWidget(self.offsetUnit, row, 2)
49
-
50
- row += 1
51
- self.dispersionLabel = QtWidgets.QLabel("Dispersion")
52
- self.dispersionEdit = QtWidgets.QLineEdit(" 1.00")
53
- self.dispersionEdit.setValidator(valid_float)
54
- self.dispersionUnit = QtWidgets.QLabel("eV/channel")
55
-
56
- self.layout.addWidget(self.dispersionLabel, row, 0)
57
- self.layout.addWidget(self.dispersionEdit, row, 1)
58
- self.layout.addWidget(self.dispersionUnit, row, 2)
59
-
60
- row += 1
61
- self.energy_button = QtWidgets.QPushButton('Set Energy Scale', dialog)
62
- self.energy_button.setCheckable(True)
63
-
64
- self.layout.addWidget(self.energy_button, row, 1)
65
-
66
- row += 1
67
- self.timeLabel = QtWidgets.QLabel("Exp. Time")
68
- self.timeEdit = QtWidgets.QLineEdit(" 100.0")
69
- self.timeEdit.setValidator(valid_float)
70
- self.timeUnit = QtWidgets.QLabel("s")
71
-
72
- self.layout.addWidget(self.timeLabel, row, 0)
73
- self.layout.addWidget(self.timeEdit, row, 1)
74
- self.layout.addWidget(self.timeUnit, row, 2)
75
-
76
- self.separator2 = QtWidgets.QLabel(dialog)
77
- self.separator2.setAutoFillBackground(True)
78
- self.separator2.setAlignment(QtCore.Qt.AlignCenter)
79
- self.separator2.setMaximumHeight(50)
80
- self.separator2.setPalette(palette)
81
-
82
- row += 1
83
- ######################################################################
84
- self.separator2.setText("Microscope")
85
- self.layout.addWidget(self.separator2, row, 0, 1, 4)
86
- ######################################################################
87
-
88
- row += 1
89
- self.TEMList = QtWidgets.QComboBox()
90
- self.TEMList.setEditable(False)
91
- self.TEMList.addItems(self.TEM)
92
-
93
- self.layout.addWidget(self.TEMList, row, 1)
94
-
95
- row += 1
96
- self.convLabel = QtWidgets.QLabel("Conv. Angle")
97
- self.convEdit = QtWidgets.QLineEdit(" 100.0")
98
- self.convEdit.setValidator(valid_float)
99
- self.convUnit = QtWidgets.QLabel("mrad")
100
- self.layout.addWidget(self.convLabel, row, 0)
101
- self.layout.addWidget(self.convEdit, row, 1)
102
- self.layout.addWidget(self.convUnit, row, 2)
103
-
104
- row += 1
105
- self.collLabel = QtWidgets.QLabel("Coll. Angle")
106
- self.collEdit = QtWidgets.QLineEdit(" 10.0")
107
- self.collEdit.setValidator(valid_float)
108
- self.collUnit = QtWidgets.QLabel("mrad")
109
- self.layout.addWidget(self.collLabel, row, 0)
110
- self.layout.addWidget(self.collEdit, row, 1)
111
- self.layout.addWidget(self.collUnit, row, 2)
112
-
113
- row += 1
114
- self.E0Label = QtWidgets.QLabel("Acc. Voltage")
115
- self.E0Edit = QtWidgets.QLineEdit(" 100.0")
116
- self.E0Edit.setValidator(valid_float)
117
- self.E0Unit = QtWidgets.QLabel("kV")
118
- self.layout.addWidget(self.E0Label, row, 0)
119
- self.layout.addWidget(self.E0Edit, row, 1)
120
- self.layout.addWidget(self.E0Unit, row, 2)
121
-
122
- self.separator3 = QtWidgets.QLabel(dialog)
123
- self.separator3.setAutoFillBackground(True)
124
- self.separator3.setAlignment(QtCore.Qt.AlignCenter)
125
- self.separator3.setMaximumHeight(50)
126
- self.separator3.setPalette(palette)
127
-
128
- row += 1
129
- ######################################################################
130
- self.separator3.setText("Quantification")
131
- self.layout.addWidget(self.separator3, row, 0, 1, 4)
132
- ######################################################################
133
-
134
- row += 1
135
- self.binningLabel = QtWidgets.QLabel("Binning")
136
- self.binningEdit = QtWidgets.QLineEdit(" 1")
137
- self.binningEdit.setValidator(valid_int)
138
- self.layout.addWidget(self.binningLabel, row, 0)
139
- self.layout.addWidget(self.binningEdit, row, 1)
140
-
141
- row += 1
142
- self.conversionLabel = QtWidgets.QLabel("Conversion")
143
- self.conversionEdit = QtWidgets.QLineEdit(" 25.0")
144
- self.conversionEdit.setValidator(valid_float)
145
- self.conversionUnit = QtWidgets.QLabel("e<sup>-</sup>/counts")
146
- self.layout.addWidget(self.conversionLabel, row, 0)
147
- self.layout.addWidget(self.conversionEdit, row, 1)
148
- self.layout.addWidget(self.conversionUnit, row, 2)
149
- row += 1
150
- self.fluxLabel = QtWidgets.QLabel("Flux")
151
- self.fluxEdit = QtWidgets.QLineEdit(" 100.0")
152
- self.fluxEdit.setValidator(valid_float)
153
- self.fluxUnit = QtWidgets.QLabel("e<sup>-</sup>/s")
154
- self.layout.addWidget(self.fluxLabel, row, 0)
155
- self.layout.addWidget(self.fluxEdit, row, 1)
156
- self.layout.addWidget(self.fluxUnit, row, 2)
157
- row += 1
158
- self.VOALabel = QtWidgets.QLabel("Measurement")
159
- self.VOAEdit = QtWidgets.QLineEdit(" 10.0")
160
- self.VOAEdit.setValidator(valid_float)
161
- self.VOAUnit = QtWidgets.QLabel("pA")
162
- self.layout.addWidget(self.VOALabel, row, 0)
163
- self.layout.addWidget(self.VOAEdit, row, 1)
164
- self.layout.addWidget(self.VOAUnit, row, 2)
165
-
166
- self.separator4 = QtWidgets.QLabel(dialog)
167
- self.separator4.setAutoFillBackground(True)
168
- self.separator4.setAlignment(QtCore.Qt.AlignCenter)
169
- self.separator4.setMaximumHeight(50)
170
- self.separator4.setPalette(palette)
171
- ######################################################################
172
- self.separator4.setText("Spectrum Image")
173
-
174
- row += 1
175
- self.layout.addWidget(self.separator4, row, 0, 1, 4)
176
- ######################################################################
177
-
178
- self.binXLabel = QtWidgets.QLabel('Bin X:')
179
- self.binXEdit = QtWidgets.QLineEdit('1')
180
- self.binXEdit.setValidator(valid_int)
181
- self.binXUnit = QtWidgets.QLabel('pixel')
182
-
183
- row += 1
184
- self.layout.addWidget(self.binXLabel, row, 0)
185
- self.layout.addWidget(self.binXEdit, row, 1)
186
- self.layout.addWidget(self.binXUnit, row, 2)
187
-
188
- self.binYLabel = QtWidgets.QLabel('Bin Y:')
189
- self.binYEdit = QtWidgets.QLineEdit('1')
190
- self.binYEdit.setValidator(valid_int)
191
- self.binYUnit = QtWidgets.QLabel('pixel')
192
-
193
- row += 1
194
- self.layout.addWidget(self.binYLabel, row, 0)
195
- self.layout.addWidget(self.binYEdit, row, 1)
196
- self.layout.addWidget(self.binYUnit, row, 2)
197
-
198
- dialog.setLayout(self.layout)
199
-
200
- dialog.setWindowTitle("Spectrum Info")
201
-
202
- QtCore.QMetaObject.connectSlotsByName(dialog)