2012-01-08 7 views
5

पर एक QMainWindow को प्रोग्रामेटिक रूप से आकार देने के लिए कैसे करें जब मेरे पास माउस के साथ आकार बदलते समय एक ग्रिड लेआउट के साथ QMainWindow है, तो यह ठीक से दिखाने के लिए सभी नियंत्रणों के लिए आवश्यक न्यूनतम आकार से नीचे नहीं जायेगा । मेरे ऐप में मैं कभी-कभी प्रोग्रामिक रूप से नियंत्रण छुपाता हूं, लेकिन तब खिड़की एक ही आकार में बनी हुई है और शेष नियंत्रण उनके बीच बहुत अधिक जगह के साथ फैलता है। मैं मैन्युअल रूप से संवाद का आकार बदलता हूं इसलिए यह बदसूरत नहीं दिखता है।अपने न्यूनतम आकार

क्या मैं प्रोग्रामिंग रूप से डायलॉगिक वर्टिकल साइज को न्यूनतम रूप से सेट कर सकता हूं, जब मैं इसमें छिपे हुए नियंत्रण के बाद मैन्युअल रूप से आकार बदलता हूं?

+0

+1 मैं भी इस से निराश हूँ। –

+0

बस इसे समझ लिया, नीचे मेरा जवाब देखें। – sashoalm

उत्तर

0

यह (यह केवल ऊंचाई का आकार बदलता है) कोड चाल करना होगा:

QWidget widget; 
    widget.resize(widget.width(), widget.minimumHeight()); 
+0

यह 'widget.resize (widget.width(), 1) से अलग कैसे है? और 0 और 1 के बीच कोई अंतर है? (मैं एक नौसिखिया हूँ, जैसा कि आप स्पष्ट रूप से बता सकते हैं।) –

+0

क्या आपका मतलब है कि widget.minimumHeight() 0 देता है? मैंने माना था कि यह सभी नियंत्रणों के लिए आवश्यक न्यूनतम आकार देता है, लेकिन मैंने फ़ंक्शन द्वारा लौटाए गए वास्तविक मूल्य की जांच नहीं की है। – sashoalm

+0

यह सहायक था, उसमें, डॉक विजेट्स का उपयोग करते समय, कोई शीर्ष/नीचे डॉक विजेट की ऊंचाई प्राप्त कर सकता है और उसके बाद मेनविंडो का न्यूनतम आकार इसकी वर्तमान ऊंचाई पर सेट कर सकता है जो डॉक विजेट की ऊंचाई से कम हो सकता है जिसे आप छिपाना चाहते हैं। – guitarpicva

1

QLayout::SizeConstraint, QWidget::minimumSizeHint, QWidget::minimumSize के बीच पदानुक्रम है, और आप इसे दस्तावेज़ में ढूंढ सकते हैं।

  • QWidget::minimumSize डिफ़ॉल्ट रूप से सेट नहीं है। जब यह होता है, तो यह QWidget::minimumSizeHint
  • QWidget::minimumSizeHint अमान्य है अगर विजेट लेआउट में नहीं है (जिसका अर्थ है कि इसे माउस के साथ 0 में बदला जा सकता है), अन्यथा लेआउट द्वारा परिभाषित एक का उपयोग करें।
  • QLayout::SizeConstraint विजेट * का डिफ़ॉल्ट लेआउट व्यवहार * सीधे * प्रबंधित करता है। यदि आप एक लेआउट A लेआउट B के भीतर घूमते हैं, तो A में जोड़े गए सभी विजेट इसकी संपत्ति का उपयोग करेंगे। इसके अलावा में W विजेट अपने स्वयं के लेआउट को परिभाषित करता है, तो यह लेआउट बाधा विजेट W विजेट के लिए लागू की जाने वाली है।

यह जानकर, इन चरणों का पालन करें। यह काम करते हैं, मैं कोशिश कर सकते हैं नहीं किया :):

  • सभी विजेट आपके द्वारा उपयोग की न्यूनतम आकार निर्धारित करें।
  • सुनिश्चित करें कि आपके सभी लेआउट का आकार बाधा QLayout::SetDefaultConstraint पर सेट है।
2

मैंने पाया कि QMainWindow में centralWidget आकार बदलने तो आकार बदलने QMainWindow ही काम कर देता है है। दूसरे शब्दों में:

from PyQt4 import QtGui 
class MyMainWindow(QtGui.QMainWindow): 
    def __init__(self): 
     # define some widgets and stuff 
    def whenWidgetsAreHidden(self): 
     # this method should be triggered when you hide your widgets 
     self.centralWidget.adjustSize() 
     self.adjustSize() 

ध्यान दें कि QMainWindowLayout में अन्य विजेट हैं। Qt Documentation से इस छवि के अनुसार, डॉक विजेट और अन्य सामान भी मौजूद हो सकते हैं। मैं केवल centralWidget का उपयोग करता हूं, इसलिए यह समाधान मेरे लिए काम करता है।

QMainWindow Layout

संबंधित मुद्दे