falsche Aktivität bei Aktion

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Nobuddy
User
Beiträge: 1019
Registriert: Montag 30. Januar 2012, 16:38

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
Nobuddy
User
Beiträge: 1019
Registriert: Montag 30. Januar 2012, 16:38

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()
Nobuddy
User
Beiträge: 1019
Registriert: Montag 30. Januar 2012, 16:38

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()
Antworten