Как разрешить один щелчок мыши в Gtk.FileChooserDialog? - PullRequest
0 голосов
/ 18 февраля 2020

Ниже приведен упрощенный пример кода для виджета Gtk.FileChooserDialog, который я адаптировал из документации Gtk . Чтобы выбрать файл или папку или активировать любой в этом виджете, в настоящее время я должен навести указатель мыши на элемент и дважды щелкнуть по нему. Вместо этого я хотел бы использовать один щелчок мыши для выбора и активации. Как мне настроить это для этого виджета?

import gi
gi.require_version('Gtk', '3.0')
from gi.repository import Gtk

class FileChooserWindow(Gtk.Window):

    def __init__(self):
        Gtk.Window.__init__(self, title="FileChooser Example")

        box = Gtk.Box(spacing=6)
        self.add(box)

        button1 = Gtk.Button("Choose File")
        button1.connect("clicked", self.on_file_clicked)
        box.add(button1)

    def on_file_clicked(self, widget):
        dialog = Gtk.FileChooserDialog("Please choose a file", self,
            Gtk.FileChooserAction.OPEN,
            (Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,
             Gtk.STOCK_OPEN, Gtk.ResponseType.OK))

        response = dialog.run()
        if response == Gtk.ResponseType.OK:
            print("Open clicked")
            print("File selected: " + dialog.get_filename())
        elif response == Gtk.ResponseType.CANCEL:
            print("Cancel clicked")

        dialog.destroy()


win = FileChooserWindow()
win.connect("destroy", Gtk.main_quit)
win.show_all()
Gtk.main()

1 Ответ

0 голосов
/ 19 февраля 2020

Вы можете использовать сигнал "selection-changed" следующим образом:

def selection_changed (filechooser, udata):
    print ("selected ", filechooser.get_filename()) # GtkFileChooser method
    if True:                                        # some selection checking
        filechooser.response(Gtk.ResponseType.OK)   # GtkDialog method

dialog = Gtk.FileChooserDialog(...)
dialog.connect ("selection-changed", selection_changed, None)
response = dialog.run()
if response == Gtk.ResponseType.OK:
    pass
elif response == Gtk.ResponseType.CANCEL:
    pass
dialog.destroy()

Но этот сигнал испускается каждый раз, когда пользователь взаимодействует с filechooser, даже когда пользователь меняет папку с помощью кнопок breadcrumb , Вам решать, будет ли пора ответить «ОК», «Отмена» или вообще не отвечать.

Кроме того, пользователь может быть сбит с толку, что диалоговое окно, требующее нажатия Ok или Enter буквально любое другое приложение ведет себя иначе в вашем приложении.

...