2015-02-16 10 views
11

मुझे फ्लोबॉक्स में लेबल का एक सेट मिला है, समस्या यह है कि मैं इन लेबलों को सबसे अधिक 96px चौड़ा होना चाहता हूं। मैंने label.set_ellipsize (True) सेट किया है, लेकिन चूंकि फ्लोबॉक्स उन्हें उतना ही कमरा देता है जितना उन्हें पसंद है क्योंकि उन्हें इलिप्सिज्ड नहीं मिलता है, भले ही मैंने अपना आकार अनुरोध 96px चौड़ा कर दिया हो।पायथन जीटीके 3 सीमा लेबल चौड़ाई

problem example

मैं हर समारोह मैं मिल सकता है कि यहां तक ​​कि ऊपरी तौर सभी शामिल विगेट्स पर संबंधित लग रहा था की कोशिश की है, लेकिन कुछ भी काम करने के लिए लगता है।

मैंने पाया कि एकमात्र कामकाज set_min_children_per_line() का उपयोग कर रहा था, लेकिन इसके लिए फ्लोबॉक्स चौड़ाई से बच्चों की संख्या की गणना करने की आवश्यकता होती है जो प्रति पंक्ति बच्चों की संख्या पर निर्भर करता है, जिससे फ़्लोबॉक्स होता है जो वास्तव में व्यापक रूप से वास्तविक हो जाता है।

मुझे शायद कुछ स्पष्ट याद आ रही है, लेकिन मैं अब इस समस्या पर अपने सिर को झुका रहा हूं।

जब स्तंभों की राशि दो से विभाज्य नहीं है मैं इस testcase कि समस्या दर्शाती कर दिया है: तो यहाँ

from gi.repository import Gtk as gtk 
from gi.repository import Pango as pango 

class Widget(gtk.VBox): 
    def __init__(self,label): 
     gtk.VBox.__init__(self) 

     image=gtk.Image.new_from_icon_name("image-missing",gtk.IconSize.DIALOG) 
     image.set_size_request(96,96) 
     self.add(image) 

     lbl=gtk.Label(label) 
     self.add(lbl) 


class TestCase(gtk.Window): 
    def __init__(self): 
     gtk.Window.__init__(self) 
     lbl=gtk.Label("some text") 
     scrollbox=gtk.ScrolledWindow() 
     self.add(scrollbox) 
     flowbox=gtk.FlowBox() 
     scrollbox.add(flowbox) 
     for i in range(50): 
      w=Widget("longlabel"*5) 
      flowbox.add(w) 
      w=Widget("short") 
      flowbox.add(w) 

if __name__=="__main__": 
    w=TestCase() 
    w.connect("delete-event",gtk.main_quit) 
    w.show_all() 
    gtk.main() 
+1

क्या आपने ['Gtk.Label.set_max_width_chars (n_chars)'] (https://lazka.github.io/pgi-docs/Gtk-3.0/classes/Label.html#Gtk.Label.set_max_width_chars) की कोशिश की है? – elya5

+0

मैंने कोशिश की है। यह किसी चीज को नहीं बदलता है, और यह वही नहीं है जो मैं किसी भी मामले में चाहता हूं। मैं चौड़ाई को पिक्सल में सेट करना चाहता हूं ताकि यह आइकन के साथ मेल खा सके। – doxin

+1

क्या आप कुछ कोड प्रदान कर सकते हैं? शायद कुछ अन्य संपत्ति रास्ते में हो रही है (या तो डिफ़ॉल्ट रूप से या आपके द्वारा सेट किया गया है) ... GtkLabels के साथ खेलना हमेशा मजेदार xx – andlabs

उत्तर

5

एक समाधान (अब भी नहीं सटीक पिक्सेल चौड़ाई) आप जीटीके उपयोग कर सकते है। कोई क्षैतिज विस्तार बल देने के लिए Widget.set_halign।

यहाँ कोड का हिस्सा है:

lbl=gtk.Label(label) 
    lbl.set_max_width_chars(5) 
    lbl.set_ellipsize(pango.EllipsizeMode.END) 
    lbl.set_halign(gtk.Align.CENTER) 
    self.add(lbl) 

यह यह क्या लग रहा है की तरह है: screeshot of the window

मुझे आशा है कि मैं इस समय कुछ भी न था।

+0

संरेखण की कमी है। मैं बदले में विशेषताओं के साथ एक नया कार्यक्रम नहीं लिखूंगा।यह अभी भी पिक्सेल चौड़ाई नहीं है, इसलिए यह मेरी समस्या को ठीक से हल नहीं कर रहा है। – doxin

+1

को Gtk.Widget.set_halign पर अपडेट किया गया – elya5

3

आपके पास एक और विकल्प है: एक कस्टम GtkContainer कार्यान्वयन का उपयोग करें जो अपने बच्चों को सटीक पिक्सेल चौड़ाई तक सीमित करता है। Irc.gimp.net/#gtk+ पर एरिक पेरेज़ Castellanos के अनुसार, गनोम संपर्क एक है; here it is। यह वाला में है, लेकिन यह भी GtkWidget और GtkContainer (और GtkBin) semantics के कुछ पढ़ने के साथ-साथ अपने सिर को लपेटना मुश्किल नहीं होना चाहिए। दुर्भाग्यवश मुझे नहीं पता कि पाइथन में नए गोब्जेक्ट्स कैसे बनाएं, क्षमा करें।

यदि आप गनोम संपर्क में दृष्टिकोण का उपयोग करते हैं, तो कस्टम कंटेनर (जो जीटीकेबीन से प्राप्त होता है, एकल-बच्चे जीटीकेकॉन्टेनर्स की सुविधा) केवल आपके जीटीकेएलएबल को पकड़ लेगा, और आप इसे फ्लोबॉक्स आइटम के जीटीकेवीबॉक्स में जोड़ देंगे।

उम्मीद है कि मदद करता है।

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