とダイアログリサイズ:私はこのコードのサンプルを持ってPyQt4
import sys
from PyQt4.QtGui import (QApplication, QHBoxLayout, QVBoxLayout, QDialog,
QFrame, QPushButton, QComboBox)
class Form(QDialog):
def __init__(self, parent=None):
super(Form, self).__init__(parent)
moreButton = QPushButton('moreButton')
moreButton.setCheckable(True)
resizeButton = QPushButton('Resize')
combo = QComboBox()
combo.addItems(['item1', 'item2'])
layout1 = QHBoxLayout()
layout1.addWidget(moreButton)
layout1.addWidget(resizeButton)
layout2 = QHBoxLayout()
layout2.addWidget(combo)
self.frame = QFrame()
self.frame.setLayout(layout2)
self.frame.hide()
layout3 = QVBoxLayout()
layout3.addLayout(layout1)
layout3.addWidget(self.frame)
moreButton.toggled.connect(self.frame.setVisible)
moreButton.clicked.connect(self.method)
resizeButton.clicked.connect(self.method)
self.setLayout(layout3)
self.resize(630, 50)
def method(self):
if self.frame.isVisible():
self.resize(630, 150)
else:
self.resize(630, 250)
app = QApplication(sys.argv)
form = Form()
form.show()
app.exec_()
を私はそれを実行し、moreButtonは、コンボボックスをクリックしたときに表示されるか、消えます。ダイアログのサイズも変更されます。しかし、私は方法を変更した場合:
def method(self):
if self.frame.isVisible():
self.resize(630, 150)
else:
self.resize(630, 50)
サイズ変更がうまくいかない(コンボが隠されているときの初期サイズを設定するために)。しかし、同じメソッドに接続されているresizeButtonをクリックすると、サイズ変更が正しく機能します。
このような結果を得るための他の方法があることは知っています(layout.setSizeConstraint(QLayout.SetFixedSize)など)が、サイズを明示的に宣言したいと思います。
私は間違っていますか?
はい、これが原因かもしれません。この変更で正常に動作します。上記のように、 "layout3.setSizeConstraint(QLayout.SetNoConstraint)"でも動作します。後者は「より良い」ソリューションですか? – Ilias95
最後に私は、より複雑な状況(したがってより複雑なui)では、その答えだけがうまく動作することに気づいた。どうもありがとうございました! – Ilias95