Skip to content

feat: Advanced PyQt5 GUI Integration with Dynamic Sorting#2966

Open
elilef wants to merge 15 commits into
sherlock-project:masterfrom
sherlockmedipol:elif_hasgul
Open

feat: Advanced PyQt5 GUI Integration with Dynamic Sorting#2966
elilef wants to merge 15 commits into
sherlock-project:masterfrom
sherlockmedipol:elif_hasgul

Conversation

@elilef

@elilef elilef commented May 25, 2026

Copy link
Copy Markdown

---Description
This Pull Request introduces a fully functional PyQt5 desktop interface for Sherlock, resolving the previous terminal dependency for visual monitoring. It connects the core search engine (sherlock.py) asynchronously to the GUI using QThread and pyqtSignal via a custom notifier in notify.py.

---Changes Made

  • Created gui_app.py containing the main PyQt5 UI dashboard.
  • Implemented a custom notification class QueryNotifyGUI in notify.py to stream real-time results.
  • Developed a dynamic sorting algorithm (add_result_to_table) that automatically pins successful hits (Found) to the top and sorts all results alphabetically (A-Z).
  • Fixed the row_idx runtime exception during rendering.

---Testing
Tested locally on macOS. The interface runs smoothly, populates rows dynamically without blocking the main thread, and maintains correct item positioning.

@elilef elilef closed this May 25, 2026
@elilef elilef reopened this May 25, 2026
elilef added 11 commits May 28, 2026 15:36
…I tracking

This commit updates the inner iteration loop in sherlock.py to trigger an optional callback function upon completing each site check. This allows the PyQt5 GUI to update its progress bar synchronously without breaking the traditional CLI execution mode.
…fix parameter scope

This ensures compatibility with the core sherlock engine by properly inheriting the notification base class and adding optional parameters to prevent runtime TypeErrors.
This commit resolves a visual bug where the progress bar would not fully complete if certain target sites were skipped by the core engine's regex checks. The search_finished method now explicitly sets the progress bar to its maximum value upon receiving the completion signal.
Implemented to_dict() and get_ui_color_code() methods to safely export query results as structured dictionaries with status-based hex color codes for the PyQt5 interface. This reduces frontend parsing logic and satisfies the existing file contribution requirement.
Updated QueryNotifyGUI to utilize the to_dict() method for extracting hex color codes. Modified the PyQt5 result_signal and add_result_to_table functions to parse these color codes and dynamically paint the table rows (Green for Found, Red for Not Found).
Introduced 3 summary cards (Scanned, Found, Not Found) to track live search progress. Implemented real-time counter updates inside add_result_to_table and integrated state-resetting logic within start_search to clear counters on sequential queries.
Resolved a UI glitch where the QWidget container's default background and the underlying QTableWidgetItem text were the viibly protruding behind the custom rounded QLabel badges.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant