/ закончились блоки, не могу понять, почему [дубликат]

Если вам действительно не нужна скорость C, я бы порекомендовал язык сценариев (Ruby, Python или аналогичный). Вы сможете выполнять сложные задачи без утомительного языка C (пожалуйста, без флейма).

Вот что я бы сделал:

  • Используйте интерфейс Python-GTK для создания графического интерфейса: вам нужно всего 4 виджета: Gtk.Window, Gtk.VBox (для хранения следующих двух элементов), Gtk .Entry для ввода типов файлов и Gtk.TreeView для отображения результатов

  • Из Python вы можете легко объединить список из Gtk.Entry и команду find + параметры + типы файлов, чтобы получить список. (Вы можете выполнить команду find из subprocess.checkcall ).

Checkcall возвращает список, который затем можно отобразить в Gtk.TreeView.

Если вы хотите изучить Python, в сети есть множество отличных руководств. Это официальный учебник на сайте Python . Сайт learnPython очень интересен, так как вы даже можете опробовать свои программы. Этот учебник должен дать вам все необходимое для использования графического интерфейса в Python с большим количеством примеров.

Язык сценариев, такой как Python, идеально подходит для решения проблем, подобных описанной вами.

РЕДАКТИРОВАТЬ У меня было время, и я подумал, что неплохо было бы иметь компактный поисковик с графическим интерфейсом. Ниже рабочий код. Да, он длиннее 20 строк, в основном потому, что я построил весь графический интерфейс в коде. Если бы я использовал Glade (дизайнер графического интерфейса), код уменьшился бы вдвое. Также я добавил диалог для выбора корня поиска.

#!/usr/bin/env python3
# -*- coding: utf-8 -*-
#
#  test_finder.py
#  
#  Copyright 2016 John Coppens 
#  
#  This program is free software; you can redistribute it and/or modify
#  it under the terms of the GNU General Public License as published by
#  the Free Software Foundation; either version 2 of the License, or
#  (at your option) any later version.
#  
#  This program is distributed in the hope that it will be useful,
#  but WITHOUT ANY WARRANTY; without even the implied warranty of
#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#  GNU General Public License for more details.
#  
#  You should have received a copy of the GNU General Public License
#  along with this program; if not, write to the Free Software
#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
#  MA 02110-1301, USA.
#  
#  


from gi.repository import Gtk
import os, fnmatch

class MainWindow(Gtk.Window):
    def __init__(self):
        super(MainWindow, self).__init__()
        self.connect("destroy", lambda x: Gtk.main_quit())
        self.set_size_request(600, 400)

        vbox = Gtk.VBox()
        # Pattern entry
        self.entry = Gtk.Entry()
        self.entry.connect("activate", self.can't open file 'pyfind.py'on_entry_activated)

        # Initial path selection
        self.path = Gtk.FileChooserButton(title = "Select start path",
                                          action = Gtk.FileChooserAction.SELECT_FOLDER)
        self.path.set_current_folder(".")

        # The file list + a scroll window
        self.list = self.make_file_list()
        scrw = Gtk.ScrolledWindow()
        scrw.add(self.list)

        vbox.pack_start(self.entry, False, False, 0)
        vbox.pack_start(self.path, False, False, 0)
        vbox.pack_start(scrw, True, True, 0)

        self.add(vbox)
        self.show_all()

    def make_file_list(self):
        self.store = Gtk.ListStore(str, str)
        filelist = Gtk.TreeView(model = self.store, enable_grid_lines = True)

        renderer = Gtk.CellRendererText()
        col = Gtk.TreeViewColumn("Files:", renderer, text = 0, sizing = Gtk.TreeViewColumnSizing.AUTOSIZE)
        filelist.append_column(col)
        col = Gtk.TreeViewColumn("Path:", renderer, text = 1)
        filelist.append_column(col)

        return filelist

    def on_entry_activated(self, entry):
        self.store.clear()
        patterns = entry.get_text().split()
        path = self.path.get_filename()

        for root, dirs, files in os.walk(path):
            for name in files:
                for pat in patterns:
                    if fnmatch.fnmatch(name, pat):
                        self.store.append((name, root))

    def run(self):
        Gtk.main()


def main(args):
    mainwdw = MainWindow()
    mainwdw.run()

    return 0

if __name__ == '__main__':
    import sys
    sys.exit(main(sys.argv))

View of the GUI finder

Руководство:

  1. Проверьте, установлен ли у вас Python3 ( python -V ). Если нет, установите его.
  2. Сохраните указанную выше программу как, скажем, pyfind.py
  3. Сделайте ее исполняемой chmod 755 pyfind.py
  4. Выполните ее с помощью ./ pyfind.py
  5. Введите фильтр, нажмите Enter.
  6. Если вы измените путь, повторите 1 (этого можно избежать, используя сигнал от FileChooserButton, если нужно)

EDIT2

Я не уверен, что происходит в вашем случае, но журнал говорит, что python3 не находит файл pyfind.py. Вы можете сделать файл непосредственно исполняемым:

Измените первую строку кода на:

#!/usr/local/bin/python3

Чтобы сделать вышеуказанный файл исполняемым, выполните (в окне терминала, в каталоге, где находится pyfind.py is):

chmod 755 pyfind.py

После этого вы сможете выполнить программу просто так (опять же, в терминале):

./pyfind.py

1
13.04.2017, 15:36
0 ответов

Теги

Похожие вопросы