Отмена не выдает сигнал notified_changed в приложении GTK/Python.Python

Программы на Python
Ответить
Anonymous
 Отмена не выдает сигнал notified_changed в приложении GTK/Python.

Сообщение Anonymous »

Я пытаюсь разработать приложение PyGObject, но наблюдаю странное поведение. Я создал демо-версию, чтобы вы могли ее воспроизвести. Это код:

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

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()
Вы можете выйти из приложения, используя «Ctrl+q», и сохранить содержимое, нажав «Ctrl+s». Просто сделайте это:
* Напишите «a».
* Удалите его с помощью «Backspace».
* Напишите «b».
* Нажмите «Ctrl-s» и сохраните. Это не настоящее сохранение, просто вызывается `buffer.set_modified(False)`. Вы можете следить за значением флага `modified` в консоли.
* Удалите его с помощью «Backspace».
* Напишите «c».
* Теперь он находится в измененном состоянии. Вы можете следить за этим из заголовка. Заголовок обновляется всякий раз, когда срабатывает сигнал `modified_changed`.
* Отмените дважды, нажав «Ctrl-z». Как и ожидалось, теперь он находится в чистом состоянии.
* Отмените еще раз, нажав «Ctrl-z». Я думаю, что ожидаемым будет снова грязное состояние. Но он в чистом виде!
Я что-то упускаю или это странно? Кстати, извините, если код беспорядок. Исходный код соответствует лучшим практикам, но этот проще.

Подробнее здесь: https://stackoverflow.com/questions/798 ... pplication
Ответить

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

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

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

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

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