Fixed measurement dialog not showing in wayland.

This commit is contained in:
jupfi 2024-05-19 11:37:06 +02:00
parent ffc8d27149
commit f5705e4efc
2 changed files with 23 additions and 10 deletions

View file

@ -94,6 +94,7 @@ class MeasurementController(ModuleController):
"""Emit the start measurement signal.""" """Emit the start measurement signal."""
logger.debug("Start measurement clicked") logger.debug("Start measurement clicked")
self.module.view.measurement_dialog.show() self.module.view.measurement_dialog.show()
QApplication.processEvents()
# Set the measurement parameters again in case the user switches spectrometer # Set the measurement parameters again in case the user switches spectrometer
self.module.nqrduck_signal.emit( self.module.nqrduck_signal.emit(

View file

@ -16,7 +16,7 @@ from PyQt6.QtWidgets import (
QLineEdit, QLineEdit,
) )
from PyQt6.QtGui import QFontMetrics from PyQt6.QtGui import QFontMetrics
from PyQt6.QtCore import pyqtSlot, Qt from PyQt6.QtCore import pyqtSlot, Qt, QTimer
from nqrduck.module.module_view import ModuleView from nqrduck.module.module_view import ModuleView
from nqrduck.assets.icons import Logos from nqrduck.assets.icons import Logos
from nqrduck.assets.animations import DuckAnimations from nqrduck.assets.animations import DuckAnimations
@ -55,7 +55,7 @@ class MeasurementView(ModuleView):
) )
# Measurement dialog # Measurement dialog
self.measurement_dialog = self.MeasurementDialog() self.measurement_dialog = self.MeasurementDialog(self)
# Connect signals # Connect signals
self.module.model.displayed_measurement_changed.connect( self.module.model.displayed_measurement_changed.connect(
@ -379,26 +379,40 @@ class MeasurementView(ModuleView):
finished (bool): True if the spinner movie is finished. finished (bool): True if the spinner movie is finished.
""" """
def __init__(self): def __init__(self, parent=None):
"""Initialize the dialog.""" """Initialize the dialog."""
super().__init__() super().__init__(parent)
self.finished = True self.setParent(parent)
self.finished = False
self.setModal(True) self.setModal(True)
self.setWindowFlag(Qt.WindowType.FramelessWindowHint) self.setWindowFlag(Qt.WindowType.FramelessWindowHint)
self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground) self.setAttribute(Qt.WidgetAttribute.WA_TranslucentBackground)
self.setWindowFlag(Qt.WindowType.WindowStaysOnTopHint) # Ensure the window stays on top
self.message_label = QLabel("Measuring...")
# Make label bold and text larger
font = self.message_label.font()
font.setPointSize(20)
font.setBold(True)
self.message_label.setFont(font)
self.message_label = "Measuring..."
self.spinner_movie = DuckAnimations.DuckKick128x128() self.spinner_movie = DuckAnimations.DuckKick128x128()
self.spinner_label = QLabel(self) self.spinner_label = QLabel(self)
# Make spinner label
self.spinner_label.setMovie(self.spinner_movie) self.spinner_label.setMovie(self.spinner_movie)
self.layout = QVBoxLayout(self) self.layout = QVBoxLayout(self)
self.layout.addWidget(QLabel(self.message_label)) self.layout.addWidget(self.message_label)
self.layout.addWidget(self.spinner_label) self.layout.addWidget(self.spinner_label)
self.spinner_movie.finished.connect(self.on_movie_finished) self.spinner_movie.finished.connect(self.on_movie_finished)
self.spinner_movie.start() def show(self) -> None:
"""Show the dialog and ensure it is raised and activated."""
super().show()
self.raise_() # Bring the dialog to the front
self.activateWindow() # Give the dialog focus
self.spinner_movie.start() # Ensure the movie starts playing
def on_movie_finished(self) -> None: def on_movie_finished(self) -> None:
"""Called when the spinner movie is finished.""" """Called when the spinner movie is finished."""
@ -406,8 +420,6 @@ class MeasurementView(ModuleView):
def hide(self) -> None: def hide(self) -> None:
"""Hide the dialog and stop the spinner movie.""" """Hide the dialog and stop the spinner movie."""
while not self.finished:
continue
self.spinner_movie.stop() self.spinner_movie.stop()
super().hide() super().hide()