import tkinter as tk import socket import ssl # See https://tildegit.org/solderpunk/gemini-demo-1/src/branch/master/gemini-demo.py class Application(): def __init__(self): self.root = tk.Tk() self.nav_bar = NavBar(self) self.content = Content(self) self.root.mainloop() self.current_URL = "about:home" def updateContent(self): text = makeRequest("rdelaage.ovh", "gemini://rdelaage.ovh") self.content.setContent(text) self.current_URL = self.nav_bar.getURL() class NavBar(): def __init__(self, parent): self.parent = parent self.URL_var = tk.StringVar() self.root = tk.Frame(self.parent.root) self.root.grid(column=0, row=0) self.URL_bar = tk.Entry(self.root, textvariable=self.URL_var) self.URL_var.set("about:home") self.URL_bar.grid(column=0, row=0) self.go_button = tk.Button(self.root, text='Go !', command=self.parent.updateContent) self.go_button.grid(column=1, row=0) def getURL(self): return self.URL_var.get() class Content(): def __init__(self, parent): self.parent = parent self.root = tk.Frame(self.parent.root) self.root.grid(column=0, row=1) self.line = tk.Label(self.root, text="My home page") self.line.grid(column=0, row=0) def setContent(self, new_content): self.line["text"] = new_content def makeRequest(hostname, url): try: s = socket.create_connection((hostname, 1965)) context = ssl.SSLContext() context.check_hostname = False context.verify_mode = ssl.CERT_NONE s = context.wrap_socket(s, server_hostname = hostname) s.sendall((url + '\r\n').encode("UTF-8")) fp = s.makefile("rb") header = fp.readline().decode("UTF-8").strip() status, mime = header.split() print("STATUS : " + status) print("MIME : " + mime) body = fp.read().decode("UTF-8") return body except Exception as err: print(err) exit(1) app = Application()