mam tej próbki kodu:zmiany rozmiaru okna dialogowego z 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_()
go uruchomić, a kiedy moreButton kliknięciu ComboBox pojawia się lub znika. Zmienia się również rozmiar okna dialogowego. Ale jeśli zmienię metodę na:
def method(self):
if self.frame.isVisible():
self.resize(630, 150)
else:
self.resize(630, 50)
(w celu ustawienia początkowego rozmiaru, gdy kombinacja jest ukryta) zmiana rozmiaru nie działa. Jeśli jednak kliknę przycisk resizeButton - który jest podłączony do tej samej metody - zmiana rozmiaru działa poprawnie.
Wiem, że istnieją inne sposoby osiągnięcia takiego wyniku (np. Layout.setSizeConstraint (QLayout.SetFixedSize)), ale chcę zadeklarować rozmiar jawnie.
Co robię źle?
tak, to może być powód. działa poprawnie z tą zmianą. działa również z "layout3.setSizeConstraint (QLayout.SetNoConstraint)", jak wspomniano powyżej. Czy to drugie jest "lepszym" rozwiązaniem? – Ilias95
W końcu zauważyłem, że w bardziej skomplikowanych sytuacjach (dlatego bardziej skomplikowanym ui) tylko ta odpowiedź działa dobrze. Dziękuję Ci bardzo! – Ilias95