Skip to content
This repository was archived by the owner on Sep 19, 2025. It is now read-only.

Commit e039d30

Browse files
authored
Update navegador.py
1 parent cd91692 commit e039d30

File tree

1 file changed

+53
-36
lines changed

1 file changed

+53
-36
lines changed

navegador.py

Lines changed: 53 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -19,25 +19,34 @@ def __init__(self):
1919
self.toolbar = QToolBar("Navegação")
2020
self.addToolBar(self.toolbar)
2121

22+
# --- Suporte a Guias ---
23+
self.tabs = QTabWidget() # Primeiro, inicialize o QTabWidget
24+
self.tabs.setDocumentMode(True) # Modo de documento (aparência mais moderna)
25+
self.tabs.tabBarDoubleClicked.connect(self.tab_open_doubleclick) # Abrir nova aba ao clicar duas vezes
26+
self.tabs.currentChanged.connect(self.current_tab_changed) # Mudar URL na barra quando a aba muda
27+
28+
self.setCentralWidget(self.tabs)
29+
30+
# Agora que self.tabs existe e tem uma guia, podemos conectar os botões
2231
# Botões da barra de navegação
2332
back_btn = QAction("⬅️ Voltar", self)
2433
back_btn.setStatusTip("Voltar para a página anterior")
25-
back_btn.triggered.connect(self.current_browser().back)
34+
back_btn.triggered.connect(lambda: self.current_browser().back()) # Conecta a uma lambda para chamar no clique
2635
self.toolbar.addAction(back_btn)
2736

2837
forward_btn = QAction("➡️ Avançar", self)
2938
forward_btn.setStatusTip("Avançar para a próxima página")
30-
forward_btn.triggered.connect(self.current_browser().forward)
39+
forward_btn.triggered.connect(lambda: self.current_browser().forward()) # Conecta a uma lambda
3140
self.toolbar.addAction(forward_btn)
3241

3342
reload_btn = QAction("🔄 Recarregar", self)
3443
reload_btn.setStatusTip("Recarregar a página atual")
35-
reload_btn.triggered.connect(self.current_browser().reload)
44+
reload_btn.triggered.connect(lambda: self.current_browser().reload()) # Conecta a uma lambda
3645
self.toolbar.addAction(reload_btn)
3746

3847
home_btn = QAction("🏠 Início", self)
3948
home_btn.setStatusTip("Ir para a página inicial")
40-
home_btn.triggered.connect(self.navigate_home)
49+
home_btn.triggered.connect(self.navigate_home) # Essa já estava OK
4150
self.toolbar.addAction(home_btn)
4251

4352
self.url_bar = QLineEdit()
@@ -50,13 +59,6 @@ def __init__(self):
5059
new_tab_btn.triggered.connect(self.add_new_tab)
5160
self.toolbar.addAction(new_tab_btn)
5261

53-
# --- Suporte a Guias ---
54-
self.tabs = QTabWidget()
55-
self.tabs.setDocumentMode(True) # Modo de documento (aparência mais moderna)
56-
self.tabs.tabBarDoubleClicked.connect(self.tab_open_doubleclick) # Abrir nova aba ao clicar duas vezes
57-
self.tabs.currentChanged.connect(self.current_tab_changed) # Mudar URL na barra quando a aba muda
58-
59-
self.setCentralWidget(self.tabs)
6062

6163
self.add_new_tab(QUrl("https://www.google.com"), "Página Inicial") # Adiciona a primeira guia
6264

@@ -65,7 +67,10 @@ def __init__(self):
6567

6668
def current_browser(self):
6769
"""Retorna a instância do navegador da guia atual."""
68-
return self.tabs.currentWidget()
70+
# Garante que sempre haja um widget antes de tentar acessá-lo
71+
if self.tabs.count() > 0:
72+
return self.tabs.currentWidget()
73+
return None # Retorna None se não houver abas (embora sempre teremos uma)
6974

7075
def add_new_tab(self, qurl=None, label="Nova Guia"):
7176
"""Adiciona uma nova guia ao navegador."""
@@ -79,68 +84,80 @@ def add_new_tab(self, qurl=None, label="Nova Guia"):
7984
self.tabs.setCurrentIndex(i)
8085

8186
# Atualiza a URL na barra quando a página muda
82-
browser.urlChanged.connect(lambda qurl, browser=browser: self.update_urlbar(qurl, browser))
87+
browser.urlChanged.connect(lambda qurl_obj, browser=browser: self.update_urlbar(qurl_obj, browser))
8388
browser.loadStarted.connect(lambda: self.update_buttons_state()) # Atualiza estado dos botões
8489
browser.loadFinished.connect(lambda success: self.update_buttons_state()) # Atualiza estado dos botões
8590

91+
# Conectar o título da guia para ser o título da página
92+
browser.titleChanged.connect(lambda title, browser=browser: self.tabs.setTabText(self.tabs.indexOf(browser), title))
93+
94+
8695
def tab_open_doubleclick(self, index):
8796
"""Abre uma nova guia ao dar clique duplo na barra de abas."""
8897
if index == -1: # Clicou em uma área vazia
8998
self.add_new_tab()
9099

91100
def current_tab_changed(self, index):
92101
"""Atualiza a barra de URL quando a guia ativa muda."""
93-
qurl = self.current_browser().url()
94-
self.update_urlbar(qurl, self.current_browser())
95-
self.update_buttons_state() # Garante que os botões refletem a guia atual
102+
browser = self.current_browser()
103+
if browser:
104+
qurl = browser.url()
105+
self.update_urlbar(qurl, browser)
106+
self.update_buttons_state() # Garante que os botões refletem a guia atual
96107

97108
def navigate_home(self):
98109
"""Volta para a página inicial."""
99-
self.current_browser().setUrl(QUrl("https://www.google.com"))
110+
browser = self.current_browser()
111+
if browser:
112+
browser.setUrl(QUrl("https://www.google.com"))
100113

101114
def navigate_to_url(self):
102115
"""
103116
Navega para a URL digitada, adiciona HTTPS por padrão
104117
ou faz uma pesquisa no Google.
105118
"""
106119
url = self.url_bar.text()
120+
browser = self.current_browser()
121+
if not browser: # Se não houver navegador ativo, não faz nada
122+
return
107123

108124
# 1. Adiciona https:// se não houver protocolo
109125
if not url.startswith("http://") and not url.startswith("https://"):
110126
# Verifica se parece um domínio (contém pelo menos um ponto)
111-
if "." in url and not " " in url:
127+
if "." in url and not " " in url: # Garante que não é uma frase com espaços
112128
url = "https://" + url # Tenta HTTPS por padrão
113129
else:
114130
# 2. Se não parecer uma URL, faz uma pesquisa no Google
115131
search_query = QUrl.toPercentEncoding(url)
116132
url = f"https://www.google.com/search?q={search_query}"
117133

118-
self.current_browser().setUrl(QUrl(url))
134+
browser.setUrl(QUrl(url))
119135
self.update_buttons_state() # Atualiza o estado dos botões após a navegação
120136

121137
def update_urlbar(self, q, browser=None):
122138
"""Atualiza a barra de URL com a URL da guia atual."""
123-
if browser != self.current_browser():
124-
# Impede que URLs de guias em segundo plano atualizem a barra principal
125-
return
126-
127-
self.url_bar.setText(q.toString())
128-
self.url_bar.setCursorPosition(0) # Volta o cursor para o início
139+
# Apenas atualiza se o navegador passado for o navegador atual ou se não houver um navegador específico
140+
if browser is None or browser == self.current_browser():
141+
self.url_bar.setText(q.toString())
142+
self.url_bar.setCursorPosition(0) # Volta o cursor para o início
129143

130144
def update_buttons_state(self):
131145
"""Atualiza o estado (habilitado/desabilitado) dos botões de navegação."""
132146
browser = self.current_browser()
133-
if browser:
134-
# Encontra as ações na toolbar para atualizá-las
135-
for action in self.toolbar.actions():
136-
if action.text() == "⬅️ Voltar":
137-
action.setEnabled(browser.url() != QUrl("https://www.google.com") and browser.canGoBack())
138-
elif action.text() == "➡️ Avançar":
139-
action.setEnabled(browser.canGoForward())
140-
else:
141-
# Desabilita todos os botões se não houver navegador ativo
142-
for action in self.toolbar.actions():
143-
action.setEnabled(False)
147+
# Itera sobre as ações da toolbar para encontrar os botões e atualizar seus estados
148+
for action in self.toolbar.actions():
149+
if action.text() == "⬅️ Voltar":
150+
# Habilita "Voltar" se houver um navegador e puder voltar, e não estiver na página inicial
151+
action.setEnabled(browser is not None and browser.canGoBack() and browser.url() != QUrl("https://www.google.com"))
152+
elif action.text() == "➡️ Avançar":
153+
action.setEnabled(browser is not None and browser.canGoForward())
154+
elif action.text() == "🔄 Recarregar":
155+
action.setEnabled(browser is not None) # Recarregar sempre que houver um navegador
156+
elif action.text() == "🏠 Início":
157+
action.setEnabled(browser is not None) # Home sempre que houver um navegador
158+
elif action.text() == "➕ Nova Guia":
159+
action.setEnabled(True) # Nova guia sempre habilitada
160+
144161

145162
# Função principal para rodar o aplicativo
146163
if __name__ == "__main__":

0 commit comments

Comments
 (0)