Sep-08-2021, 07:45 AM
This is what i got so far, but it opens full window on mac.... in windows it opens fine, do you know how to get it to work on mac properly?
import ctypes import platform import sys import tkinter as tk from cefpython3 import cefpython as cef from tkinter import * from tkinter import ttk import tkinter as tk import requests from bs4 import BeautifulSoup import webbrowser import tkinterweb # platforms WINDOWS = platform.system() == 'Windows' LINUX = platform.system() == 'Linux' MAC = platform.system() == 'Darwin' class BrowserFrame(tk.Frame): def __init__(self, master=None, **kw): super().__init__(master, **kw) self.browser = None self.bind('<Configure>', self.on_configure) def get_window_handle(self): if MAC: from AppKit import NSApp import objc return objc.pyobjc_id(NSApp.windows()[-1].contentView()) elif self.winfo_id() > 0: return self.winfo_id() else: raise Exception('Could not obtain window handle!') def on_configure(self, event): if self.browser is None: # create the browser and embed it in current frame rect = [0, 0, self.winfo_width(), self.winfo_height()] cef_winfo = cef.WindowInfo() win_id = self.get_window_handle() cef_winfo.SetAsChild(win_id, rect) self.browser = cef.CreateBrowserSync(cef_winfo, url=urlset) # start the browser handling loop self.cef_loop() # resize the browser if WINDOWS: ctypes.windll.user32.SetWindowPos( self.browser.GetWindowHandle(), 0, 0, 0, event.width, event.height, 0x0002) elif LINUX: self.browser.SetBounds(0, 0, event.width, event.height) def cef_loop(self): cef.MessageLoopWork() self.after(10, self.cef_loop) def main(): sys.excepthook = cef.ExceptHook # To shutdown all CEF processes on error root = tk.Tk() w, h = root.winfo_screenwidth(), root.winfo_screenheight() root.geometry("%dx%d+0+0" % (w, h)) root.title('Test') settings = {} if MAC: settings["external_message_pump"] = True cef.Initialize(settings=settings) container = ttk.Frame(root) canvas = tk.Canvas(container) scrollbar_x = ttk.Scrollbar(container, orient="horizontal", command=canvas.xview) scrollbar_y = ttk.Scrollbar(container, orient="vertical", command=canvas.yview) scrollable_frame = ttk.Frame(canvas) scrollable_frame.bind("<Configure>", lambda e: canvas.configure(scrollregion=canvas.bbox("all"))) canvas.create_window((0, 0), window=scrollable_frame, anchor="nw") canvas.configure(xscrollcommand=scrollbar_x.set) canvas.configure(yscrollcommand=scrollbar_y.set) stathomelib = LabelFrame(scrollable_frame, text="Library", padx=5, pady=5, highlightbackground="black", highlightthickness=2) stathomelib.grid(row=3, column=0, columnspan=2, sticky=NW, pady=2) stathomedoc = LabelFrame(scrollable_frame, text="Documentation", padx=5, pady=5, highlightbackground="black", highlightthickness=2) stathomedoc.grid(row=3, column=2, columnspan=2, sticky=NW, pady=2) home_browser = LabelFrame(scrollable_frame, text="", padx=5, pady=5, highlightbackground="black",highlightthickness=2) home_browser.grid(row=0, column=99, rowspan=99, sticky='ne', pady=2) valido_browser = tk.IntVar() valido_browser.set(False) checkbrowser = tk.Checkbutton(home_browser, fg="blue", selectcolor="red", text="Open in Browser",variable=valido_browser) checkbrowser.grid(row=0, column=0, columnspan=9, sticky="wn") BrowserFrame(home_browser).grid(row=2, column=0, columnspan=9, sticky="wn") def choose_browser(urlbook): if valido_browser.get() == 1: webbrowser.open(urlbook) else: global urlset urlset = urlbook choose_browser("http://www.google.com") global varLnkOrder varLnkOrder = "" varLbook = open("Confs/bookmarks.txt", "r").readlines() try: for line in varLbook: undef = "" if ":stathomelib" in line: varLnkOrder = stathomelib taman = 43 c = 0 i = 0 elif ":stathomedoc" in line: varLnkOrder = stathomedoc taman = 43 c = 0 i = 0 if len(line) > 1: titul, urlbook = line.split('<=>') if len(titul) > 1: link1 = Label(varLnkOrder, width=taman, text=titul + str(undef), justify="left", anchor="center", fg="blue", cursor="draft_large") link1.grid(row=i, column=c, sticky="n", pady=2) link1.bind("<Button-1>", lambda e, urlbook=urlbook: choose_browser(urlbook.rstrip())) i += 1 line == "" except Exception as e: from main import log_error log_error(e, "Bookmark_Builder") container.pack(expand=1, fill="both") scrollbar_x.pack(side="bottom", fill="x") scrollbar_y.pack(side="right", fill="y") canvas.pack(side="bottom", fill="both", expand=True) root.mainloop() if __name__ == '__main__': main()