python-PyQt5端口:如何隐藏窗口并使其出现在相同位置
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-PyQt5端口:如何隐藏窗口并使其出现在相同位置,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2722字,纯文字阅读大概需要4分钟。
内容图文
![python-PyQt5端口:如何隐藏窗口并使其出现在相同位置](/upload/InfoBanner/zyjiaocheng/666/ff276bdcd4794520941a95e2f078f863.jpg)
我正在将PyQt4程序移植到PyQt5.其中一部分是隐藏窗口,对窗口后面的区域进行截图,然后再次显示该窗口,这在PyQt4上效果很好.
使用我的PyQt5端口,一切正常,但是窗口显示在程序启动时的位置,而不是调用hide()方法之前的位置.
我正在Linux盒子上对此进行测试.相关代码简化为:
import sys
from PyQt5.QtCore import QTimer
from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget,
QGridLayout, QPushButton)
class demo(QMainWindow):
def __init__(self):
super().__init__()
mainWidget = QWidget(self)
layout = QGridLayout(mainWidget)
self.setCentralWidget(mainWidget)
self.testButton = QPushButton(self)
self.testButton.setText('Test')
self.testButton.clicked.connect(self.hideMe)
layout.addWidget(self.testButton, 0, 0)
def hideMe(self):
self.hide()
QTimer.singleShot(300, self.showMe)
def showMe(self):
self.show()
self.move(self.pos())
app = QApplication(sys.argv)
mainWindow = demo()
mainWindow.show()
sys.exit(app.exec_())
在showMe()中,self.pos()实际上包含正确的坐标,但是窗口没有移到那里(而是在开始后立即移到它的“原始”位置).
当我e. G.做一个self.move(10,10)代替,窗口实际上被移动到那里.但是,一旦我使用了变量(我也尝试将self.pos的x和y保存在变量中,并改为使用它),窗口就会显示在启动后的位置.
为什么带有整数的move()调用实际上会移动窗口,而带有变量的move()调用却不会移动窗口?如何将窗口移到隐藏之前的位置?
感谢您的帮助!
编辑(也许找出有什么区别):
使用PyQt4的代码完全相同:
import sys
from PyQt4.QtCore import QTimer
from PyQt4.QtGui import (QApplication, QMainWindow, QWidget,
QGridLayout, QPushButton)
class demo(QMainWindow):
def __init__(self):
super().__init__()
mainWidget = QWidget(self)
layout = QGridLayout(mainWidget)
self.setCentralWidget(mainWidget)
self.testButton = QPushButton(self)
self.testButton.setText('Test')
self.testButton.clicked.connect(self.hideMe)
layout.addWidget(self.testButton, 0, 0)
def hideMe(self):
self.hide()
QTimer.singleShot(300, self.showMe)
def showMe(self):
self.show()
self.move(self.pos())
app = QApplication(sys.argv)
mainWindow = demo()
mainWindow.show()
sys.exit(app.exec_())
那么为什么在这种情况下Qt5的行为不同于Qt4?
解决方法:
似乎在Qt5中,如果几何形状完全相同,则不会重新设置-但是我不知道为什么这种行为已更改,或者它是否是错误.并请注意,受影响的不仅仅是位置-调整大小也会被忽略.
这是解决该问题的一种方法:
from PyQt5.QtCore import QMargins
class demo(QMainWindow):
...
def hideMe(self):
print('hide:', self.geometry())
self.hide()
QTimer.singleShot(300, self.showMe)
def showMe(self):
print('show1:', self.geometry())
hack = QMargins(0, 0, 0, 1)
self.setGeometry(self.geometry() + hack)
self.show()
self.setGeometry(self.geometry() - hack)
print('show2:', self.geometry())
更新:
经过进一步的调查,似乎有一个更简单的解决方案.如果在首次显示窗口之前明确设置了窗口的几何形状,则在随后的hide()/ show()之后,它将不会移回到其原始位置.在这种情况下,不需要其他技巧/解决方法.
内容总结
以上是互联网集市为您收集整理的python-PyQt5端口:如何隐藏窗口并使其出现在相同位置全部内容,希望文章能够帮你解决python-PyQt5端口:如何隐藏窗口并使其出现在相同位置所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。