Ich kann nicht ganz herausfinden, wie die Sicherung und Wiederherstellung funktionieren soll, so dass ich die Dockwidgets Geometrics speichern kann, wenn die Anwendung geschlossen und erneut geöffnet wird. Ich habe 5 Dockwidgets, die ich gerne haben würde.Speichern und Wiederherstellen von Dockwidgets Position und Größe
Ich nehme ich beide restoreState
und saveState
jeweils in init
und close
verwenden. Aber wie konfiguriere ich es?
Mainwindow-Klasse
import sys
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from DockWindowGraph import Dock
class Window(QMainWindow):
def __init__(self, parent=None):
super(Window, self).__init__(parent)
self.centralWindow_ = QFrame()
self.setCentralWidget(None)
self.CreateWidgets()
self.settings = QSettings()
self.restoreState()
def CreateWidgets(self):
self.toolbar = self.addToolBar('Toolbar')
self.toolbar.setMovable(False)
exitA = QAction(QIcon('Images/gj.png'), 'Exit', self)
exitA.setShortcut('Ctrl+Q')
exitA.setStatusTip('Exit application')
exitA.triggered.connect(self.close)
self.toolbar.addAction(exitA)
openDock_ = QAction(QIcon('Images/gj.png'), 'Open', self)
openDock_.setShortcut('Ctrl+E')
openDock_.setStatusTip('Open Dock')
openDock_.triggered.connect(self.OpenDockWindow)
self.toolbar.addAction(openDock_)
self.setWindowTitle("We do not sow")
self.showFullScreen()
self.firstDock_ = Dock(self, 'First')
self.firstDock_.setObjectName('First')
self.addDockWidget(Qt.LeftDockWidgetArea, self.firstDock_)
self.secondDock_ = Dock(self, 'Second')
self.firstDock_.setObjectName('Second')
self.addDockWidget(Qt.LeftDockWidgetArea, self.secondDock_)
self.thirdDock_ = Dock(self, 'Third')
self.thirdDock_.setObjectName('Third')
self.splitDockWidget(self.firstDock_, self.thirdDock_, Qt.Horizontal)
self.fDock_ = Dock(self, 'Fourth')
self.fDock_.setObjectName('Fourth')
self.splitDockWidget(self.firstDock_, self.fDock_, Qt.Horizontal)
self.fiDock_ = Dock(self, 'Fifth')
self.fiDock_.setObjectName('Fifth')
self.splitDockWidget(self.firstDock_, self.fiDock_, Qt.Vertical)
self.setTabPosition(Qt.AllDockWidgetAreas, QTabWidget.North)
def OpenDockWindow(self):
dock_ = Dock((self.frameGeometry().width()/2), self.firstDock_)
self.addDockWidget(Qt.RightDockWidgetArea, dock_)
self.tabifyDockWidget(self.secondDock_, dock_)
def closeEvent(self, event):
print('closing')
settings_ = QSettings()
self.saveState()
app = QApplication(sys.argv)
app.setOrganizationDomain('ltd')
app.setOrganizationName('Alg')
w = Window()
sys.exit(app.exec_())
mein Dock Klasse:
from PyQt4.QtCore import *
from PyQt4.QtGui import *
from DockWindowFrame import Frame
class Dock(QDockWidget):
def __init__(self, title, parent=None):
super(Dock, self).__init__(parent)
self.setAllowedAreas(Qt.RightDockWidgetArea | Qt.LeftDockWidgetArea | Qt.TopDockWidgetArea | Qt.BottomDockWidgetArea)
self.setFeatures(QDockWidget.DockWidgetFloatable | QDockWidget.DockWidgetMovable)
self.frame = Frame()
self.frame.setStyleSheet("QWidget { background-color: rgba(0,220,0,100%)}")
self.setWidget(self.frame)
def ReturnFrame(self):
return self.frame
EDIT: Fehler nach unten Antwort versuchen.
Traceback (most recent call last):
File "C:\Users\Rasmus\workspace\PyQtLearning\src\gg.py", line 90, in <module>
main()
File "C:\Users\Rasmus\workspace\PyQtLearning\src\gg.py", line 86, in main
w = Window()
File "C:\Users\Rasmus\workspace\PyQtLearning\src\gg.py", line 14, in __init__
self.readSettings()
File "C:\Users\Rasmus\workspace\PyQtLearning\src\gg.py", line 72, in readSettings
self.restoreGeometry(settings.value("geometry").toByteArray())
AttributeError: 'NoneType' object has no attribute 'toByteArray'
Ich bekam einen Keine-Typ. Aber finden Sie eine mögliche Lösung für http://stackoverflow.com/questions/11352157/pyqt-window-i-want-to-remember-the-location-it-was-closed-at. Aber als ich meine App abgeschossen und versucht habe, sie wieder zu öffnen. Es wird überhaupt nicht geöffnet. – vandelay
@vandelay - Ihr Code funktioniert gut an meiner Stelle. Ich poste sie im Mai antworten. – pingze
Ich habe versucht, den vollen Code einzufügen, aber es gibt mir einen 'NoneType'. Wenn ich ein wenn nicht Settings.value() == None. Es wird das erste Mal laufen. Aber wenn ich die Anwendung das zweite Mal starte, bekomme ich ein Fenster mit "Python hat aufgehört zu arbeiten". Kann das etwas mit Eclipse/Pydev zu tun haben? – vandelay