Seite 1 von 1

falsche Aktivität bei Aktion

Verfasst: Samstag 29. März 2025, 16:06
von Nobuddy
Hallo zusammen,
hoffe der Betreff irritiert Euch nicht zu sehr!

Ich habe zu meinem Problem ein Beispiel eingefügt, welches dies wieder gibt.
Folgendes, bei diesem Beispiel klickt man zuerst auf das leere Fenster, das eine MessageBox öffnet, um bei 'Yes' ein Folgeereignis auszulösen.
Wenn das Fenster der MessageBox geöffnet ist, veränder sich mein Courser und der Fokus ist auf dem leeren Fenster statt auf der MessageBox.

Code: Alles auswählen

import sys
from PyQt5.QtCore import (
	Qt,
	QEvent
)
from PyQt5.QtWidgets import (
	QApplication,
	QMainWindow,
	QLabel,
	QMessageBox,
	QHBoxLayout
)

class TestClass(QMainWindow):

	def __init__(self):
		super().__init__()

		# create eventFilter
		self.installEventFilter(self)
		self.show()

	def nextStep(self):
		if self.ask():
			container = QLabel(self)
			hb = QHBoxLayout(self)
			hb.addWidget(QLabel('<<< Welcome >>>'))
			container.setLayout(hb)
			self.setCentralWidget(container)
		else:
			self.close()

	def ask(self):
		mb = QMessageBox
		r = mb.question(None,'', "Start application?", mb.Yes | mb.No)
		if r == mb.Yes:
			return True
		else:
			return False

	def mousePressEvent(self, event):
		if event.type() == QEvent.MouseButtonPress:
			if event.button() == Qt.LeftButton:
				self.pressPos = event.pos()
				self.nextStep()
		super().mousePressEvent(event)

def main():
	App = QApplication(sys.argv)
	obj = TestClass()
	sys.exit(App.exec())

if __name__ == '__main__':
	main()
Hoffe Ihr könnt mir hier helfen!

Grüße Nobuddy

Re: falsche Aktivität bei Aktion

Verfasst: Samstag 29. März 2025, 18:06
von Nobuddy
Konnte dies mit grabMouse und releaseMouse beheben.

Code: Alles auswählen

import sys
from PyQt5.QtCore import (
	Qt,
	QEvent
)
from PyQt5.QtWidgets import (
	QApplication,
	QMainWindow,
	QLabel,
	QMessageBox,
	QHBoxLayout
)

class TestClass(QMainWindow):

	def __init__(self):
		super().__init__()

		self.start = False
		# create eventFilter
		self.installEventFilter(self)
		self.show()

	def nextStep(self):
		if self.ask():
			self.start = True
			container = QLabel(self)
			hb = QHBoxLayout(self)
			hb.addWidget(QLabel('<<< Welcome >>>'))
			container.setLayout(hb)
			self.setCentralWidget(container)
		else:
			self.close()

	def ask(self):
		self.grabMouse()
		mb = QMessageBox
		r = mb.question(None,'',
			"Start application?",
			mb.Yes | mb.No | mb.Cancel,
			defaultButton=mb.Yes)
		self.releaseMouse()
		if r == mb.Yes:
			return True

	def mousePressEvent(self, event):
		if event.type() == QEvent.MouseButtonPress:
			if event.button() == Qt.LeftButton:
				if not self.start:
					self.nextStep()
		super().mousePressEvent(event)

def main():
	App = QApplication(sys.argv)
	obj = TestClass()
	QApplication.restoreOverrideCursor()
	sys.exit(App.exec())

if __name__ == '__main__':
	main()

Re: falsche Aktivität bei Aktion

Verfasst: Montag 31. März 2025, 08:23
von Nobuddy
Gibt es eine Möglichkeit nach Aufruf von grabMouse(), zu überprüfen ob grabMouse() enabled ist?
Wenn ja, könnte ich mit z.B. der ESC-Taste über einen Event mit releaseMouse(), die Maus wieder aktivieren und die Anwendung beenden.

Aktuell, verwende ich es so:

Code: Alles auswählen

	def keyPressEvent(self, QKeyEvent):
		if QKeyEvent.key() == Qt.Key_Escape:
			self.releaseMouse()
			if not self.start:
				self.close()