私はPyQt4プログラムをPyQt5に移植しています。その1つの部分はウィンドウを隠し、ウィンドウの背後にある領域のスクリーンショットを撮り、再びウィンドウを表示します。これはPyQt4でうまくいきました。PyQt5ポート:ウィンドウを隠して同じ位置に表示させる方法
私のPyQt5ポートではすべて正常に動作しますが、ウィンドウはプログラムの起動時の位置に表示され、hide()メソッドを呼び出す前の位置には表示されません。
これはLinuxのボックスでテストしています。まで、関連するコードストリップ:SHOWMEで
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_())
()、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に異なる振る舞い?
'hideMe'と' showMe'に 'self.pos()'を表示し、違いを見てください。 – furas
それはポイントです:違いはありません! –
@TobiasLeupold。どのLinuxディストリビューションを使用しているのか、またどのウィンドウマネージャーを使用しているのかを記述すると役に立ちます。 – ekhumoro