pygui small tweaks to run tool dialog to simplify text and properly resize

This commit is contained in:
Blake Harnden 2020-04-23 00:11:13 -07:00
parent a662fcc62c
commit aa2537753e

View file

@ -1,87 +1,78 @@
import tkinter as tk import tkinter as tk
from tkinter import ttk from tkinter import ttk
from core.api.grpc import core_pb2
from core.gui.dialogs.dialog import Dialog from core.gui.dialogs.dialog import Dialog
from core.gui.themes import FRAME_PAD, PADY from core.gui.nodeutils import NodeUtils
from core.gui.themes import FRAME_PAD, PADX, PADY
from core.gui.widgets import CodeText, ListboxScroll from core.gui.widgets import CodeText, ListboxScroll
class RunToolDialog(Dialog): class RunToolDialog(Dialog):
def __init__(self, master, app): def __init__(self, master, app) -> None:
super().__init__(master, app, "Run Tool", modal=True) super().__init__(master, app, "Run Tool", modal=True)
self.cmd = tk.StringVar(value="ps ax") self.cmd = tk.StringVar(value="ps ax")
self.app = app self.app = app
self.result = None self.result = None
self.node_list = None self.node_list = None
self.executable_nodes = {} self.executable_nodes = {}
self.store_nodes() self.store_nodes()
self.draw() self.draw()
def store_nodes(self): def store_nodes(self) -> None:
""" """
store all CORE nodes (nodes that execute commands) from all existing nodes store all CORE nodes (nodes that execute commands) from all existing nodes
""" """
for nid, node in self.app.core.canvas_nodes.items(): for nid, node in self.app.core.canvas_nodes.items():
if node.core_node.type == core_pb2.NodeType.DEFAULT: if NodeUtils.is_container_node(node.core_node.type):
self.executable_nodes[node.core_node.name] = nid self.executable_nodes[node.core_node.name] = nid
def draw(self): def draw(self) -> None:
self.top.rowconfigure(0, weight=1) self.top.rowconfigure(0, weight=1)
self.top.columnconfigure(0, weight=5) self.top.columnconfigure(0, weight=1)
self.top.columnconfigure(1, weight=1)
self.draw_command_frame() self.draw_command_frame()
self.draw_nodes_frame() self.draw_nodes_frame()
return
def draw_command_frame(self): def draw_command_frame(self) -> None:
# the main frame # the main frame
frame = ttk.Frame(self.top) frame = ttk.Frame(self.top)
frame.grid(row=0, column=0, sticky="nsew") frame.grid(row=0, column=0, sticky="nsew", padx=PADX)
frame.columnconfigure(0, weight=1) frame.columnconfigure(0, weight=1)
frame.rowconfigure(0, weight=1)
frame.rowconfigure(1, weight=1) frame.rowconfigure(1, weight=1)
labeled_frame = ttk.LabelFrame(frame, text="Command line", padding=FRAME_PAD) labeled_frame = ttk.LabelFrame(frame, text="Command", padding=FRAME_PAD)
labeled_frame.grid(row=0, column=0, sticky="nsew", pady=PADY) labeled_frame.grid(sticky="ew", pady=PADY)
labeled_frame.rowconfigure(0, weight=1) labeled_frame.rowconfigure(0, weight=1)
labeled_frame.columnconfigure(0, weight=1) labeled_frame.columnconfigure(0, weight=1)
entry = ttk.Entry(labeled_frame, textvariable=self.cmd) entry = ttk.Entry(labeled_frame, textvariable=self.cmd)
entry.grid(sticky="ew") entry.grid(sticky="ew")
# results frame # results frame
labeled_frame = ttk.LabelFrame(frame, text="Command results", padding=FRAME_PAD) labeled_frame = ttk.LabelFrame(frame, text="Output", padding=FRAME_PAD)
labeled_frame.grid(row=1, column=0, sticky="nsew", pady=PADY) labeled_frame.grid(sticky="nsew", pady=PADY)
labeled_frame.columnconfigure(0, weight=1) labeled_frame.columnconfigure(0, weight=1)
labeled_frame.rowconfigure(0, weight=5) labeled_frame.rowconfigure(0, weight=1)
labeled_frame.rowconfigure(1, weight=1)
self.result = CodeText(labeled_frame) self.result = CodeText(labeled_frame)
self.result.text.config(state=tk.DISABLED, height=15) self.result.text.config(state=tk.DISABLED, height=15)
self.result.grid(sticky="nsew") self.result.grid(sticky="nsew", pady=PADY)
button_frame = ttk.Frame(labeled_frame, padding=FRAME_PAD) button_frame = ttk.Frame(labeled_frame)
button_frame.grid(sticky="nsew") button_frame.grid(sticky="nsew")
button_frame.columnconfigure(0, weight=1) button_frame.columnconfigure(0, weight=1)
button_frame.columnconfigure(1, weight=1) button_frame.columnconfigure(1, weight=1)
button = ttk.Button(button_frame, text="Run", command=self.click_run) button = ttk.Button(button_frame, text="Run", command=self.click_run)
button.grid(sticky="nsew") button.grid(sticky="ew", padx=PADX)
button = ttk.Button(button_frame, text="Close", command=self.destroy) button = ttk.Button(button_frame, text="Close", command=self.destroy)
button.grid(row=0, column=1, sticky="nsew") button.grid(row=0, column=1, sticky="ew")
def draw_nodes_frame(self): def draw_nodes_frame(self) -> None:
labeled_frame = ttk.LabelFrame( labeled_frame = ttk.LabelFrame(self.top, text="Nodes", padding=FRAME_PAD)
self.top, text="Run on these nodes", padding=FRAME_PAD
)
labeled_frame.grid(row=0, column=1, sticky="nsew") labeled_frame.grid(row=0, column=1, sticky="nsew")
labeled_frame.columnconfigure(0, weight=1) labeled_frame.columnconfigure(0, weight=1)
labeled_frame.rowconfigure(0, weight=5) labeled_frame.rowconfigure(0, weight=1)
labeled_frame.rowconfigure(1, weight=1)
self.node_list = ListboxScroll(labeled_frame) self.node_list = ListboxScroll(labeled_frame)
self.node_list.listbox.config(selectmode=tk.MULTIPLE) self.node_list.listbox.config(selectmode=tk.MULTIPLE)
self.node_list.grid(sticky="nsew") self.node_list.grid(sticky="nsew", pady=PADY)
for n in sorted(self.executable_nodes.keys()): for n in sorted(self.executable_nodes.keys()):
self.node_list.listbox.insert(tk.END, n) self.node_list.listbox.insert(tk.END, n)
@ -91,19 +82,20 @@ class RunToolDialog(Dialog):
button_frame.columnconfigure(1, weight=1) button_frame.columnconfigure(1, weight=1)
button = ttk.Button(button_frame, text="All", command=self.click_all) button = ttk.Button(button_frame, text="All", command=self.click_all)
button.grid(sticky="nsew") button.grid(sticky="nsew", padx=PADX)
button = ttk.Button(button_frame, text="None", command=self.click_none) button = ttk.Button(button_frame, text="None", command=self.click_none)
button.grid(row=0, column=1, sticky="nsew") button.grid(row=0, column=1, sticky="nsew")
def click_all(self): def click_all(self) -> None:
self.node_list.listbox.selection_set(0, self.node_list.listbox.size() - 1) self.node_list.listbox.selection_set(0, self.node_list.listbox.size() - 1)
def click_none(self): def click_none(self) -> None:
self.node_list.listbox.selection_clear(0, self.node_list.listbox.size() - 1) self.node_list.listbox.selection_clear(0, self.node_list.listbox.size() - 1)
def click_run(self): def click_run(self) -> None:
""" """
run the command on each of the selected nodes and display the output to result text box Run the command on each of the selected nodes and display the output to result
text box.
""" """
command = self.cmd.get().strip() command = self.cmd.get().strip()
self.result.text.config(state=tk.NORMAL) self.result.text.config(state=tk.NORMAL)