Hy guys,PyQt 4: Position der Werkzeugleiste holen
In meinem ausführbaren Programm gibt es eine Symbolleiste. Nun, der Benutzer entscheidet, die Symbolleiste zu verschieben. Jetzt ist die Symbolleiste schwebend. Ich weiß, dass ich die Floating-Signale, die bei der Anordnung der Toolbar durch den Benutzer ausgegeben werden, mit einbeziehen muss. Wie kann ich die neue Position der Symbolleiste speichern? Ich kenne die Methode zum Hinzufügen der Symbolleiste zum Hauptfenster mit einer Position: self.addToolBar(Qt.LeftToolBarArea , toolbar_name)
. In der handle_floating() - Methode siehst du was ich will: Da möchte ich momentan die Position bekommen, aber wie? Sie sehen auch, dass ich gerade eine Elementvariable mit dem Namen self.toolbar_pos
hinzugefügt habe, um die Position der Symbolleiste beizubehalten. Meine Idee ist, wenn die Anwendung beendet wird, möchte ich diesen Wert in eine Datei serialisieren, und später, wenn die Anwendung erneut ausgeführt wird, liest sie diese Datei und setzt die Symbolleiste entsprechend. Aber das ist kein Problem. Momentan habe ich keine Idee, die Position der Toolbar zu bekommen.
Ich brauche deine Hilfe :)
#!/usr/bin/python
# -*- coding: utf-8 -*-
import sys
from PyQt4 import QtGui, QtCore
class Example(QtGui.QMainWindow):
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.toolbar_pos = None
self.initUI()
def initUI(self):
exitAction = QtGui.QAction(QtGui.QIcon('exit24.png'), 'Exit', self)
exitAction.setShortcut('Ctrl+Q')
exitAction.triggered.connect(QtGui.qApp.quit)
self.toolbar = QtGui.QToolBar(self)
self.toolbar.setToolButtonStyle(QtCore.Qt.ToolButtonTextBesideIcon)
self.addToolBar(self.toolbar)
self.toolbar.addAction(exitAction)
self.toolbar.setAllowedAreas(QtCore.Qt.TopToolBarArea
| QtCore.Qt.BottomToolBarArea
| QtCore.Qt.LeftToolBarArea
| QtCore.Qt.RightToolBarArea)
self.addToolBar(QtCore.Qt.LeftToolBarArea , self.toolbar)
self.toolbar.topLevelChanged.connect(self.handle_floating)
def handle_floating(self, event):
# The topLevel parameter is true
# if the toolbar is now floating
if not event:
# If the toolbar no longer floats,
# then calculate the position where the
# toolbar is located currently.
self.toolbar_pos = None
print "Get position: ?"
def main():
app = QtGui.QApplication(sys.argv)
ex = Example()
ex.setGeometry(300, 300, 300, 200)
ex.setWindowTitle('Toolbar example')
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Ihre Lösung ist sehr nützlich. TA. Aber ich habe eine kleine Frage. Durch das Überschreiben der 'closeEvent() - Methode 'speichern Sie den Status des Hauptfensters in einer Datei. Nun, warum benutzt du die '.data() - Funktion?' – Sophus
@Sophus. Die 'saveState' Methode gibt ein' QByteArray' zurück. In einigen Versionen von Python/Pyqt ist es möglich, das direkt in eine Datei mit Python zu schreiben - aber in anderen nicht. Die 'data()' Methode eines 'QByteArray' wandelt es in ein Python' bytes' Objekt um, was bedeutet, dass es garantiert mit allen Versionen von python/pyqt funktioniert. Wenn Sie jedoch 'QSettings' verwenden, um den Status zu speichern, müssen Sie sich über diese Kompatibilitätsprobleme keine Gedanken machen, da das Schreiben von Dateien von Qt erledigt wird. – ekhumoro
@Sophus. PS: eigentlich sollte die 'restoreState' Methode zur vollen Kompatibilität wahrscheinlich auch' QByteArray' verwenden (ich habe meine Antwort entsprechend aktualisiert). – ekhumoro