Skip to content

Commit 33a5393

Browse files
committed
add a single tab browser with updated libraries
1 parent 2bc1c4d commit 33a5393

File tree

1 file changed

+79
-0
lines changed

1 file changed

+79
-0
lines changed

simple_browser.py

+79
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
import gi
2+
gi.require_version("Gtk", "3.0") # GUI toolkit
3+
gi.require_version("WebKit2", "4.0") # Web content engine
4+
from gi.repository import Gtk, WebKit2
5+
6+
#main class
7+
class Window():
8+
9+
def __init__(self, *args, **kwargs):
10+
# create window
11+
self.main_window = Gtk.Window(title = "My Browser")
12+
self.main_window.set_icon_from_file('images/icon.png') # set icon image file
13+
self.main_window.connect('destroy', Gtk.main_quit) # connect the "destroy" trigger to Gtk.main_quit procedure
14+
self.main_window.set_default_size(600, 600) # set window size
15+
16+
# create navigation bar
17+
self.navigation_bar = Gtk.HBox() # horizontal box navigation bar
18+
19+
# create UI elements for navigation bar
20+
self.button_back = Gtk.ToolButton(Gtk.STOCK_GO_BACK) # back button widget
21+
self.button_forward = Gtk.ToolButton(Gtk.STOCK_GO_FORWARD) # forward button widget
22+
self.button_refresh = Gtk.ToolButton(Gtk.STOCK_REFRESH) # refresh button widget
23+
self.main_address_bar = Gtk.Entry() # address bar entry widget
24+
25+
# connect triggers for UI elements with respective procedures
26+
self.button_back.connect('clicked', self.go_back) # trigger:click
27+
self.button_forward.connect('clicked', self.go_forward) # trigger:click
28+
self.button_refresh.connect('clicked', self.refresh_page) # trigger:click
29+
self.main_address_bar.connect('activate', self.load_page) # trigger:enter
30+
31+
# attach UI elements to navigation bar
32+
self.navigation_bar.pack_start(self.button_back, False, False, 0)
33+
self.navigation_bar.pack_start(self.button_forward, False, False, 0)
34+
self.navigation_bar.pack_start(self.button_refresh, False, False, 0)
35+
self.navigation_bar.pack_start(self.main_address_bar, True, True, 0)
36+
37+
# Create view for webpage
38+
self.web_view = WebKit2.WebView() # initialize webview
39+
self.web_view.load_uri('https://google.com') # default homepage
40+
self.web_view.connect('notify::title', self.change_title) # trigger: title change
41+
self.web_view.connect('notify::estimated-load-progress', self.change_url) # trigger: webpage is loading
42+
self.scrolled_window = Gtk.ScrolledWindow() # scrolling window widget
43+
self.scrolled_window.add(self.web_view)
44+
45+
# Add everything and initialize
46+
self.vbox_container = Gtk.VBox() # vertical box container
47+
self.vbox_container.pack_start(self.navigation_bar, False, False, 0)
48+
self.vbox_container.pack_start(self.scrolled_window, True, True, 0)
49+
50+
self.main_window.add(self.vbox_container)
51+
self.main_window.show_all()
52+
Gtk.main()
53+
54+
def load_page(self, widget):
55+
url = self.main_address_bar.get_text()
56+
if url.startswith("http://") or url.startswith("https://"):
57+
self.web_view.load_uri(url)
58+
else:
59+
url = "https://" + url
60+
self.main_address_bar.set_text(url)
61+
self.web_view.load_uri(url)
62+
63+
def change_title(self, widget, frame):
64+
self.main_window.set_title("Simple Browser - " + self.web_view.get_title())
65+
66+
def change_url(self, widget, frame):
67+
uri = self.web_view.get_uri()
68+
self.main_address_bar.set_text(uri)
69+
70+
def go_back(self, widget):
71+
self.web_view.go_back()
72+
73+
def go_forward(self, widget):
74+
self.web_view.go_forward()
75+
76+
def refresh_page(self, widget):
77+
self.web_view.reload()
78+
79+
main = Window()

0 commit comments

Comments
 (0)