Когда я могу надежно запросить предпочтительный размер записи GTK4 приCSS

Разбираемся в CSS
Ответить
Anonymous
 Когда я могу надежно запросить предпочтительный размер записи GTK4 при

Сообщение Anonymous »

У меня есть следующий код PyGObject в качестве MWE:

Код: Выделить всё

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()
где я использую GTK4, чтобы добавить виджет «Ввод», а затем, при нажатии кнопки, изменить размер его шрифта. Проблема в том, что мне нужно знать, когда предпочтительный размер записи будет обновлен, и быть точным, чтобы я мог его использовать.
Вот почему нам нужно это сделать:
В коде, над которым я работаю, у нас есть собственный LayoutManager, поэтому мы должны знать предпочтительный размер виджета сразу (или через некоторое время, но нам нужно знать когда) после того, как я применю поставщика стилей Gtk. Затем мне нужно узнать предпочтительную высоту виджета или время его готовности и обновления.
Я пробовал использовать GLib.idle_add, иногда это работает, но иногда нет (он печатает 34, хотя должно быть 45). Я также попытался поставить в очередь изменение размера, как показано в коде. Когда после применения CSS к виджету «Ввод» я смогу узнать его новую обновленную предпочтительную высоту?

Подробнее здесь: https://stackoverflow.com/questions/797 ... entry-upon
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «CSS»