PyQT窗口:我想记住它关闭的位置

2024-09-29 02:22:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个QDialog,当用户关闭QDialog并稍后重新打开它时,我想记住它的位置并在完全相同的位置打开窗口。我怎么能准确地记得那个位置?在


Tags: 用户qdialog
3条回答

您可以重新实现对话框的CloseEvent(在Qt文档中找到here),并使用QSettings(docshere)保存适当的设置。在

class MyDialog(QDialog):
    def closeEvent(event):
        settings = QSettings()
        settings.setValue('value1', 1)
        event.accept()

罗南·佩克斯昂的回答几乎是正确的。 尝试此操作时出现错误:

AttributeError: 'NoneType' object has no attribute 'toByteArray'

这是因为,首先,没有保存的几何体和状态。另外,返回值已经是一个QByteArray。这个代码适用于我:

^{pr2}$

为此,您可以使用^{}^{}resize()和{}方法,以及其他答案中提到的closeEvent()和{a4}。下面是一些例子,让我们了解一下:

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 v2的答案。如果使用API v1,则必须手动将settings.value()的结果转换为类似于ByteArray的

^{pr2}$

我还使用了窗口自己的size()pos(),因为我已经从.ui文件加载窗口。如果从头开始对窗口进行编码,可以在这些行之前将其设置为默认值。对于状态,我默认为一个空字符串,该函数很乐意将其作为空ByteArray接受,并且在第一次运行时不执行任何操作。在

相关问题 更多 >