Sto tentando di creare una finestra di dialogo non ridimensionabile con un'etichetta al suo interno. Questa etichetta ha un sacco di testo, quindi lo voglio a wrap senza rendere la finestra di dialogo ridicolmente ampia.GTK Avvolgimento etichetta in una finestra di dialogo
Per qualche motivo, non riesco a scoprire cosa è necessario per far sì che GTK permetta che ciò accada. Non riesco nemmeno a trovare un modo per impostare una larghezza massima nella finestra di dialogo, il che sarebbe fantastico.
Ecco un esempio di esecuzione di quello che voglio dire:
#!/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()
Scavando un po 'ho capito qual è il problema. Quando crei la finestra/finestra di dialogo e questo non è stato mostrato dalla prima volta che l'etichetta non avrà un riferimento alle dimensioni genitore, quindi Gtk assegna più spazio possibile all'etichetta e quindi imposta la larghezza genitore, risultando in un enorme finestra. Per evitare questo comportamento, impostare la larghezza preferita per il genitore e fare uno spettacolo, in questo modo Gtk calcola la geometria dei genitori e l'etichetta avrà un riferimento reale della dimensione del genitore. L'ho fatto in questo modo e ora tutto funziona come un fascino. – satanas
hi @satanas: hai qualche possibilità di descrivere un po 'più in dettaglio come "imposta la larghezza preferita per il genitore e fai uno spettacolo"? Ho lo stesso problema; l'opzione Gtk.Table è deprecata dalla v3.4, quindi sto cercando una soluzione non deprecata. TIA – fossfreedom