Advertisement
MizunoBrasil

Navegador Web em Python

Jun 5th, 2023
910
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 5.52 KB | None | 0 0
  1. import sys
  2. import json
  3. from PyQt5.QtCore import *
  4. from PyQt5.QtWebEngineWidgets import *
  5. from PyQt5.QtWidgets import *
  6.  
  7. class MainWindow(QMainWindow):
  8.     def __init__(self):
  9.         super(MainWindow, self).__init__()
  10.         self.browser = QWebEngineView()
  11.         self.browser.setUrl(QUrl('http://www.google.com'))
  12.         self.setCentralWidget(self.browser)
  13.         self.showMaximized()
  14.  
  15.         # lista de favoritos
  16.         self.favorites = self.load_favorites()
  17.  
  18.         # barra de navegação
  19.         navbar = QToolBar()
  20.         self.addToolBar(navbar)
  21.  
  22.         # botão voltar
  23.         back_btn = QAction('Voltar', self)
  24.         back_btn.triggered.connect(self.browser.back)
  25.         navbar.addAction(back_btn)
  26.  
  27.         # botão avançar
  28.         forward_btn = QAction('Avançar', self)
  29.         forward_btn.triggered.connect(self.browser.forward)
  30.         navbar.addAction(forward_btn)
  31.  
  32.         # botão recarregar
  33.         reload_btn = QAction('Recarregar', self)
  34.         reload_btn.triggered.connect(self.browser.reload)
  35.         navbar.addAction(reload_btn)
  36.  
  37.         # botão home
  38.         home_btn = QAction('Início', self)
  39.         home_btn.triggered.connect(self.navigate_home)
  40.         navbar.addAction(home_btn)
  41.  
  42.         # botão adicionar aos favoritos
  43.         add_fav_btn = QAction('Adicionar aos Favoritos', self)
  44.         add_fav_btn.triggered.connect(self.add_to_favorites)
  45.         navbar.addAction(add_fav_btn)
  46.  
  47.         # botão mostrar favoritos
  48.         show_fav_btn = QAction('Mostrar Favoritos', self)
  49.         show_fav_btn.triggered.connect(self.show_favorites)
  50.         navbar.addAction(show_fav_btn)
  51.  
  52.         # barra de url
  53.         self.url_bar = QLineEdit()
  54.         self.url_bar.returnPressed.connect(self.navigate_to_url)
  55.         navbar.addWidget(self.url_bar)
  56.  
  57.         # atualiza a url na barra de url
  58.         self.browser.urlChanged.connect(self.update_url)
  59.  
  60.     def navigate_home(self):
  61.         self.browser.setUrl(QUrl('http://www.google.com'))
  62.  
  63.     def navigate_to_url(self):
  64.         url = self.url_bar.text()
  65.         self.browser.setUrl(QUrl(url))
  66.  
  67.     def update_url(self, q):
  68.         self.url_bar.setText(q.toString())
  69.  
  70.     def load_favorites(self):
  71.         try:
  72.             with open('favorites.json', 'r') as f:
  73.                 favorites = json.load(f)
  74.             return favorites
  75.         except FileNotFoundError:
  76.             return []
  77.  
  78.     def save_favorites(self):
  79.         with open('favorites.json', 'w') as f:
  80.             json.dump(self.favorites, f)
  81.  
  82.     def add_to_favorites(self):
  83.         # adiciona a url atual e o título da página aos favoritos
  84.         self.favorites.append({
  85.             'url': self.url_bar.text(),
  86.             'title': self.browser.page().title() or 'Sem título'
  87.         })
  88.         print(f'Adicionado aos favoritos: {self.url_bar.text()}')
  89.         self.save_favorites()
  90.  
  91.     def show_favorites(self):
  92.         # cria uma nova janela de diálogo
  93.         dialog = QDialog(self)
  94.  
  95.         # ajusta o tamanho da janela de diálogo
  96.         dialog.resize(800, 600)
  97.  
  98.         # cria um layout vertical para a janela de diálogo
  99.         layout = QVBoxLayout()
  100.         dialog.setLayout(layout)
  101.  
  102.         # cria um QListWidget
  103.         self.list_widget = QListWidget()
  104.  
  105.         # para cada url favorito, adiciona um item à QListWidget
  106.         for fav in self.favorites:
  107.             self.list_widget.addItem(f"{fav['title']} ({fav['url']})")
  108.  
  109.         # conecta o sinal itemClicked à função navigate_to_favorite
  110.         self.list_widget.itemClicked.connect(self.navigate_to_favorite)
  111.  
  112.         # adiciona a QListWidget ao layout
  113.         layout.addWidget(self.list_widget)
  114.  
  115.         # cria os botões de edição e remoção
  116.         edit_button = QPushButton('Editar Favorito')
  117.         edit_button.clicked.connect(self.edit_favorite)
  118.         layout.addWidget(edit_button)
  119.  
  120.         remove_button = QPushButton('Remover Favorito')
  121.         remove_button.clicked.connect(self.remove_favorite)
  122.         layout.addWidget(remove_button)
  123.  
  124.         dialog.exec_()
  125.  
  126.     def navigate_to_favorite(self, item):
  127.         # navega para o url favorito quando o item é clicado
  128.         self.browser.setUrl(QUrl(item.text().split(" (")[1].rstrip(")")))
  129.  
  130.     def edit_favorite(self):
  131.         # pega o item selecionado
  132.         current_item = self.list_widget.currentItem()
  133.         if current_item:
  134.             # abre uma janela de entrada para editar o url
  135.             new_url, ok = QInputDialog.getText(self, 'Editar Favorito', 'URL:', text=current_item.text().split(" (")[1].rstrip(")"))
  136.             new_title, ok = QInputDialog.getText(self, 'Editar Favorito', 'Título:', text=current_item.text().split(" (")[0])
  137.             if ok and new_url:
  138.                 # atualiza o url e o título na lista de favoritos e no QListWidget
  139.                 self.favorites[self.list_widget.row(current_item)] = {'url': new_url, 'title': new_title}
  140.                 current_item.setText(f"{new_title} ({new_url})")
  141.                 self.save_favorites()
  142.  
  143.     def remove_favorite(self):
  144.         # pega o item selecionado
  145.         current_item = self.list_widget.currentItem()
  146.         if current_item:
  147.             # remove o url da lista de favoritos e do QListWidget
  148.             self.favorites.pop(self.list_widget.row(current_item))
  149.             self.list_widget.takeItem(self.list_widget.row(current_item))
  150.             self.save_favorites()
  151.  
  152.  
  153. app = QApplication(sys.argv)
  154. QApplication.setApplicationName('Navegador Python: 06/06/2023 - Versão 1.3')
  155. window = MainWindow()
  156. app.exec_()
  157.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement