__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
# -*- coding: utf-8 -*-
import tkinter as tk
import tkinter.font as tk_font
from thonny import get_workbench, ui_utils
from thonny.common import ValueInfo
from thonny.languages import tr
from thonny.ui_utils import TreeFrame
MAX_REPR_LENGTH_IN_GRID = 100
def format_object_id(object_id):
# this format aligns with how Python shows memory addresses
if object_id is None:
return None
else:
return "0x" + hex(object_id)[2:] # .rjust(8,'0')
def parse_object_id(object_id_repr):
return int(object_id_repr, base=16)
class MemoryFrame(TreeFrame):
def __init__(self, master, columns, show_statusbar=False):
TreeFrame.__init__(self, master, columns, show_statusbar=show_statusbar)
font = tk_font.nametofont("TkDefaultFont").copy()
font.configure(underline=True)
self.tree.tag_configure("hovered", font=font)
def stop_debugging(self):
self._clear_tree()
def show_selected_object_info(self):
object_id = self.get_object_id()
if object_id is not None:
get_workbench().event_generate("ObjectSelect", object_id=object_id)
def get_object_id(self):
iid = self.tree.focus()
if iid != "":
# NB! Assuming id is second column!
id_str = self.tree.item(iid)["values"][1]
if id_str in ["", None, "None"]:
return None
return parse_object_id(id_str)
return None
class VariablesFrame(MemoryFrame):
def __init__(self, master):
MemoryFrame.__init__(self, master, ("name", "id", "value"))
self.tree.column("name", width=120, anchor=tk.W, stretch=False)
self.tree.column("id", width=450, anchor=tk.W, stretch=True)
self.tree.column("value", width=450, anchor=tk.W, stretch=True)
self.tree.heading("name", text=tr("Name"), anchor=tk.W)
self.tree.heading("id", text=tr("Value ID"), anchor=tk.W)
self.tree.heading("value", text=tr("Value"), anchor=tk.W)
get_workbench().bind("ShowView", self._update_memory_model, True)
get_workbench().bind("HideView", self._update_memory_model, True)
self._update_memory_model()
self.tree.tag_configure(
"group_title",
font="BoldTkDefaultFont",
background=ui_utils.lookup_style_option(".", "background"),
)
def destroy(self):
MemoryFrame.destroy(self)
get_workbench().unbind("ShowView", self._update_memory_model)
get_workbench().unbind("HideView", self._update_memory_model)
def _update_memory_model(self, event=None):
if get_workbench().in_heap_mode():
self.tree.configure(displaycolumns=("name", "id"))
# self.tree.columnconfigure(1, weight=1, width=400)
# self.tree.columnconfigure(2, weight=0)
else:
self.tree.configure(displaycolumns=("name", "value"))
# self.tree.columnconfigure(1, weight=0)
# self.tree.columnconfigure(2, weight=1, width=400)
def update_variables(self, all_variables):
self._clear_tree()
if not all_variables:
return
if isinstance(all_variables, list):
groups = all_variables
else:
groups = [("", all_variables)]
for group_title, variables in groups:
if group_title:
node_id = self.tree.insert("", "end", tags=("group_title",))
self.tree.set(node_id, "name", group_title)
for name in sorted(variables.keys()):
if not name.startswith("__"):
node_id = self.tree.insert("", "end", tags="item")
self.tree.set(node_id, "name", name)
if isinstance(variables[name], ValueInfo):
description = variables[name].repr
id_str = variables[name].id
else:
description = variables[name]
id_str = None
self.tree.set(node_id, "id", format_object_id(id_str))
self.tree.set(node_id, "value", description)
def on_select(self, event):
self.show_selected_object_info()
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| __pycache__ | Folder | 0755 |
|
|
| dbus | Folder | 0755 |
|
|
| locale | Folder | 0755 |
|
|
| plugins | Folder | 0755 |
|
|
| res | Folder | 0755 |
|
|
| test | Folder | 0755 |
|
|
| vendored_libs | Folder | 0755 |
|
|
| VERSION | File | 5 B | 0644 |
|
| __init__.py | File | 16.76 KB | 0644 |
|
| __main__.py | File | 78 B | 0644 |
|
| assistance.py | File | 34.12 KB | 0644 |
|
| ast_utils.py | File | 6.06 KB | 0644 |
|
| backend.py | File | 32.82 KB | 0644 |
|
| base_file_browser.py | File | 52.3 KB | 0644 |
|
| codeview.py | File | 21.33 KB | 0644 |
|
| common.py | File | 23.16 KB | 0644 |
|
| config.py | File | 6.27 KB | 0644 |
|
| config_ui.py | File | 5.57 KB | 0644 |
|
| defaults.ini | File | 335 B | 0644 |
|
| editor_helpers.py | File | 12.44 KB | 0644 |
|
| editors.py | File | 41.94 KB | 0644 |
|
| export.py | File | 1.52 KB | 0644 |
|
| first_run.py | File | 3.43 KB | 0644 |
|
| gridtable.py | File | 9.19 KB | 0644 |
|
| jedi_utils.py | File | 9.8 KB | 0644 |
|
| languages.py | File | 2.52 KB | 0644 |
|
| memory.py | File | 4.14 KB | 0644 |
|
| misc_utils.py | File | 19.55 KB | 0644 |
|
| roughparse.py | File | 32.96 KB | 0644 |
|
| rst_utils.py | File | 17.09 KB | 0644 |
|
| running.py | File | 56.77 KB | 0644 |
|
| shell.py | File | 78.13 KB | 0644 |
|
| terminal.py | File | 7.86 KB | 0644 |
|
| tktextext.py | File | 44.26 KB | 0644 |
|
| token_utils.py | File | 2.21 KB | 0644 |
|
| udisks.py | File | 4.8 KB | 0644 |
|
| ui_utils.py | File | 81.98 KB | 0644 |
|
| workbench.py | File | 96.77 KB | 0644 |
|
| workdlg.py | File | 16.27 KB | 0644 |
|