Код: Выделить всё
import gi
gi.require_version("Gtk", "4.0")
from gi.repository import Gtk, Gio
app = Gtk.Application()
window = None
text_view = None
title = "Test"
def on_quit(action, _):
app.quit()
def on_save_file(action, _):
text_view.get_buffer().set_modified(False)
def create_action(target, name, handler):
action = Gio.SimpleAction(name=name)
action.connect("activate", handler)
target.add_action(action)
def add_actions(app, window):
create_action(app, "quit", on_quit)
create_action(window, "save_file", on_save_file)
def set_accels_for_actions(app):
app.set_accels_for_action("win.save_file", ["s"])
app.set_accels_for_action("app.quit", ["q"])
def on_modified_changed(buffer):
modified = buffer.get_modified()
print("Modified:", modified)
if modified:
window.set_title(f"{title}*")
else:
window.set_title(title)
def on_activate_app(app):
global window, text_view
window = Gtk.ApplicationWindow(application=app)
text_view = Gtk.TextView()
text_view.get_buffer().connect("modified_changed", on_modified_changed)
window.set_child(text_view)
window.present()
add_actions(app, window)
set_accels_for_actions(app)
app.connect("activate", on_activate_app)
app.run()
* Напишите «a».
* Удалите его с помощью «Backspace».
* Напишите «b».
* Нажмите «Ctrl-s» и сохраните. Это не настоящее сохранение, просто вызывается `buffer.set_modified(False)`. Вы можете следить за значением флага `modified` в консоли.
* Удалите его с помощью «Backspace».
* Напишите «c».
* Теперь он находится в измененном состоянии. Вы можете следить за этим из заголовка. Заголовок обновляется всякий раз, когда срабатывает сигнал `modified_changed`.
* Отмените дважды, нажав «Ctrl-z». Как и ожидалось, теперь он находится в чистом состоянии.
* Отмените еще раз, нажав «Ctrl-z». Я думаю, что ожидаемым будет снова грязное состояние. Но он в чистом виде!
Я что-то упускаю или это странно? Кстати, извините, если код беспорядок. Исходный код соответствует лучшим практикам, но этот проще.
Подробнее здесь: https://stackoverflow.com/questions/798 ... pplication
Мобильная версия