Код: Выделить всё
import gi
gi.require_version("Gtk", "4.0")
from gi.repository import Gtk, GLib
class FontSizeApp(Gtk.Application):
def __init__(self):
super().__init__(application_id="com.example.FontSizeApp")
def do_activate(self):
window = Gtk.ApplicationWindow(application=app)
window.set_title("Font Size Experiment")
window.set_default_size(400, 100)
vbox = Gtk.Box(orientation=Gtk.Orientation.VERTICAL, spacing=6, margin_top=20, margin_bottom=20, margin_start=20, margin_end=20)
window.set_child(vbox)
button = Gtk.Button(label="Enlarge Text")
vbox.append(button)
self.entry = Gtk.Entry()
self.entry.set_name("entry1")
vbox.append(self.entry)
# Connect button signal
button.connect("clicked", self.on_button_clicked)
window.present()
def on_button_clicked(self, button):
css = """
#entry1 {
font-size: 30pt;
}
"""
style_provider = Gtk.CssProvider()
style_provider.load_from_data(css.encode())
Gtk.StyleContext.add_provider_for_display(
Gdk.Display.get_default(),
style_provider,
Gtk.STYLE_PROVIDER_PRIORITY_APPLICATION
)
# Tried the following but does not work
# self.entry.queue_resize()
# GLib.idle_add below works intermittently
GLib.idle_add(self._print)
def _print(self):
min_size, nat_size = self.entry.get_preferred_size()
print(f"Preferred height: {nat_size.height}")
if __name__ == "__main__":
from gi.repository import Gdk
app = FontSizeApp()
app.run()
Вот почему нам нужно это сделать:
В коде, над которым я работаю, у нас есть собственный LayoutManager, поэтому мы должны знать предпочтительный размер виджета сразу (или через некоторое время, но нам нужно знать когда) после того, как я применю поставщика стилей Gtk. Затем мне нужно узнать предпочтительную высоту виджета или время его готовности и обновления.
Я пробовал использовать GLib.idle_add, иногда это работает, но иногда нет (он печатает 34, хотя должно быть 45). Я также попытался поставить в очередь изменение размера, как показано в коде. Когда после применения CSS к виджету «Ввод» я смогу узнать его новую обновленную предпочтительную высоту?
Подробнее здесь: https://stackoverflow.com/questions/797 ... entry-upon
Мобильная версия