Skip to content

Commit dda7dcb

Browse files
authored
Merge pull request #1189 from silx-kit/dark
[GUI] Handle dark mode
2 parents 3fa4213 + c11d982 commit dda7dcb

58 files changed

Lines changed: 839 additions & 1459 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

.github/workflows/_WindowsExe.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ jobs:
3434
pip install $(python -c "import glob; print(' '.join(glob.glob('wheels/*cp313*.whl')))")
3535
pip install Cython
3636
pip install numpy==2.2.6
37-
pip install Pyside6==6.9.1
37+
pip install Pyside6==6.8.3
3838
pip install h5py
3939
pip install fisx
4040
pip install hdf5plugin

.github/workflows/_WindowsInstaller.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ jobs:
3737
pip install $(python -c "import glob; print(' '.join(glob.glob('wheels/*cp313*.whl')))")
3838
pip install Cython
3939
pip install numpy==2.2.6
40-
pip install Pyside6==6.9.1
40+
pip install Pyside6==6.8.3
4141
pip install h5py
4242
pip install fisx
4343
pip install hdf5plugin

src/PyMca5/PyMcaGui/PyMcaQt.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -376,6 +376,10 @@ def patch_enums(*modules):
376376
QPalette.Button = QPalette.ColorRole.Button
377377
QPalette.ButtonText = QPalette.ColorRole.ButtonText
378378
QPalette.BrightText = QPalette.ColorRole.BrightText
379+
QPalette.Highlight = QPalette.ColorRole.Highlight
380+
QPalette.Shadow = QPalette.ColorRole.Shadow
381+
QPalette.Midlight = QPalette.ColorRole.Midlight
382+
QPalette.Link = QPalette.ColorRole.Link
379383

380384
try:
381385
from silx.gui import qt as SilxQt
@@ -399,6 +403,10 @@ def patch_enums(*modules):
399403
SilxQt.QPalette.Button = SilxQt.QPalette.ColorRole.Button
400404
SilxQt.QPalette.ButtonText = SilxQt.QPalette.ColorRole.ButtonText
401405
SilxQt.QPalette.BrightText = SilxQt.QPalette.ColorRole.BrightText
406+
SilxQt.QPalette.Highlight = SilxQt.QPalette.ColorRole.Highlight
407+
SilxQt.QPalette.Shadow = SilxQt.QPalette.ColorRole.Shadow
408+
SilxQt.QPalette.Midlight = SilxQt.QPalette.ColorRole.Midlight
409+
SilxQt.QPalette.Link = SilxQt.QPalette.ColorRole.Link
402410
except Exception:
403411
_logger.info("Exception patching silx")
404412
pass

src/PyMca5/PyMcaGui/io/PyMcaFileDialogs.py

Lines changed: 13 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -119,13 +119,7 @@ def getFileList(parent=None, filetypelist=None, message=None, currentdir=None,
119119
nativeFileDialogs = native
120120
if getfilter is None:
121121
getfilter = False
122-
if getfilter:
123-
if QTVERSION < '4.5.1':
124-
native_possible = False
125-
else:
126-
native_possible = True
127-
else:
128-
native_possible = True
122+
native_possible = True
129123
filterused = None
130124
if native_possible and nativeFileDialogs:
131125
filetypes = currentfilter
@@ -164,16 +158,10 @@ def getFileList(parent=None, filetypelist=None, message=None, currentdir=None,
164158
currentfilter)
165159
filterused = qt.safe_str(filterused)
166160
else:
167-
if QTVERSION < '5.0.0':
168-
filelist = qt.QFileDialog.getSaveFileNameAndFilter(parent,
169-
message,
170-
wdir,
171-
filetypes)
172-
else:
173-
filelist = qt.QFileDialog.getSaveFileName(parent,
174-
message,
175-
wdir,
176-
filetypes)
161+
filelist = qt.QFileDialog.getSaveFileName(parent,
162+
message,
163+
wdir,
164+
filetypes)
177165
if len(filelist[0]):
178166
filterused = qt.safe_str(filelist[1])
179167
filelist=[filelist[0]]
@@ -182,33 +170,21 @@ def getFileList(parent=None, filetypelist=None, message=None, currentdir=None,
182170
else:
183171
if mode == "OPEN":
184172
if single:
185-
if QTVERSION < '5.0.0':
186-
filelist = [qt.QFileDialog.getOpenFileName(parent,
173+
filelist, filterused = qt.QFileDialog.getOpenFileName(parent,
187174
message,
188175
wdir,
189-
filetypes)]
190-
else:
191-
filelist, filterused = qt.QFileDialog.getOpenFileName(parent,
192-
message,
193-
wdir,
194-
filetypes)
195-
filelist = [filelist]
176+
filetypes)
177+
filelist = [filelist]
196178
else:
197179
filelist = qt.QFileDialog.getOpenFileNames(parent,
198180
message,
199181
wdir,
200182
filetypes)
201183
else:
202-
if QTVERSION < '5.0.0':
203-
filelist = qt.QFileDialog.getSaveFileName(parent,
184+
filelist, filterused = qt.QFileDialog.getSaveFileName(parent,
204185
message,
205186
wdir,
206187
filetypes)
207-
else:
208-
filelist, filterused = qt.QFileDialog.getSaveFileName(parent,
209-
message,
210-
wdir,
211-
filetypes)
212188
filelist = qt.safe_str(filelist)
213189
if len(filelist):
214190
filelist = [filelist]
@@ -253,10 +229,9 @@ def getFileList(parent=None, filetypelist=None, message=None, currentdir=None,
253229
fdialog.setFileMode(qt.QFileDialog.FileMode.AnyFile)
254230

255231
fdialog.setDirectory(wdir)
256-
if QTVERSION > '4.3.0':
257-
history = fdialog.history()
258-
if len(history) > 6:
259-
fdialog.setHistory(history[-6:])
232+
history = fdialog.history()
233+
if len(history) > 6:
234+
fdialog.setHistory(history[-6:])
260235
ret = fdialog.exec()
261236
if ret != qt.QDialog.Accepted:
262237
fdialog.close()
@@ -269,10 +244,7 @@ def getFileList(parent=None, filetypelist=None, message=None, currentdir=None,
269244
filelist = fdialog.selectedFiles()
270245
if single:
271246
filelist = [filelist[0]]
272-
if QTVERSION < "5.0.0":
273-
filterused = qt.safe_str(fdialog.selectedFilter())
274-
else:
275-
filterused = qt.safe_str(fdialog.selectedNameFilter())
247+
filterused = qt.safe_str(fdialog.selectedNameFilter())
276248
if mode != "OPEN":
277249
if "." in filterused:
278250
extension = filterused.replace(")", "")

src/PyMca5/PyMcaGui/io/QSpecFileWidget.py

Lines changed: 46 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -41,17 +41,14 @@
4141

4242
QTVERSION = qt.qVersion()
4343

44-
if QTVERSION > '4.2.0':
45-
class MyQTreeWidgetItem(qt.QTreeWidgetItem):
46-
def __lt__(self, other):
47-
c = self.treeWidget().sortColumn()
48-
if c == 0:
49-
return False
50-
if c != 2:
51-
return (float(self.text(c)) < float(other.text(c)))
52-
return (self.text(c) < other.text(c))
53-
else:
54-
MyQTreeWidgetItem = qt.QTreeWidgetItem
44+
class MyQTreeWidgetItem(qt.QTreeWidgetItem):
45+
def __lt__(self, other):
46+
c = self.treeWidget().sortColumn()
47+
if c == 0:
48+
return False
49+
if c != 2:
50+
return (float(self.text(c)) < float(other.text(c)))
51+
return (self.text(c) < other.text(c))
5552

5653
#class QSpecFileWidget(qt.QWidget):
5754
class QSpecFileWidget(QSelectorWidget.QSelectorWidget):
@@ -145,36 +142,22 @@ def _build(self):
145142
#self.list.header().resizeSection(4, size)
146143

147144
self.list.header().setStretchLastSection(False)
148-
if QTVERSION > '5.0.0':
149-
self.list.header().setSectionResizeMode(0, qt.QHeaderView.Interactive)
150-
self.list.header().setSectionResizeMode(1, qt.QHeaderView.Interactive)
151-
self.list.header().setSectionResizeMode(2, qt.QHeaderView.Interactive)
152-
self.list.header().setSectionResizeMode(3, qt.QHeaderView.Interactive)
153-
self.list.header().setSectionResizeMode(4, qt.QHeaderView.Interactive)
154-
fm = self.list.header().fontMetrics()
155-
if hasattr(fm, "width"):
156-
size = fm.width("X")
157-
else:
158-
size = fm.maxWidth()
159-
self.list.header().setMinimumSectionSize(size)
160-
self.list.header().resizeSection(0, size)
161-
# self.list.header().resizeSection(1, size * 4)
162-
self.list.header().resizeSection(2, size * 25)
163-
# self.list.header().resizeSection(3, size * 7)
164-
# self.list.header().resizeSection(4, size * 8)
165-
166-
elif QTVERSION < '4.2.0':
167-
self.list.header().setResizeMode(0, qt.QHeaderView.Stretch)
168-
self.list.header().setResizeMode(1, qt.QHeaderView.Stretch)
169-
self.list.header().setResizeMode(2, qt.QHeaderView.Interactive)
170-
self.list.header().setResizeMode(3, qt.QHeaderView.Stretch)
171-
self.list.header().setResizeMode(4, qt.QHeaderView.Stretch)
145+
self.list.header().setSectionResizeMode(0, qt.QHeaderView.Interactive)
146+
self.list.header().setSectionResizeMode(1, qt.QHeaderView.Interactive)
147+
self.list.header().setSectionResizeMode(2, qt.QHeaderView.Interactive)
148+
self.list.header().setSectionResizeMode(3, qt.QHeaderView.Interactive)
149+
self.list.header().setSectionResizeMode(4, qt.QHeaderView.Interactive)
150+
fm = self.list.header().fontMetrics()
151+
if hasattr(fm, "width"):
152+
size = fm.width("X")
172153
else:
173-
self.list.header().setResizeMode(0, qt.QHeaderView.ResizeToContents)
174-
self.list.header().setResizeMode(1, qt.QHeaderView.ResizeToContents)
175-
self.list.header().setResizeMode(2, qt.QHeaderView.Interactive)
176-
self.list.header().setResizeMode(3, qt.QHeaderView.ResizeToContents)
177-
self.list.header().setResizeMode(4, qt.QHeaderView.ResizeToContents)
154+
size = fm.maxWidth()
155+
self.list.header().setMinimumSectionSize(size)
156+
self.list.header().resizeSection(0, size)
157+
# self.list.header().resizeSection(1, size * 4)
158+
self.list.header().resizeSection(2, size * 25)
159+
# self.list.header().resizeSection(3, size * 7)
160+
# self.list.header().resizeSection(4, size * 8)
178161

179162
# --- signal handling
180163
self.list.itemSelectionChanged.connect(self.__selectionChanged)
@@ -186,10 +169,9 @@ def _build(self):
186169
self.__doubleClicked)
187170
self.cntTable.sigSpecFileCntTableSignal.connect(self._cntSignal)
188171

189-
if QTVERSION > '4.2.0':
190-
self.list.setSortingEnabled(False)
191-
self.list.header().sectionDoubleClicked[int].connect( \
192-
self.__headerSectionDoubleClicked)
172+
self.list.setSortingEnabled(False)
173+
self.list.header().sectionDoubleClicked[int].connect( \
174+
self.__headerSectionDoubleClicked)
193175
if OBJECT3D:
194176
self.object3DBox.clicked.connect(self._setObject3DBox)
195177
if hasattr(self, 'meshBox'):
@@ -207,13 +189,10 @@ def _build(self):
207189
self.disableScan = 0 #(type=="mca")
208190

209191
# -- last scan watcher
210-
if QTVERSION > '5.0.0':
211-
self.lastScanWatcher = qt.QTimer()
212-
self.lastScanWatcher.setSingleShot(True)
213-
self.lastScanWatcher.setInterval(2000) # 2 seconds
214-
self.lastScanWatcher.timeout.connect(self._timerSlot)
215-
else:
216-
self.lastScanWatcher = None
192+
self.lastScanWatcher = qt.QTimer()
193+
self.lastScanWatcher.setSingleShot(True)
194+
self.lastScanWatcher.setInterval(2000) # 2 seconds
195+
self.lastScanWatcher.timeout.connect(self._timerSlot)
217196

218197
# --- context menu
219198
self.data= None
@@ -344,12 +323,11 @@ def refresh(self):
344323
self.scans.append(sn)
345324
after= item
346325
i = i + 1
347-
if QTVERSION > '5.0.0':
348-
self.list.resizeColumnToContents(0)
349-
self.list.resizeColumnToContents(1)
350-
#self.list.resizeColumnToContents(2)
351-
self.list.resizeColumnToContents(3)
352-
self.list.resizeColumnToContents(4)
326+
self.list.resizeColumnToContents(0)
327+
self.list.resizeColumnToContents(1)
328+
#self.list.resizeColumnToContents(2)
329+
self.list.resizeColumnToContents(3)
330+
self.list.resizeColumnToContents(4)
353331

354332
def clear(self):
355333
self.list.clear()
@@ -470,11 +448,10 @@ def _timerSlot(self):
470448
if updated:
471449
self.data.refresh()
472450
self.refresh()
473-
if QTVERSION > "5.0.0":
474-
# make sure the item is found and selected after the update
475-
itemList = self.list.findItems(scan, qt.Qt.MatchExactly,1)
476-
if len(itemList) == 1:
477-
itemList[0].setSelected(True)
451+
# make sure the item is found and selected after the update
452+
itemList = self.list.findItems(scan, qt.Qt.MatchExactly,1)
453+
if len(itemList) == 1:
454+
itemList[0].setSelected(True)
478455
if not self.lastScanWatcher.isActive():
479456
self.lastScanWatcher.start()
480457
else:
@@ -534,11 +511,10 @@ def __doubleClicked(self, item):
534511
if updated:
535512
self.data.refresh()
536513
self.refresh()
537-
if QTVERSION > "5.0.0":
538-
# make sure the item is selected
539-
itemList = self.list.findItems(sn, qt.Qt.MatchExactly,1)
540-
if len(itemList) == 1:
541-
itemList[0].setSelected(True)
514+
# make sure the item is selected
515+
itemList = self.list.findItems(sn, qt.Qt.MatchExactly,1)
516+
if len(itemList) == 1:
517+
itemList[0].setSelected(True)
542518
#shortcut selec + remove?
543519
#for the time being just add
544520
self._addClicked()
@@ -586,8 +562,7 @@ def mcaDeviceSelected(self, ddict):
586562

587563
def __showScanInfo(self, idx = None):
588564
if idx is None:
589-
if QTVERSION > '4.0.0':
590-
idx = self.menu_idx
565+
idx = self.menu_idx
591566
_logger.debug("Scan information:")
592567

593568
try:
@@ -624,11 +599,8 @@ def _addClicked(self, emit=True):
624599
_logger.debug("Overwritten _addClicked method")
625600

626601
#get selected scan keys
627-
if QTVERSION < '4.0.0':
628-
scan_sel= [sn for sn in self.scans if self.list.findItem(sn,1).isSelected()]
629-
else:
630-
itemlist = self.list.selectedItems()
631-
scan_sel = [str(item.text(1)) for item in itemlist]
602+
itemlist = self.list.selectedItems()
603+
scan_sel = [str(item.text(1)) for item in itemlist]
632604

633605
#get selected counter keys
634606
cnt_sel = self.cntTable.getCounterSelection()

0 commit comments

Comments
 (0)