Advertisement
MizunoBrasil

Navegador Web em Python com Abas e com edição de Sites Favoritos

Jun 7th, 2023
1,339
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 8.64 KB | None | 0 0
  1. Navegador simples em Python.
  2. Permite carregar sites através de Abas, Gerenciar sites Favoritos: Cadastrar, Editar e Excluir. Obs: Os favoritos ficam salvos no arquivo favoritos.txt
  3. Código para fins de estudo.
  4. 08/06/2023 - Mizuno
  5. --------------------------------------------------------------------------------------------------
  6.  
  7. import sys
  8. from PyQt5.QtCore import *
  9. from PyQt5.QtWebEngineWidgets import *
  10. from PyQt5.QtWidgets import *
  11.  
  12. class TabWidget(QTabWidget):
  13.     def __init__(self):
  14.         super(TabWidget, self).__init__()
  15.         self.setTabsClosable(True)
  16.         self.tabCloseRequested.connect(self.close_tab)
  17.         self.favorites = []
  18.  
  19.         self.new_tab()
  20.  
  21.     def new_tab(self, url='http://google.com'):
  22.         browser = QWebEngineView()
  23.         browser.setUrl(QUrl(url))
  24.         self.addTab(browser, 'New Tab')
  25.         self.setCurrentWidget(browser)
  26.         browser.urlChanged.connect(self.update_url)
  27.  
  28.     def close_tab(self, index):
  29.         widget = self.widget(index)
  30.         widget.deleteLater()
  31.         self.removeTab(index)
  32.  
  33.     def update_url(self, q):
  34.         browser = self.sender()
  35.         index = self.indexOf(browser)
  36.         self.setTabText(index, q.toString())
  37.  
  38.     def save_favorite(self):
  39.         browser = self.currentWidget()
  40.         page_title = browser.title()
  41.         page_url = browser.url().toString()
  42.         self.favorites.append((page_title, page_url))
  43.         self.update_favorites_file()
  44.         QMessageBox.information(self, 'Sucesso', 'Favorito salvo com sucesso!')
  45.  
  46.     def load_favorites(self):
  47.         self.favorites.clear()
  48.         try:
  49.             with open('favoritos.txt', 'r') as file:
  50.                 lines = file.readlines()
  51.                 for line in lines:
  52.                     parts = line.strip().split(',')
  53.                     if len(parts) == 2:
  54.                         page_title, page_url = parts
  55.                         self.favorites.append((page_title, page_url))
  56.         except FileNotFoundError:
  57.             QMessageBox.warning(self, 'Erro', 'Arquivo de favoritos não encontrado.')
  58.  
  59.         self.show_favorites_dialog()
  60.  
  61.     def show_favorites_dialog(self):
  62.         dialog = QDialog()
  63.         dialog.setWindowTitle('Favoritos')
  64.         dialog.setModal(True)
  65.  
  66.         layout = QVBoxLayout()
  67.         dialog.setLayout(layout)
  68.  
  69.         list_widget = QListWidget()
  70.         list_widget.setSpacing(5)
  71.  
  72.         for page_title, page_url in self.favorites:
  73.             list_widget.addItem(QListWidgetItem(page_title))
  74.  
  75.         layout.addWidget(list_widget)
  76.  
  77.         button_box = QDialogButtonBox()
  78.         open_button = button_box.addButton('Abrir', QDialogButtonBox.ActionRole)
  79.         edit_button = button_box.addButton('Editar', QDialogButtonBox.ActionRole)
  80.         delete_button = button_box.addButton('Excluir', QDialogButtonBox.ActionRole)
  81.         close_button = button_box.addButton('Fechar', QDialogButtonBox.RejectRole)
  82.         layout.addWidget(button_box)
  83.  
  84.         def open_favorite():
  85.             selected_item = list_widget.currentItem()
  86.             if selected_item:
  87.                 index = list_widget.row(selected_item)
  88.                 _, page_url = self.favorites[index]
  89.                 browser = self.currentWidget()
  90.                 browser.setUrl(QUrl(page_url))
  91.                 dialog.close()
  92.  
  93.         def edit_favorite():
  94.             selected_item = list_widget.currentItem()
  95.             if selected_item:
  96.                 index = list_widget.row(selected_item)
  97.                 page_title, page_url = self.favorites[index]
  98.                 edit_dialog = QDialog()
  99.                 edit_dialog.setWindowTitle('Editar Favorito')
  100.                 edit_dialog.setModal(True)
  101.                 edit_layout = QVBoxLayout()
  102.                 edit_dialog.setLayout(edit_layout)
  103.  
  104.                 edit_name = QLineEdit(page_title)
  105.                 edit_url = QLineEdit(page_url)
  106.  
  107.                 edit_layout.addWidget(QLabel('Nome:'))
  108.                 edit_layout.addWidget(edit_name)
  109.                 edit_layout.addWidget(QLabel('URL:'))
  110.                 edit_layout.addWidget(edit_url)
  111.  
  112.                 save_button = QPushButton('Salvar')
  113.                 edit_layout.addWidget(save_button)
  114.  
  115.                 def save_edited_favorite():
  116.                     new_title = edit_name.text()
  117.                     new_url = edit_url.text()
  118.                     if new_title and new_url:
  119.                         self.favorites[index] = (new_title, new_url)
  120.                         self.update_favorites_file()
  121.                         selected_item.setText(new_title)
  122.                         QMessageBox.information(self, 'Sucesso', 'Favorito atualizado com sucesso!')
  123.                         edit_dialog.close()
  124.                     else:
  125.                         QMessageBox.warning(self, 'Erro', 'Preencha todos os campos.')
  126.  
  127.                 save_button.clicked.connect(save_edited_favorite)
  128.                 edit_dialog.exec_()
  129.  
  130.         def delete_favorite():
  131.             selected_item = list_widget.currentItem()
  132.             if selected_item:
  133.                 index = list_widget.row(selected_item)
  134.                 confirm_dialog = QMessageBox.question(self, 'Excluir Favorito',
  135.                                                       'Tem certeza que deseja excluir este favorito?',
  136.                                                       QMessageBox.Yes | QMessageBox.No)
  137.                 if confirm_dialog == QMessageBox.Yes:
  138.                     self.favorites.pop(index)
  139.                     self.update_favorites_file()
  140.                     list_widget.takeItem(list_widget.row(selected_item))
  141.                     QMessageBox.information(self, 'Sucesso', 'Favorito excluído com sucesso!')
  142.  
  143.         def close_dialog():
  144.             dialog.close()
  145.  
  146.         open_button.clicked.connect(open_favorite)
  147.         edit_button.clicked.connect(edit_favorite)
  148.         delete_button.clicked.connect(delete_favorite)
  149.         close_button.clicked.connect(close_dialog)
  150.  
  151.         dialog.exec_()
  152.  
  153.     def update_favorites_file(self):
  154.         with open('favoritos.txt', 'w') as file:
  155.             for page_title, page_url in self.favorites:
  156.                 file.write(f"{page_title},{page_url}\n")
  157.  
  158. class MainWindow(QMainWindow):
  159.     def __init__(self):
  160.         super(MainWindow, self).__init__()
  161.  
  162.         self.tab_widget = TabWidget()
  163.         self.setCentralWidget(self.tab_widget)
  164.         self.showMaximized()
  165.  
  166.         navbar = QToolBar()
  167.         self.addToolBar(navbar)
  168.  
  169.         new_tab_btn = QAction('Nova Aba', self)
  170.         new_tab_btn.triggered.connect(lambda: self.tab_widget.new_tab())
  171.         navbar.addAction(new_tab_btn)
  172.  
  173.         save_favorite_btn = QAction('Salvar Favorito', self)
  174.         save_favorite_btn.triggered.connect(self.tab_widget.save_favorite)
  175.         navbar.addAction(save_favorite_btn)
  176.  
  177.         load_favorites_btn = QAction('Carregar Favoritos', self)
  178.         load_favorites_btn.triggered.connect(self.tab_widget.load_favorites)
  179.         navbar.addAction(load_favorites_btn)
  180.  
  181.         back_btn = QAction('Voltar', self)
  182.         back_btn.triggered.connect(self.current_browser().back)
  183.         navbar.addAction(back_btn)
  184.  
  185.         forward_btn = QAction('Avançar', self)
  186.         forward_btn.triggered.connect(self.current_browser().forward)
  187.         navbar.addAction(forward_btn)
  188.  
  189.         reload_btn = QAction('Recarregar', self)
  190.         reload_btn.triggered.connect(self.current_browser().reload)
  191.         navbar.addAction(reload_btn)
  192.  
  193.         home_btn = QAction('Home', self)
  194.         home_btn.triggered.connect(self.navigate_home)
  195.         navbar.addAction(home_btn)
  196.  
  197.         self.url_bar = QLineEdit()
  198.         self.url_bar.returnPressed.connect(self.navigate_to_url)
  199.         navbar.addWidget(self.url_bar)
  200.  
  201.         copy_btn = QAction('Copiar URL', self)
  202.         copy_btn.triggered.connect(self.copy_url)
  203.         navbar.addAction(copy_btn)
  204.  
  205.         self.tab_widget.currentChanged.connect(self.update_url)
  206.  
  207.     def current_browser(self):
  208.         return self.tab_widget.currentWidget()
  209.  
  210.     def navigate_home(self):
  211.         self.current_browser().setUrl(QUrl('http://google.com'))
  212.  
  213.     def navigate_to_url(self):
  214.         url = self.url_bar.text()
  215.         self.current_browser().setUrl(QUrl(url))
  216.  
  217.     def update_url(self, index):
  218.         browser = self.tab_widget.widget(index)
  219.         self.url_bar.setText(browser.url().toString())
  220.  
  221.     def copy_url(self):
  222.         clipboard = QApplication.clipboard()
  223.         clipboard.setText(self.url_bar.text())
  224.         QMessageBox.information(self, 'Sucesso', 'URL copiada para a área de transferência!')
  225.  
  226. app = QApplication(sys.argv)
  227. QApplication.setApplicationName('Navegador com Abas')
  228. window = MainWindow()
  229. app.exec_()
  230.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement