Програм је писан за оперативни систем Linux Ubuntu. Програм са базом података можете преузети на: http://abel.rs/as/trag_py.zip . Направио сам и верзију истог програма за Widows. Њу ћу касније објавити кад напишем упутство за инсталацију јер је програм за Wodnows писан у програмском језику C++. Помоћу овог програма смо нашли податке за виртуелну изложбу Историјског Архива Краљево Наша прошлост од оснивања до забране 1964-1976. У посебном чланку ћу описати израду те виртуалне изложбе.
Да би програм у Python 3 који користи библиотеке попут Gtk и GLib успешно радио, потребно је инсталирати неколико зависности и подесити окружење. Ово су кораци и потребне компоненте:
1. Python 3 и pip
Пре свега, провери да ли је Python 3 инсталиран на систему. Отвори терминал и покрени:
python3 --version pip3 --version
Ако није инсталиран, додај га на свој систем:
- За Ubuntu/Debian:
sudo apt update sudo apt install python3 python3-pip
2. GTK+3 и gi (GObject Introspection)
Библиотека Gtk и GLib су део GTK+3 графичког интерфејса и захтевају GObject Introspection како би радиле у Python-у.
Инсталација GTK+3 и GObject Introspection:
На Ubuntu/Debian системима:
sudo apt update sudo apt install libgtk-3-dev gir1.2-gtk-3.0 python3-gi python3-gi-cairo
Објашњење пакета:
libgtk-3-dev
: Библиотека и заглавља за GTK+3.gir1.2-gtk-3.0
: GObject Introspection подршка за GTK+3.python3-gi
: Python binding за GObject Introspection.python3-gi-cairo
: Подршка за Cairo у Python-у (ако радиш са графиком).
3. Провера и тестирање инсталације
Да провериш да ли су Gtk и GLib успешно инсталирани, покрени Python 3 интерпретер:
python3
Унутар Python-а пробај следеће:
import gi gi.require_version("Gtk", "3.0") from gi.repository import Gtk, GLib print("Gtk и GLib су успешно учитани!")
Ако нема грешака, све је исправно инсталирано.
4. Подршка за webbrowser модул
Модул webbrowser
је део стандардне библиотеке Python-а и не захтева додатну инсталацију. Модул се користи за отварање URL-ова у подразумеваном веб-прегледачу.
Пример:
import webbrowser webbrowser.open("https://example.com")
Ово ће отворити линк у подразумеваном веб-прегледачу система.
5. Инсталација осовних пакета (опционо)
Ако твој програм користи додатне функционалности које зависе од os модула, он је такође део стандардне Python библиотеке и не захтева посебну инсталацију.
Резиме – шта је све потребно инсталирати:
- Python 3 и pip3
sudo apt install python3 python3-pip
- GTK+3 и GObject Introspection:
sudo apt install libgtk-3-dev gir1.2-gtk-3.0 python3-gi python3-gi-cairo
Након ових корака, твој Python програм који користи Gtk, GLib, webbrowser
и os
би требало да ради без проблема.
Programski kod:
import os import webbrowser import gi from gi.repository import Gtk, GLib gi.require_version('Gtk', '3.0') class HTMLSearcher(Gtk.Window): def __init__(self): super().__init__(title="Претрага Ибарских Новости") self.set_border_width(10) self.set_default_size(250, 120) # Layout self.grid = Gtk.Grid() self.add(self.grid) # Input field self.search_entry = Gtk.Entry() self.grid.attach(self.search_entry, 0, 0, 2, 1) # Search button self.search_button = Gtk.Button(label="Претражи") self.search_button.connect("clicked", self.on_search_button_clicked) self.grid.attach(self.search_button, 2, 0, 1, 1) # Progress bar self.progress_bar = Gtk.ProgressBar() self.grid.attach(self.progress_bar, 0, 1, 3, 1) # Labels for current file, progress and status self.file_label = Gtk.Label(label="Фајл који се тренутно претражује: ") self.grid.attach(self.file_label, 0, 2, 3, 1) self.progress_label = Gtk.Label(label="Напредак: 0/0") self.grid.attach(self.progress_label, 0, 3, 3, 1) self.status_label = Gtk.Label(label="Статус: Чека се претрага...") self.grid.attach(self.status_label, 0, 4, 3, 1) self.show_all() def on_search_button_clicked(self, widget): search_phrase = self.search_entry.get_text() if search_phrase: self.progress_bar.set_fraction(0) self.progress_bar.show() self.file_label.set_text("Претрага је почела...") self.status_label.set_text("Статус: Почетак претраге...") GLib.idle_add(self.search_html_files, './html/', search_phrase) def search_html_files(self, directory, search_phrase): matching_files = [] html_files = [f for f in os.listdir(directory) if f.endswith('.html')] total_files = len(html_files) for index, filename in enumerate(html_files): file_path = os.path.join(directory, filename) self.file_label.set_text(f"Тренутно претражујем: {filename}") self.progress_label.set_text(f"Напредак: {index + 1}/{total_files}") self.status_label.set_text("Статус: Претрага у току...") # Osvežavanje GTK prozora da bi se odmah prikazale promene while Gtk.events_pending(): Gtk.main_iteration() try: with open(file_path, 'r', encoding='utf-8') as file: content = file.read() if search_phrase.lower() in content.lower(): matching_files.append(filename) except Exception as e: print(f"Greška pri čitanju fajla {file_path}: {e}") # Update progress bar progress = (index + 1) / total_files GLib.idle_add(self.progress_bar.set_fraction, progress) self.generate_html_file(matching_files, os.path.join(directory, 'results.html'), search_phrase) self.status_label.set_text("Статус: Претрага завршена.") return False def generate_html_file(self, matching_files, output_file, search_phrase): with open(output_file, 'w', encoding='utf-8') as file: file.write('<!DOCTYPE html>\n<html lang="sr">\n<head>\n') file.write('<meta charset="UTF-8">\n<title>Rezultati pretrage HTML fajlova</title>\n') file.write('</head>\n<body>\n') file.write('<h1>Ибарске Новости</h1>\n') file.write(f'<p>Задата реченица: <strong>{search_phrase}</strong></p>\n') if matching_files: file.write('<ul>\n') for html_file in matching_files: pdf_file = html_file.replace('.html', '.pdf') file.write(f'<li><a href="http://kraljevcani.rs/{pdf_file}">{pdf_file}</a></li>\n') file.write('</ul>\n') else: file.write('<p>Нема фајлова који садрже задату реченицу.</p>\n') file.write('</body>\n</html>') webbrowser.open('file://' + os.path.realpath(output_file)) if __name__ == "__main__": win = HTMLSearcher() win.connect("destroy", Gtk.main_quit) Gtk.main()
Покретање програма: После распакивања зиповане датотеке trag_py.zip уђите у фолдер trag_py и из конзоле стартујте програм:

Појавиће вам се прозор за унос кључне речи:

После уноса кључне речи притисните дугме Претражи. Претрага 3269 бројева Ибарских новости траје неколико секунди. Као резултат добијате листу бројева у којима се појављује кључна реч:

Кликните мишем на неки од излистаних PDF фајлова Ибарских новости да га отоворите:

Потом комбинацијом тастера Ctrl+F отворите претрагу у browser-у и упишите опет исту кључну реч. Добићете број погодака. Притисните стрелицу на доле да би позиционирали први погодак:
