ich bin mir nicht sicher ob es hier erwünscht ist ein Frage zu stellen, die mir
in einem anderen Board nicht beantwortet werden konnte, aber ich tue es
einfach mal. Link zum anderen Board
Ich habe eine MDI Anwendung in PyQt4 geschrieben in der ich über die
addWindow() Methode ein QMainWindow Object namens "DbEditor"
inzufüge.
Zu dem Objekt namens "DbEditor" füge ich ein QTreeView Element hinzu
mit der Methode setCentralWidget(). Das QTreeView Objekt wird mit einem
QAbstractItemModel verbunden namens "TreeModell". Von dem QTreeView
Objekt kann man was sehen. Von dem Objekt namens "TreeModell" wird
mir allerdings nichts in dem QTreeView Objekt angezeigt.
1.) Habe ich vielleicht ein show() vergessen?
2.) Wo muß ich überall ein show() machen?
3.) Muß ich noch ein QtGui.QApplication() Objekt erzeugen für das
QAbstractItemModel() ?
4.) Wo muß ein QtGui.QApplication() Objekt erzeugt werden?
5.) Habe ich ein addWindow() vergessen?
6.) Wo muß ich ein addWindow() machen?
7.) Sonstige Ideen?
Hier die Sourcen für den "DbEditor", hier werden nur das grafische Layout,
die Aktionen koordiniert, und das "TreeModel" mit der "TreeView" erzeugt.
Code: Alles auswählen
#!/usr/bin/env python2.5
#
# dbeditor.py
#
import sys, os
from PyQt4 import QtCore, QtGui
from treemodell import *
class DbEditor(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.createBaumAnsicht()
...
def createBaumAnsicht(self):
# Es wird eine Ansicht fuer allgemeine Baum-Ansichten ueber die QTreeView
# Klasse erstellt. In diese Ansicht wird ein Baum-Modell eingefuegt.
# Dieses Baum-Modell kann jeder Zeit geaendert werden und aendert die
# Baum-Ansicht gleich automatisch mit. Das Baum-Modell wird mit den Daten gefuettert.
self.baumModell = TreeModell()
self.baumAnsicht = QtGui.QTreeView()
# Die baumAnsicht soll automatisch aktualisiert werden bei Aenderung der Daten im BaumModell
self.baumAnsicht.setModel(self.baumModell)
self.setCentralWidget(self.baumAnsicht)
def createNewDb(self):
dbDateiname = QtGui.QFileDialog.getSaveFileName(self,
self.tr("Create a new DataBase"),
self.__lastWorkDir,
self.tr("DataBase Files (*.db);;All Files (*)"))
if not dbDateiname.isEmpty():
file(dbDateiname,'w')
self.openDb(dbDateiname)
def openDb(self, dbDateiname=None):
if dbDateiname == None:
dbDateiname = QtGui.QFileDialog.getOpenFileName(self,
self.tr("Open a DataBase"),
self.__lastWorkDir,
self.tr("DataBase Files (*.db);;All Files (*)"))
# Nur das BaumModell ist direkt an die Schnittstelle angeschlossen.
self.baumModell.openDb(dbDateiname)
.
.
.
def closeEvent(self, event):
self.writeSettings()
event.accept()
Darstellung der Daten festgelegt,
Code: Alles auswählen
#!/usr/bin/env python2.5
#
# treemodell.py
#
import sys, os
from PyQt4 import QtCore, QtGui
from dbiface import *
class TreeItem:
def __init__(self, data, parent=None):
self.parentItem = parent
self.itemData = data
self.childItems = []
def appendChild(self, item):
self.childItems.append(item)
.
.
.
def row(self):
if self.parentItem:
return self.parentItem.childItems.index(self)
return 0
class TreeModell(QtCore.QAbstractItemModel):
def __init__(self, parent=None):
QtCore.QAbstractItemModel.__init__(self, parent)
rootData = []
rootData.append(QtCore.QVariant("DB"))
rootData.append(QtCore.QVariant("Tabelle"))
rootData.append(QtCore.QVariant("Schluessel"))
rootData.append(QtCore.QVariant("Wert"))
self.rootItem = TreeItem(rootData)
def openDb(self, dbDateiname=''):
# Welche Tabellen gibt es?
query = ['Select name FROM sqlite_master ORDER BY name']
dbInterface = DbIface(dbDateiname)
tabUebersicht = dbInterface.getTbls(query)
.
.
.
angezeigt wird,
Code: Alles auswählen
#!/usr/bin/env python2.5
#
#hauptfenster.py
#
import sys
from PyQt4 import QtCore, QtGui
from reisehelfer import *
from dbeditor import *
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.setAttribute(QtCore.Qt.WA_DeleteOnClose)
self.workspace = QtGui.QWorkspace()
self.workspace.setScrollBarsEnabled(True)
self.setCentralWidget(self.workspace)
...
def createReisehelfer(self):
ReiseHelferFenster = ReiseHelfer(self)
if not self.existUnterfenster("Reisehelfer"):
self.workspace.addWindow(ReiseHelferFenster)
ReiseHelferFenster.show()
def createDbEditor(self):
editorFenster = DbEditor(self)
if not self.existUnterfenster("DB Editor"):
self.workspace.addWindow(editorFenster)
editorFenster.show()
.
.
.
def existUnterfenster(self,Title):
for window in self.workspace.windowList():
if Title == window.windowTitle():
return True
return False
def closeEvent(self, event):
self.workspace.closeAllWindows()
self.writeSettings()
event.accept()
def runMainWindow(args):
app = QtGui.QApplication(args)
mainwindow = MainWindow()
mainwindow.show()
sys.exit(app.exec_())