Програм је писан за оперативни систем 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-у и упишите опет исту кључну реч. Добићете број погодака. Притисните стрелицу на доле да би позиционирали први погодак:

