@Hyperion: Ich habe über deine Hinweise nachgedacht. Ich präsentiere dir mal einen kleinen Code-Ausschnitt, damit du zum einen sehen kannst, wie ich es umgesetzt habe, und das ich zum Anderen auch Kritikpunkte bekomme. Man will ja besser werden
Modul: mdi.py (MainWindow, soll hier als MDI-Hauptfenster dienen)
Code: Alles auswählen
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import sys
import os
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QApplication, QMainWindow, QWorkspace, QAction, QMenu
from ..modules_ui.ui_pp_check import Check_Window
class Mdi_Main(QMainWindow):
def __init__(self, parent=None):
QMainWindow.__init__(self, parent)
self.getPath_mdi = os.path.join(os.path.abspath("."), 'files', "qt_ui", 'pp_mdi.ui')
self.ui_TestMainWorkSpace = loadUi(self.getPath_mdi, self)
self.workspace = QWorkspace()
self.workspace.setScrollBarsEnabled(True)
self.setCentralWidget(self.workspace)
self.ui_TestMainWorkSpace.actionAddContact.triggered.connect(self.open_check)
def open_check(self):
self.check_window = Check_Window(self.show_secon_window)
self.workspace.addWindow(self.check_window)
self.check_window.show()
def show_secon_window(self):
from ..modules_ui.ui_pp_second import Second_Window
self.second_form = Second_Window()
self.workspace.addWindow(self.second_form)
self.second_form.show()
app = QApplication(sys.argv)
app.setQuitOnLastWindowClosed(False)
window = Mdi_Main()
sys.exit(app.exec_())
Was habe ich mir dabei gedacht? Also, ich habe hier zwei Funktionen, einmal in Zeile 25 und 30. Diese dienen dazu Formen zu öffnen. Ich hoffe, du meintest das mit der "zentralen" Verwaltung von Formen, Hyperion? In der MDI-Form ist eine Menu-Leiste mit dem MenuItm
actionAddContact (Zeile 23). bei einem Auslöser wird die Form geöffnet, die in der
open_check-Funktion festgelegt ist. Jedoch füge ich das zu öffnende Fenster (check_window ) nicht einfach der
addWindow-Methode zum Inhalt und öffne sie dann mit der
show()-Methode. Ich übergebe der Klasse
Check_Window einen Parameter/ ein Argument, und zwar den Namen der Funktion
show_secon_window().
Modul: check.py
Code: Alles auswählen
import os
from PyQt4.QtCore import Qt
from PyQt4.QtGui import QWidget
from PyQt4.uic import loadUi
class Check_Window(QWidget):
def __init__(self, open_it, parent=None):
QWidget.__init__(self, parent)
self.show_it = open_it
self.getPath_check = os.path.join(os.path.abspath("."), 'files', "qt_ui", 'pp_check.ui')
self.ui_pp_check = loadUi(self.getPath_check, self)
self.ui_pp_check.pushButton.clicked.connect(self.show_it)
Das Fenster
check_window ist offen und im Widget QWorkspace. In Zeile 8 übergebe ich der
Check_Window-Klasse eine Instanz der Funktions-Klasse als Parameter, damit ich quasi auf die Funktion einer anderen Klasse zugreifen kann. Zunächst weise ich den Parameter
open_it dem Attribut
show_it zu. In diesem Attribut ist also der Parameter nun gespeichert. In Zeile 17 klickt man auf den pushButton und dadurch wird auf die
show_secon_window-Funktion zugegriffen, die sich in der Klasse
Mdi_Main befindet.
Es klappt wie ich es erwartet habe. Aber ich hätte hier und da vielleicht einige Kritikpunkte. Oder war das nur Glück das es bei mir klappte? Ach, übrigens, betrachtet meine Beschreibungen nicht als eine Art Belehrung. Ich weiß, dass ihr hohe Kompetenzen in Python habt. Sonst wär ich ja nicht hier, und würde euch fragen
Mir ging es darum, dass ihr meinen Gedankengang verfolgen kann. Und vielleicht an meiner Formulierung äußern könnt, ob ich mich etwas missverständlich ausdrücke oder gar Sachen durcheinander werfe.