के साथ एक संवाद का आकार बदलने मैं कोड के इस नमूना है: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 क्लिक किया ComboBox दिखाई देता है या गायब हो जाता है। संवाद का आकार भी बदलता है। लेकिन अगर मैं इस विधि को बदलता हूं:
def method(self):
if self.frame.isVisible():
self.resize(630, 150)
else:
self.resize(630, 50)
(कॉम्बो छुपाए जाने पर प्रारंभिक आकार सेट करने के लिए) आकार बदलना काम नहीं करता है। हालांकि, अगर मैं आकार बदलने पर क्लिक करता हूं बटन - जो एक ही विधि से जुड़ा हुआ है- आकार बदलना ठीक से काम करता है।
मुझे पता है कि इस तरह के परिणाम प्राप्त करने के अन्य तरीके हैं (उदाहरण के लिए लेआउट.सेट साइज़ कॉन्स्ट्रेन (QLayout.SetFixedSize)), लेकिन मैं आकार स्पष्ट रूप से घोषित करना चाहता हूं।
मैं क्या गलत कर रहा हूं?
हां, यह कारण हो सकता है। यह इस परिवर्तन के साथ ठीक से काम करता है। यह ऊपर वर्णित अनुसार "layout3.setSizeConstraint (QLayout.SetNoConstraint)" के साथ भी काम करता है। क्या उत्तरार्द्ध एक "बेहतर" समाधान है? – Ilias95
अंततः मैंने देखा कि अधिक जटिल परिस्थितियों में (इसलिए अधिक जटिल ui) केवल यही जवाब ठीक काम करता है। आपका बहुत बहुत धन्यवाद! – Ilias95