2012-01-09 12 views
6

क्यूटी में मेरे पास एक समग्र विजेट है जिसमें QBoxLayouts के अंदर व्यवस्थित कई QLabels शामिल हैं। जब विजेट का आकार बदलता है, तो मैं लेबल टेक्स्ट को लेबल क्षेत्र को भरने के लिए स्केल करना चाहता हूं और मैंने resizeEvent में टेक्स्ट का आकार बदलना लागू कर दिया है।क्यूटी में स्वचालित रूप से लेबल टेक्स्ट का आकार बदलना - अजीब व्यवहार

यह काम करता है लेकिन कुछ प्रकार के फीडबैक लूप होने लगते हैं। संयुक्त विजेट को किसी अन्य विजेट के साथ QBoxLayout के अंदर एक मुख्य विंडो में रखा गया है। जब मुख्य विंडो छोटी हो जाती है, तो समग्र विजेट प्रारंभ में अपना आकार बनाए रखता है और फिर कई चरणों (लगभग 10-15) में सही आकार की ओर आकार बदलता है। यदि टेक्स्ट ऊंचाई लेबल की ऊंचाई के लगभग 0.8 गुना से अधिक सेट हो जाती है तो पाठ का आकार बदलने पर और विजेट प्रत्येक चरण के साथ बड़ा हो जाता है जब तक कि ऐप क्रैश न हो जाए।

क्या यह इस प्रभाव को प्राप्त करने के लिए सही दृष्टिकोण है? यदि हां, तो आकार बदलने के साथ समस्या क्या हो सकती है?

नीचे resizeEvent कोड है।

def resizeEvent(self, evt): 
     print("resizeEvent", evt.size().width(), evt.size().height()) 
     QFrame.resizeEvent(self, evt) 

     dataLabels = self.dataPanels.values() 

     for label in dataLabels:    
      font = label.font() 
      h = label.height() 
      h2 = h * 0.8 
      font.setPixelSize(h2) 
      label.setFont(font) 

(PyQt4 4.8, क्यूटी 4.7.4, 7 विन & OSX 10.6 का प्रयोग करके)

उत्तर

6

मैं इस समस्या SizePolicy की वजह से आकार बदलना साथ लगता है। label की आकार नीति को Ignored पर सेट करने का प्रयास करें, इसे मदद करनी चाहिए।

label.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) 

यह सही दृष्टिकोण इस प्रभाव को प्राप्त करने के लिए है?

शायद हां, दस्तावेज़ीकरण में त्वरित खोज ने कोई बेहतर समाधान नहीं दिया। लेकिन मैं QLabel के उप-वर्ग का निर्माण करूंगा, और नीति सेटअप और आकार बदल सकता हूं। उदाहरण:

class StretchedLabel(QLabel): 
    def __init__(self, *args, **kwargs): 
     QLabel.__init__(self, *args, **kwargs) 
     self.setSizePolicy(QSizePolicy.Ignored, QSizePolicy.Ignored) 

    def resizeEvent(self, evt): 
     font = self.font() 
     font.setPixelSize(self.height() * 0.8) 
     self.setFont(font) 

यदि आपको न केवल ऊंचाई से टेक्स्ट फिट करने की आवश्यकता है, लेकिन चौड़ाई से भी, कुछ अतिरिक्त कोड आवश्यक है।

+0

आकार नीति सेट करने से समस्या ठीक हो गई, धन्यवाद। – glennr

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