Skip to content

Commit d4db669

Browse files
authored
Merge pull request #2489 from willend/main
2 parents 64d866e + a799151 commit d4db669

1 file changed

Lines changed: 38 additions & 26 deletions

File tree

tools/Python/mcdisplay/pyqtgraph/mcdisplay.py

Lines changed: 38 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313

1414
import numpy as np
1515
from enum import Enum
16-
import qtpy
16+
from qtpy.QtCore import Qt
1717
from pyqtgraph.Qt import QtGui, QtCore, QtWidgets
1818
import pyqtgraph as pg
1919
from pyqtgraph.graphicsItems.LegendItem import LegendItem, ItemSample
@@ -224,62 +224,69 @@ def create_help_pltitm():
224224

225225
return plt
226226

227-
def create_infowindow(comp_colour_pairs):
228-
class InfoWindow(QtWidgets.QMainWindow):
229-
''' infowindow that is designed to be static '''
227+
def create_infowindow(comp_colour_pairs, parent=None, key_handler=None):
228+
class InfoWindow(QtWidgets.QDialog):
229+
''' infowindow that is designed to be static, uses QDialog '''
230230
class Ui_InfoWindow(object):
231231
''' info window widgets (auto-generated code) '''
232-
def setupUi(self, MainWindow):
233-
MainWindow.setObjectName("MainWindow")
234-
MainWindow.resize(259, 395)
235-
MainWindow.setStyleSheet("background-color: rgb(0, 0, 0);")
236-
self.centralwidget = QtWidgets.QWidget(MainWindow)
237-
self.centralwidget.setObjectName("centralwidget")
238-
self.verticalLayoutTechnicalReason = QtWidgets.QVBoxLayout(self.centralwidget)
232+
def setupUi(self, Dialog):
233+
Dialog.setObjectName("InfoWindow")
234+
Dialog.resize(259, 395)
235+
Dialog.setWindowTitle("Component list")
236+
Dialog.setStyleSheet("background-color: rgb(0, 0, 0);")
237+
self.verticalLayoutTechnicalReason = QtWidgets.QVBoxLayout(Dialog)
239238
self.verticalLayoutTechnicalReason.setObjectName("verticalLayoutTechnicalReason")
240-
self.scrollArea = QtWidgets.QScrollArea(self.centralwidget)
239+
self.scrollArea = QtWidgets.QScrollArea(Dialog)
241240
self.scrollArea.setWidgetResizable(True)
242241
self.scrollArea.setObjectName("scrollArea")
243242
self.scrollAreaWidgetContents = QtWidgets.QWidget()
244243
self.scrollAreaWidgetContents.setGeometry(QtCore.QRect(0, 0, 239, 375))
245244
self.scrollAreaWidgetContents.setObjectName("scrollAreaWidgetContents")
246245
self.vlayout = QtWidgets.QVBoxLayout(self.scrollAreaWidgetContents)
247246
self.vlayout.setObjectName("vlayout")
248-
MainWindow.setCentralWidget(self.centralwidget)
249-
247+
250248
self.scrollArea.setWidget(self.scrollAreaWidgetContents)
251249
self.verticalLayoutTechnicalReason.addWidget(self.scrollArea)
252-
250+
253251
self.labels = []
254252
try: # Prefer Qt6 style, fallback to Qt5
255253
self.spacerItem = QtWidgets.QSpacerItem(20, 448, QtWidgets.QSizePolicy.Policy.Minimum, QtWidgets.QSizePolicy.Policy.Expanding)
256254
except:
257255
self.spacerItem = QtWidgets.QSpacerItem(20, 448, QtWidgets.QSizePolicy.Minimum, QtWidgets.QSizePolicy.Expanding)
258-
256+
259257
def set_components(self, str_colour_pairs):
260258
''' colours are tri-tupples of rgb '''
261259
for pair in str_colour_pairs:
262260
s = pair[0]
263261
c = pair[1]
264-
262+
265263
lbl = QtWidgets.QLabel(self.ui.scrollAreaWidgetContents)
266264
lbl.setText(s)
267265
lbl.setStyleSheet("color: rgb(%d, %d, %d);" % c)
268266
self.ui.labels.append(lbl)
269267
self.ui.vlayout.addWidget(lbl)
270-
268+
271269
self.ui.vlayout.addItem(self.ui.spacerItem)
272-
273-
def __init__(self, parent=None):
270+
271+
def keyPressEvent(self, event):
272+
''' forward all keypresses to the main window handler so that
273+
q/p/s/space/h etc. work without needing to switch focus back '''
274+
if self._key_handler is not None:
275+
self._key_handler(event)
276+
else:
277+
super(InfoWindow, self).keyPressEvent(event)
278+
279+
def __init__(self, parent=None, key_handler=None):
274280
super(InfoWindow, self).__init__(parent)
275-
281+
self._key_handler = key_handler
282+
276283
# create ui and set info
277284
self.ui = self.Ui_InfoWindow()
278285
self.ui.setupUi(self)
279-
280-
iw = InfoWindow()
286+
287+
iw = InfoWindow(parent=parent, key_handler=key_handler)
281288
iw.set_components(comp_colour_pairs)
282-
289+
283290
return iw
284291

285292
class McDisplay2DGui(object):
@@ -371,10 +378,15 @@ def _key_handler(self, event):
371378
self._display_nextray()
372379
elif event.key() in [72, 16777264]: # h, F1
373380
if not self.iw_visible:
374-
self.iw = create_infowindow(self._get_comp_color_pairs())
381+
self.iw = create_infowindow(self._get_comp_color_pairs(), parent=self.mw, key_handler=self._key_handler)
382+
# position to the left of the main window, vertically aligned with its top
383+
mw_geo = self.mw.frameGeometry()
384+
iw_size = self.iw.sizeHint()
385+
self.iw.move(mw_geo.left() - round(1.5*iw_size.width()), mw_geo.top())
375386
self.iw.show()
387+
self.iw.raise_()
388+
self.iw.activateWindow()
376389
self.iw_visible = True
377-
self.mw.activateWindow()
378390
else:
379391
self.iw.hide()
380392
self.iw_visible = False

0 commit comments

Comments
 (0)