我有一个QDialog,当用户关闭QDialog并稍后重新打开时,我想要记住位置并在同一个位置打开窗口。我将如何记住那个位置?PyQT窗口:我想记住它关闭的位置
回答
看起来你可以使用QSettings这个。如果您查看标题为Restoring the State of a GUI Application的文档部分,您会发现主窗口的示例。
换句话说,保存用户关闭对话框时的大小和位置,然后下次打开它重新加载这些设置。
对于这一点,你可以使用saveState()
,saveGeometry()
resize()
和move()
方法,在与其他的答案中提到的closeEvent()和QSettings结合。下面是一些例子,得到的想法:
class MyWindow(QMainWindow):
def __init__(self, parent):
QMainWindow.__init__(self, parent)
self.settings = QSettings("MyCompany", "MyApp")
self.restoreGeometry(self.settings.value("geometry", ""))
self.restoreState(self.settings.value("windowState", ""))
def closeEvent(self, event):
self.settings.setValue("geometry", self.saveGeometry())
self.settings.setValue("windowState", self.saveState())
QMainWindow.closeEvent(self, event)
编辑:
更新答案使用PyQt的API第2版。如果使用API V1,你要的settings.value()
结果手动施放为ByteArray像
self.restoreState(self.settings.value("windowState").toByteArray())
我还使用了窗口自身size()
和pos()
,因为我已经从.ui
文件加载的窗口。如果从头编码窗口,可以将它设置为默认值。对于状态,我默认为空字符串,该函数愉快地接受为空的ByteArray,并且在第一次运行时不做任何事情。
自从self.settings.value(“geometry”)返回NoneType时,第一次尝试时不起作用。 – HansHarhoff 2015-11-25 18:03:26
@HansHarhoff更改了默认情况下返回空字符串的示例,它修复了问题。 – 2016-09-05 03:47:00
RonanPaixão的回答几乎是正确的。 当尝试这个得到了错误:
AttributeError: 'NoneType' object has no attribute 'toByteArray'
这是因为,首先,没有保存的几何形状和状态。另外,返回值已经是一个QByteArray。此代码适用于我:
class MyWindow(QMainWindow):
def __init__(self, parent):
QMainWindow.__init__(self, parent)
self.settings = QSettings("MyCompany", "MyApp")
if not self.settings.value("geometry") == None:
self.restoreGeometry(self.settings.value("geometry"))
if not self.settings.value("windowState") == None:
self.restoreState(self.settings.value("windowState"))
def closeEvent(self, event):
self.settings.setValue("geometry", self.saveGeometry())
self.settings.setValue("windowState", self.saveState())
QMainWindow.closeEvent(self, event)
更改了默认情况下返回空字符串的示例,这样可以更彻底地修复问题,因为还原函数接受空字符串。这样我就不需要两次获取值。 – 2016-09-05 03:48:53
- 1. PyQt窗口不关闭
- 2. PyQt - 窗口的位置
- 3. 试图使对话框窗口记住它的最后位置
- 4. PyQt窗口在打开后关闭
- 5. 无关闭窗口的关闭窗口
- 6. PyQt窗口关闭关闭整个应用程序
- 7. 在Cocoa中记住窗口打开/关闭
- 8. 如何记住python 3中的tkinter窗口位置?
- 9. 记住并恢复WPF窗口的scren,WindowState和位置?
- 10. 想延迟关闭fancybox窗口
- 11. 旧窗户关闭后新窗口的位置
- 12. 关闭窗口
- 13. 我不想在我的WPF窗口的任务栏上下文菜单中设置“关闭窗口”菜单项
- 14. 记住文件名关闭
- 15. 如何关闭我们想要的弹出窗口
- 16. PyQt的新窗口实例展示,并立即关闭
- 17. 只要它打开就关闭窗口
- 18. 固定位置的弹出窗口的CSS关闭按钮
- 19. 我如何确保一个自动关闭的窗口关闭了它的所有衍生窗口?
- 20. 需要帮助我fancybox模式窗口中的关闭链接关闭它
- 21. 我想检测用户关闭浏览器窗口时?
- 22. 记住RadioButton的位置
- 23. JS关闭窗口
- 24. OAuth2窗口关闭
- 25. 关闭jsp窗口
- 26. 关闭GTK窗口
- 27. javafx关闭窗口
- 28. 关闭WPF窗口
- 29. 块窗口关闭
- 30. VBA - 关闭窗口
请看看[this](http://stackoverflow.com/questions/1538425/how-to-control-the-position-of-qdialog)问题。它看起来像标准的QT,而不是pyQT,但我想它会翻译。 – thegrinner 2012-07-05 20:37:49