Диалогов прозорец за запазване на файл на Python GTK, как мога да създам Close без запазване на ResponseType

понякога, когато се нуждаем от повече ResponseType за диалогови прозорци на нашите програми. например, когато потребителят затвори редактора на файлове, редакторът показва диалогов прозорец, за да получи потребителски избор: "отказ", "затваряне без запазване" "запазване" Но "запазване" и "затваряне без записване" не съществуват в Gtk.ResponseType, така че как може Създавам нов тип отговор за това. може ли този проблем да бъде решен по друг начин.

Благодаря.


person Nomad    schedule 30.11.2017    source източник


Отговори (1)


Gtk.ResponseType това е малък набор от предварително дефинирани стойности. Това са отрицателни стойности, докато положителните стойности (включително нула) са оставени за разработчиците на приложения, за да ги използват при необходимост. От документация:

Предварително дефинирани стойности за използване като идентификатори на отговор в Gtk.Dialog.add_button(). Всички предварително дефинирани стойности са отрицателни; GTK+ оставя стойности от 0 или по-големи за идентификатори на отговори, дефинирани от приложението.

Така че, когато добавяте бутони към диалоговия прозорец, вместо да използвате предварително дефинирания Gtk.ResponseType, можете да използвате свой собствен набор от стойности на отговора.

Нека вземем този пример от урок за python-gtk3 и добавете трета опция с нашата собствена стойност на типа отговор :

import gi
gi.require_version('Gtk', '3.0')
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, "OPTION 3", 1))

        self.set_default_size(150, 100)

        label = Gtk.Label("This is a dialog to display additional information")

        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_border_width(6)

        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")
        elif response == 1:
            print("OPTION 3 was clicked")

        dialog.destroy()

win = DialogWindow()
win.connect("delete-event", Gtk.main_quit)
win.show_all()
Gtk.main()

Какво беше направено?

Добавихме трети бутон с етикет ОПЦИЯ 3, който има стойност на идентификатора на отговора 1:

        Gtk.Dialog.__init__(self, "My Dialog", parent, 0,
            (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
             Gtk.STOCK_OK, Gtk.ResponseType.OK, "OPTION 3", 1))

След това, когато обработваме отговора, можем да проверим за тази стойност на идентификатора на отговора и да направим нещо различно:

        ...
            print("The Cancel button was clicked")
        elif response == 1:
            print("OPTION 3 was clicked")
        ...

Можете да създадете свой собствен изброен набор от стойности на положителен отговор и да ги използвате според нуждите (включително нула). Късмет.

РЕДАКТИРАНЕ:

В glade, когато използвате бутони, можете да зададете стойността на response_id като цяло число. Намира се в раздела с общи настройки на джаджата.

person José Fonte    schedule 01.12.2017
comment
@Nomad, добре дошъл. Подготвям отговор на другия ти въпрос. няколко минути... - person José Fonte; 01.12.2017