2012-08-31 20 views
5

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

किसी कारण से, मुझे यह नहीं पता कि जीटीके को ऐसा होने की अनुमति देने के लिए क्या लगता है। मैं संवाद पर अधिकतम चौड़ाई निर्धारित करने का एक तरीका भी नहीं ढूंढ सकता, जो बहुत अच्छा होगा।

यहाँ मैं क्या मतलब है की एक चल उदाहरण है:

#!/usr/bin/env python 
#-*- coding:utf-8 -*- 

from gi.repository import Gtk 

class DialogExample(Gtk.Dialog): 

    def __init__(self, parent): 
     Gtk.Dialog.__init__(self, "My Dialog", parent, 0, 
      (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL, 
      Gtk.STOCK_OK, Gtk.ResponseType.OK)) 

     self.set_default_size(150, 100) 
     self.set_resizable(False) 

     label = Gtk.Label("This is a dialog to display additional information, with a bunch of text in it just to make sure it will wrap enough for demonstration purposes") 
     label.set_line_wrap(True) 

     box = self.get_content_area() 
     box.add(label) 
     self.show_all() 

class DialogWindow(Gtk.Window): 

    def __init__(self): 
     Gtk.Window.__init__(self, title="Dialog Example") 

     self.set_default_size(250, 200) 


     button = Gtk.Button("Open dialog") 
     button.connect("clicked", self.on_button_clicked) 

     self.add(button) 

    def on_button_clicked(self, widget): 
     dialog = DialogExample(self) 
     response = dialog.run() 

     if response == Gtk.ResponseType.OK: 
      print "The OK button was clicked" 
     elif response == Gtk.ResponseType.CANCEL: 
      print "The Cancel button was clicked" 

     dialog.destroy() 

win = DialogWindow() 
win.connect("delete-event", Gtk.main_quit) 
win.show_all() 
Gtk.main() 

उत्तर

5

मैं इस हल एक Gtk.Table अंदर Gtk.Label डाल, भरण का उपयोग कर (सही पर लाइन रैप की स्थापना के अलावा) और झंडे सिकुड़ लेबल के लिए एक निश्चित चौड़ाई निर्धारित करना। कुछ इस तरह:

label = Gtk.Label("This is a dialog to display additional information, with a bunch of text in it just to make sure it will wrap enough for demonstration purposes") 
label.set_line_wrap(True) 
label.set_size_request(250, -1) # 250 or whatever width you want. -1 to keep height automatic 

table = Gtk.Table(1, 1, False) 
table.attach(label, 0, 1, 0, 1, Gtk.AttachOptions.SHRINK | Gtk.AttachOptions.FILL) 

यही चाल

+0

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

+0

hi @satanas - आप किसी भी मौके का वर्णन कर सकते हैं कि आप कैसे "माता-पिता के लिए पसंदीदा चौड़ाई निर्धारित करते हैं और एक शो करते हैं"? मुझे एक ही समस्या है; gtk.Table विकल्प v3.4 के बाद से बहिष्कृत है इसलिए मैं एक गैर-बहिष्कृत समाधान की तलाश में हूं। TIA – fossfreedom

0

करना चाहिए 2.6 के बाद से आप का उपयोग कर सकते हैं: label.set_max_width_chars(50)

यह इस समय मूल्यह्रास हुआ नहीं है। :)

यहाँ देखें: https://developer.gnome.org/Labels/

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