ویرگول
ورودثبت نام
آرتین کریمیان
آرتین کریمیانروبیکا من : https://rubika.ir/artinkarimian3
آرتین کریمیان
آرتین کریمیان
خواندن ۳ دقیقه·۵ ساعت پیش

ساخت یک موتور جست و جو با پایتون

خب سلام برای امروز به وسایل زیر نیاز داریم .

1- پایتون

2- کتابخانه sys

3- کتابخانه PyQt5.QtCore

4- کتابخانه PyQt5.QtGui

5- کتابخانه PyQt5.QtWidgets

6- کتابخانه PyQt5.QtWebEngineWidgets

خب حالا پایتون را باز میکنیم و کد زیر را وارد میکنیم .

import sys from PyQt5.QtCore import * from PyQt5.QtGui import * from PyQt5.QtWidgets import * from PyQt5.QtWebEngineWidgets import * # --- بخش نقاشی آیکون‌ها --- def paint_custom_icon(kind, size=32): """ این تابع مثل یک نقاش عمل می‌کند. به جای خواندن فایل، با دستورات ریاضی شکل‌ها را می‌کشد. """ pixmap = QPixmap(size, size) pixmap.fill(Qt.transparent) # پس‌زمینه شفاف painter = QPainter(pixmap) painter.setRenderHint(QPainter.Antialiasing) # برای اینکه لبه‌ها نرم و زیبا باشند # تنظیمات قلم (Pen) برای رسم خطوط pen = QPen(QColor("#333333")) pen.setWidth(3) pen.setCapStyle(Qt.RoundCap) painter.setPen(pen) center = size // 2 if kind == "back": # رسم فلش رو به چپ با خطوط و گوشه‌ها painter.drawLine(center + 6, center, center - 8, center) painter.drawLine(center - 8, center, center - 2, center - 6) painter.drawLine(center - 8, center, center - 2, center + 6) elif kind == "forward": # رسم فلش رو به راست painter.drawLine(center - 6, center, center + 8, center) painter.drawLine(center + 8, center, center + 2, center - 6) painter.drawLine(center + 8, center, center + 2, center + 6) elif kind == "reload": # رسم یک فلش دایره‌ای (چرخشی) rect = QRectF(6, 6, size-12, size-12) painter.drawArc(rect, -30 * 16, 270 * 16) # نوک فلش painter.drawLine(center + 8, 8, center + 12, 12) painter.drawLine(center + 12, 12, center + 10, 18) elif kind == "home": # رسم شکل خانه با چند خط ساده painter.drawLine(size//4, size - 8, size - size//4, size - 8) # کف خانه painter.drawLine(size//4, size - 8, size//4, size//2) # دیوار چپ painter.drawLine(size - size//4, size - 8, size - size//4, size//2) # دیوار راست painter.drawLine(size//4, size//2, size//2, size//4) # سقف چپ painter.drawLine(size//2, size//4, size - size//4, size//2) # سقف راست elif kind == "add": # رسم علامت + با دو خط متقاطع painter.drawLine(center, size//4, center, size - size//4) painter.drawLine(size//4, center, size - size//4, center) painter.end() return QIcon(pixmap) class MainWindow(QMainWindow): def __init__(self): super(MainWindow, self).__init__() # 1. تغییر اسم برنامه و پنجره self.setWindowTitle("Artin Karimian's search engine") QApplication.setApplicationName('Artin Karimian\'s search engine') # ایجاد تب‌ها self.tabs = QTabWidget() self.tabs.setTabsClosable(True) # دکمه بستن تب self.tabs.setMovable(True) # قابلیت جابه‌جایی تب‌ها self.tabs.tabCloseRequested.connect(self.close_tab) self.setCentralWidget(self.tabs) self.showMaximized() self.home_url = "https://virgool.io/@artinkarimian" # 2. تغییر اسم تب اولیه self.add_new_tab(self.home_url, "Home Tab") # نوار ابزار (Toolbar) navbar = QToolBar() self.addToolBar(navbar) # اضافه کردن دکمه‌ها با آیکون‌های نقاشی شده self.back_btn = QAction(paint_custom_icon("back"), '', self) self.back_btn.triggered.connect(self.go_back) navbar.addAction(self.back_btn) self.forward_btn = QAction(paint_custom_icon("forward"), '', self) self.forward_btn.triggered.connect(self.go_forward) navbar.addAction(self.forward_btn) self.reload_btn = QAction(paint_custom_icon("reload"), '', self) self.reload_btn.triggered.connect(self.reload_page) navbar.addAction(self.reload_btn) self.home_btn = QAction(paint_custom_icon("home"), '', self) self.home_btn.triggered.connect(self.navigate_home) navbar.addAction(self.home_btn) self.new_tab_btn = QAction(paint_custom_icon("add"), '', self) self.new_tab_btn.triggered.connect(self.add_new_tab) navbar.addAction(self.new_tab_btn) # نوار جستجو self.search_bar = QLineEdit() self.search_bar.returnPressed.connect(self.search) navbar.addWidget(self.search_bar) # --- متدهای عملکردی --- def add_new_tab(self, url=None, title="New Tab"): # عنوان تب پیش‌فرض "New Tab" باقی می‌ماند browser = QWebEngineView() if url: browser.setUrl(QUrl(url)) else: browser.setUrl(QUrl("https://www.google.com")) tab_index = self.tabs.addTab(browser, title) # اینجا عنوان تب تعیین می‌شود self.tabs.setCurrentIndex(tab_index) browser.urlChanged.connect(self.update_url) def close_tab(self, index): # اجازه نده آخرین تب بسته شود if self.tabs.count() > 1: widget = self.tabs.widget(index) self.tabs.removeTab(index) if widget: widget.deleteLater() def go_back(self): if self.tabs.currentWidget(): self.tabs.currentWidget().back() def go_forward(self): if self.tabs.currentWidget(): self.tabs.currentWidget().forward() def reload_page(self): if self.tabs.currentWidget(): self.tabs.currentWidget().reload() def navigate_home(self): if self.tabs.currentWidget(): self.tabs.currentWidget().setUrl(QUrl(self.home_url)) def search(self): url_text = self.search_bar.text() current_tab = self.tabs.currentWidget() if not current_tab: return if "http" in url_text or "https://" in url_text or "about:blank" in url_text: # آدرس معتبر است، مستقیماً برو current_tab.setUrl(QUrl(url_text)) else: # یک عبارت جستجو است، با گوگل جستجو کن search_url = f"https://www.google.com/search?q={url_text}" current_tab.setUrl(QUrl(search_url)) self.search_bar.setText(search_url) # نوار جستجو را هم آپدیت کن def update_url(self, q): # این تابع فعلاً فقط نوار جستجو را آپدیت می‌کند. self.search_bar.setText(q.toString()) if __name__ == "__main__": app = QApplication(sys.argv) window = MainWindow() window.show() # پنجره را نمایش بده app.exec_()

خب اینم از پروژه امروز ما .

کانال روبیکا من : کانال روبیکا من : https://rubika.ir/artinkarimian3

اگر ایده یا پروژه ای دارید از طریق لینک زیر :
https://formafzar.com/form/zso58
پیام خود را وارد کنید راستی به تمام سوالات شما پاسخ داده میشود .

رمز داخل سایت (جهت نیاز) : artinkarimian125701

ساخت
۱
۰
آرتین کریمیان
آرتین کریمیان
روبیکا من : https://rubika.ir/artinkarimian3
شاید از این پست‌ها خوشتان بیاید