Python Forum
[Tkinter] can i had a cefpython3 to a labelframe
Thread Rating:
  • 0 Vote(s) - 0 Average
  • 1
  • 2
  • 3
  • 4
  • 5
[Tkinter] can i had a cefpython3 to a labelframe
#19
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()
Reply


Messages In This Thread
can i had a cefpython3 to a labelframe - by razs - Aug-28-2021, 10:47 AM
RE: can i had a cefpython3 to a labelframe - by razs - Sep-08-2021, 07:45 AM

Possibly Related Threads…
Thread Author Replies Views Last Post
  tkinter destroy label inside labelFrame Nick_tkinter 3 4,639 Sep-17-2023, 03:38 PM
Last Post: munirashraf9821
  Issue in Tkinter with winfo_class() and LabelFrame ReDefendeur 1 2,786 Oct-05-2020, 05:52 AM
Last Post: Jeff900

Forum Jump:

User Panel Messages

Announcements
Announcement #1 8/1/2020
Announcement #2 8/2/2020
Announcement #3 8/6/2020