im nachfolgenden, ausführbaren Quelltext werden Unterfenster in das MDI-Konzept geladen. Es klappt alles wunderbar. Was möchte ich? Ihr seht die Custom_Window()-Klasse, die als Unterfenster fungieren sollen. Innerhalb dieser eben genannten Klasse seht ihr eine überschriebene changeEvent()-Methode. Ich möchte auf diesem Wege herausfinden, welches der folgende Fenster gerade aktiv ist. Wenn ihr diesen Quelltext auf eurem Rechner ausführt, dann öffnet mal von mir aus zwei oder drei Unterfenster, und wechselt von einem Unterfenster zu nächsten. Ich möchte, dass jedes dieser Fenster von sich aus mitteilen kann, ob es gerade aktive ist. Aber irgendwie will meine Vorgehensweise nicht klappen.
Habt ihr eine Idee?
Code: Alles auswählen
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
class Custom_Window(QWidget) :
def __init__(self, parent = None) :
super(Custom_Window, self) .__init__(parent)
# print here in this class, that itself is currently active,
# because this window is a subwindow, so its inherits from class
# QMdiSubWindow(). I want this subwindow itself tell me
# whether its activated or not. BUT I don't know how to
# solve this idea.
def changeEvent(self, event):
print "event", event
print "type", type(self.parent())
print "Status", self.parent().isActiveWindow()
if event.type() == QEvent.WindowActivate:
if self.parent().isActiveWindow():
print "is currently active."
else: print "I am passive"
class MainWindow(QMainWindow) :
count = 0
def __init__(self, parent = None) :
super(MainWindow, self) .__init__(parent)
self.mdi = QMdiArea()
self.setCentralWidget(self.mdi)
bar = self.menuBar()
file = bar.addMenu("File")
file.addAction("New")
file.addAction("cascade")
file.addAction("Tiled")
file.triggered[QAction].connect(self.windowaction)
self.setWindowTitle("MDI demo")
def windowaction(self, q) :
custom_window = Custom_Window()
print "triggered"
if q.text() == "New" :
MainWindow.count = MainWindow.count+1
sub = QMdiSubWindow()
sub.setWidget(Custom_Window() )
sub.setWindowTitle("subwindow"+str(MainWindow.count) )
self.mdi.addSubWindow(sub)
sub.show()
if q.text() == "cascade" :
self.mdi.cascadeSubWindows()
if q.text() == "Tiled" :
self.mdi.tileSubWindows()
def main() :
app = QApplication(sys.argv)
ex = MainWindow()
ex.show()
sys.exit(app.exec_() )
if __name__ == '__main__':
main()