gpt4 book ai didi

python - PyQt4 : Window shows up at another position after hide() and show()

转载 作者:太空狗 更新时间:2023-10-30 00:15:08 24 4
gpt4 key购买 nike

使用 PyQt4,当我隐藏一个窗口然后显示它时,它出现在另一个位置(至少在 Linux 上是这样)。示例代码:

#!/usr/bin/python3

from PyQt4.QtGui import *

app = QApplication([])
widget = QWidget()
widget.setLayout(QVBoxLayout())
label = QLabel()
widget.layout().addWidget(label)

def hideShow():
widget.hide()
widget.show()

widget.layout().addWidget(QPushButton('Hide/Show', clicked = hideShow))
widget.show()
app.exec_()

窗口消失并出现,但在原始位置的下方和右侧。我认为它被实际小部件周围的窗口管理器框架的大小所取代。

如何将窗口放置在它原来的确切位置?为什么它会移动?它不应该留在原处吗?

最佳答案

在 Linux 上,窗口放置可能非常难以预测。参见 this section在 Qt 文档中对问题进行了分割。

这个问题可能没有通用的解决方案,但对我来说,在初始 show() 之前设置几何结构似乎可行:

...
widget.setGeometry(200, 200, 100, 50)
widget.show()
app.exec_()

更新

在使用 KDE 窗口管理器进行一些测试后,我可能发现了一个潜在的解决方案。

似乎在 hide() 之后立即调用 show() 并没有给窗口管理器足够的时间来计算正确的窗口位置。因此,一个简单的解决方法是在一小段延迟后显式设置几何:

from PyQt4.QtGui import *
from PyQt4.QtCore import QTimer

app = QApplication([])
widget = QWidget()
widget.setLayout(QVBoxLayout())
label = QLabel()
widget.layout().addWidget(label)

def hideShow():
widget.hide()
QTimer.singleShot(25, showWidget)

def showWidget():
widget.setGeometry(widget.geometry())
widget.show()

widget.layout().addWidget(QPushButton('Hide/Show', clicked = hideShow))
widget.show()
app.exec_()

这适用于我使用 KDE-4.8 和 OpenBox,当然还有 YMMV。

关于python - PyQt4 : Window shows up at another position after hide() and show(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13462119/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com