これは私がちょうど答えを開発したものです!!! (注:これはPyQt4形式で提供されます)
追加のパネルを表示および非表示にするときに、アプリウィンドウのサイズを変更する機能が必要でした。ただし、以前はUIやワークフローを再構成するだけで、ウィンドウのサイズを変更する必要がありませんでした。しかし今、それは必要な必需品です。
ウィンドウは、作成中にサイズを変更できます。ウィンドウのサイズを直接変更できます(例:self.resize(xSize、ySize))ただし、必要なサイズをキャプチャし、目的のセクションを非表示にし、サイズを再計算するコード行を作成すると、サイズ変更は次のようになります。まったく服用しないでください。
(例)
curHgt = self.size().height()
curWth = self.size().width()
myFrmHgt = self.ui.reviewFrm.size().height()
self.ui.reviewFrm.hide()
self.resize( curWth, (curHgt - myFrmHgt ) )
何もない。動作しません。なぜだめですか?
今日の答えの探求はまだ実行可能な答えを思い付かなかった。オプションにはいくつかの製品があります。ウィジェット階層をハントアップし、無効化、adjustSizeします。メインウィンドウのサイズを変更しようとすると機能しない、かなり徹底的なレイアウトの揺れ。制約をFixedSizeに設定するという圧倒的な反応もありました。しかし、それはむしろ全体の目的を打ち負かします。たとえば、ささくれがある場合は手首で手を切るように言います。
しかし、掘り下げてサイズ変更がうまくいかない理由は、サイズ変更をリセットする投稿済みイベントのキューが原因であることに気付いた人に出くわしました。
彼の解決策は、アプリケーションのサイズ変更を行う直前にQApplication.sendPostedEvents()を実行して、キューに入れられたイベントがウィンドウをリセットしないようにすることでした。はい、いいえ。はい、これが解決策です。もっときれいな方法があると思いますが、最初に洗ったペイントローラーのようにキューを実際に振り払う必要があります。
これが私が設定した簡単なスニペットで、これまでのところしっかりしているようです。
result = [ self.size().width(), self.size().height() ]
if self.ui.reviewFrm.isVisible():
result[1] -= self.ui.reviewFrm.size().height()
self.ui.reviewFrm.hide()
while self.size().height() > result[1]:
self.appy.sendPostedEvents()
self.resize( result[0], result[1] )
いいえ。それはきれいではありません。ただし、投稿されたイベントでウィンドウのサイズが変更される前に、ペイントローラーが2回振られるのを見ただけです。制約をロックしたり、親ウィジェットを振ったり、階層を上ってサイズのヒントを探したりする必要はありません。