0
保存と復元がどのように動作するのかよくわからないので、アプリケーションを閉じて再度開くと、ドックウィジェットのジオメトリを保存することができます。私は5つのドックウィジェットを持っていますが、私はこの機能を持っていたいと思います。dockwidgetsの位置とサイズを保存して復元する
restoreState
とsaveState
の両方をinit
とclose
にそれぞれ使用する必要があると仮定します。しかし、どうすれば設定できますか?
メイン・ウィンドウクラス
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_())
私のドッククラス:
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:答えの下にしようとした後にエラーが発生しました。
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'
私はなしタイプを得ました。しかし、可能な解決策はhttp://stackoverflow.com/questions/11352157/pyqt-window-i-want-to-remember-the-location-it-was-closed-atにあります。しかし、私は私のアプリを撃墜し、再びそれを開こうとします。それはまったく開きません。 – vandelay
@vandelay - あなたのコードは私のところでうまく動作します。私は答えるかもしれない。 – pingze
完全なコードを貼り付けるコピーを試みましたが、それは私に 'NoneType'を与えます。もし私がifを置いていなければsettings.value()== None。それは初めて実行されます。しかし、2回目にアプリケーションを起動すると、「Pythonが機能しなくなりました」というウィンドウが表示されます。これはeclipse/pydevと関係がありますか? – vandelay