2012-04-10 12 views
28

क्यूटी में विजेट्स को शीर्ष पर लंबवत रूप से संरेखित कैसे करें, जब मैं अपने लेआउट में विजेट जोड़ता हूं, तो वे डिफ़ॉल्ट रूप से लंबवत केंद्रित होते हैं। विजेट को लंबवत रूप से केंद्रित करने के बजाय विजेट को "नीचे सूचीबद्ध" करने का कोई तरीका है?क्यूवीबॉक्स लयआउट: केंद्र

उत्तर

28

अपनी पसंद के अनुसार संरेखण सेट करने के लिए void QLayout::setAlignment (Qt::Alignment alignment) विधि का उपयोग करें।

14

मुझे यह layout.setAlignment() का उपयोग करने से थोड़ा अधिक जटिल लगता है। यह अभी तक मेरे लिए काम नहीं कर रहा है, जब मुझे पता चला कि यदि आप विजेट्स का विस्तार कर रहे हैं, तो आप अधिकतम ऊंचाई निर्धारित करते हैं, तो उस विजेट को आपके इच्छित तरीके से गठबंधन नहीं किया जाएगा।

यहाँ उदाहरण कोड नहीं शीर्ष संरेखित QTextBrowser() विजेट भले ही मैं layout.setAlignment(Qt.AlignTop) फोन करता है। क्षमा करें कि यह पायथन में है, लेकिन सी ++ में अनुवाद करना बहुत आसान है (मैं कई बार दूसरी बार चला गया हूं)।

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

class MyWidget(QWidget): 
    """ 
    Create a widget that aligns its contents to the top. 
    """ 

    def __init__(self, parent=None): 

     QWidget.__init__(self, parent) 

     layout = QVBoxLayout() 

     label = QLabel('label:') 
     layout.addWidget(label) 

     info = QTextBrowser(self) 
     info.setMinimumHeight(100) 
     info.setMaximumHeight(200) 
     layout.addWidget(info)   
     # Uncomment the next line to get this to align top. 
#   layout.setAlignment(info, Qt.AlignTop) 

     # Create a progress bar layout. 
     button = QPushButton('Button 1')   
     layout.addWidget(button)   

     # This will align all the widgets to the top except 
     # for the QTextBrowser() since it has a maximum size set. 
     layout.setAlignment(Qt.AlignTop) 

     self.setLayout(layout) 


if __name__ == '__main__': 

    import sys 

    app = QApplication(sys.argv) 

    widget = MyWidget() 
    widget.show() 
    widget.resize(QSize(900, 400)) 

    app.exec_() 

निम्नलिखित स्पष्ट layout.setAlignment(info, Qt.AlignTop) कॉल खर्च पाठ विजेट काम करने के लिए मिलता है। कई विजेट alignement के लिए

myLayout.setAlignment(Qt.AlignTop) 

काम करता है लेकिन:

myLayout.setAlignment(myWidget, Qt.AlignTop) 

काम करता है केवल पहले विजेट के लिए आप लेआउट में जोड़ने

from PyQt4.QtCore import * 
from PyQt4.QtGui import * 

class MyWidget(QWidget): 
    """ 
    Create a widget that aligns its contents to the top. 
    """ 

    def __init__(self, parent=None): 

     QWidget.__init__(self, parent) 

     layout = QVBoxLayout() 

     label = QLabel('label:') 
     layout.addWidget(label) 

     info = QTextBrowser(self) 
     info.setMinimumHeight(100) 
     info.setMaximumHeight(200) 
     layout.addWidget(info)   
     # Uncomment the next line to get this to align top. 
     layout.setAlignment(info, Qt.AlignTop) 

     # Create a progress bar layout. 
     button = QPushButton('Button 1')   
     layout.addWidget(button)   

     # This will align all the widgets to the top except 
     # for the QTextBrowser() since it has a maximum size set. 
     layout.setAlignment(Qt.AlignTop) 

     self.setLayout(layout) 


if __name__ == '__main__': 

    import sys 

    app = QApplication(sys.argv) 

    widget = MyWidget() 
    widget.show() 
    widget.resize(QSize(900, 400)) 

    app.exec_() 
+0

इसने मेरी समस्या भी हल की। मुझे सच में यकीन नहीं है * क्यों * किसी को न्यूनतम चौड़ाई/ऊंचाई निर्धारित करने की आवश्यकता है। क्या आप शायद उस पर विस्तार कर सकते हैं? – Seth

4

दो समाधान के बीच तुलना करने के बाद, ऐसा लगता है कि । आखिरकार, समाधान आपके विगेट्स के QSizePolicy पर भी निर्भर करता है।

4

आप एक QVBoxLayout है और अपने निश्चित आकार विजेट शीर्ष पर खड़ी होना चाहते हैं, तो आप बस एक ऊर्ध्वाधर खिंचाव अंत जोड़ने संलग्न कर सकते हैं:

layout.addStretch() 

आप एक से अधिक स्ट्रेचर या अन्य खिंचाव आइटम नहीं हैं, तो आप एक पूर्णांक खिंचाव कारक तर्क निर्दिष्ट कर सकते हैं जो उनके आकार अनुपात को परिभाषित करता है।

addStretch और addSpacerItem देखें।

यह सुनिश्चित नहीं है कि यह आपके मूल प्रश्न का उत्तर दे रहा है, लेकिन यह उस समय का उत्तर है जब मेरे पास गुगल हो रहा था और इस पृष्ठ का नेतृत्व किया जा रहा था - इसलिए यह दूसरों के लिए भी उपयोगी हो सकता है।

+0

क्या एक पोस्ट में 500 अंगूठे जोड़ने का कोई तरीका है? – Acidic

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