progress on tool bar

This commit is contained in:
Huy Pham 2019-09-27 14:19:48 -07:00
parent b1bac1dda0
commit 5ce340b8b0
2 changed files with 122 additions and 154 deletions

View file

@ -36,15 +36,16 @@ class Application(tk.Frame):
def create_widgets(self):
edit_frame = tk.Frame(self)
edit_frame.pack(side=tk.LEFT, fill=tk.Y, ipadx=2, ipady=2)
exec_frame = tk.Frame(edit_frame)
exec_frame.pack(side=tk.TOP)
core_editbar = CoreToolbar(self.master, edit_frame, exec_frame, self.menubar)
core_editbar = CoreToolbar(self.master, edit_frame, self.menubar)
core_editbar.create_toolbar()
self.canvas = CanvasGraph(
self, background="#cccccc", scrollregion=(0, 0, 1000, 1000)
)
self.canvas.pack(fill=tk.BOTH, expand=True)
# self.canvas.create_line(0, 0, 10, 10)
scroll_x = tk.Scrollbar(
self.canvas, orient=tk.HORIZONTAL, command=self.canvas.xview
)

View file

@ -1,7 +1,6 @@
import logging
import tkinter as tk
import coretk.toolbaraction as tbaction
from coretk.images import Images
@ -10,7 +9,7 @@ class CoreToolbar(object):
Core toolbar class
"""
def __init__(self, master, edit_frame, exec_frame, menubar):
def __init__(self, master, edit_frame, menubar):
"""
Create a CoreToolbar instance
@ -18,7 +17,6 @@ class CoreToolbar(object):
"""
self.master = master
self.edit_frame = edit_frame
self.execution_frame = exec_frame
self.menubar = menubar
self.radio_value = tk.IntVar()
self.exec_radio_value = tk.IntVar()
@ -35,8 +33,6 @@ class CoreToolbar(object):
self.marker_option_menu = None
self.network_layer_option_menu = None
self.execution_frame = None
def load_toolbar_images(self):
"""
Load the images that appear in core toolbar
@ -85,7 +81,19 @@ class CoreToolbar(object):
if self.marker_option_menu and self.marker_option_menu.winfo_exists():
self.marker_option_menu.destroy()
def create_buttons(self, img, func, frame, main_button):
def destroy_children_widgets(self, parent):
"""
Destroy all children of a parent widget
:param tkinter.Frame parent: parent frame
:return: nothing
"""
for i in parent.winfo_children():
if i.winfo_name() != "!frame":
i.destroy()
def create_button(self, img, func, frame, main_button):
"""
Create button and put it on the frame
@ -99,6 +107,40 @@ class CoreToolbar(object):
button.pack(side=tk.LEFT, pady=1)
button.bind("<Button-1>", lambda mb: func(main_button))
def create_radio_button(self, frame, image, func, variable, value):
button = tk.Radiobutton(
frame,
indicatoron=False,
width=self.width,
height=self.height,
image=image,
value=value,
variable=variable,
command=func,
)
button.pack(side=tk.TOP, pady=1)
def create_regular_button(self, frame, image, func):
button = tk.Button(
frame, width=self.width, height=self.height, image=image, command=func
)
button.pack(side=tk.TOP, pady=1)
def draw_button_menu_frame(self, edit_frame, option_frame, main_button):
"""
Draw option menu frame right next to the main button
:param tkinter.Frame edit_frame: parent frame of the main button
:param tkinter.Frame option_frame: option frame to draw
:param tkinter.Radiobutton main_button: the main button
:return: nothing
"""
first_button = edit_frame.winfo_children()[0]
_x = main_button.winfo_rootx() - first_button.winfo_rootx() + 40
_y = main_button.winfo_rooty() - first_button.winfo_rooty() - 1
option_frame.place(x=_x, y=_y)
def bind_widgets_before_frame_hide(self, frame):
"""
Bind the widgets to a left click, when any of the widgets is clicked, the menu option frame is destroyed before
@ -122,68 +164,13 @@ class CoreToolbar(object):
def click_selection_tool(self):
logging.debug("Click SELECTION TOOL")
def create_selection_tool_button(self):
"""
Create selection tool button
:return: nothing
"""
selection_tool_image = Images.get("select")
self.selection_tool_button = tk.Radiobutton(
self.edit_frame,
indicatoron=False,
variable=self.radio_value,
value=1,
width=self.width,
height=self.height,
image=selection_tool_image,
command=lambda: self.click_selection_tool(),
)
self.selection_tool_button.pack(side=tk.TOP, pady=1)
def click_start_stop_session_tool(self):
logging.debug("Click START STOP SESSION button")
for i in self.edit_frame.winfo_children():
i.destroy()
self.create_runtime_tool_bar()
self.destroy_children_widgets(self.edit_frame)
self.create_runtime_toolbar()
def create_start_stop_session_button(self):
"""
Create start stop session button
:return: nothing
"""
start_image = Images.get("start")
start_button = tk.Radiobutton(
self.edit_frame,
indicatoron=False,
variable=self.radio_value,
value=2,
width=self.width,
height=self.height,
image=start_image,
command=lambda: self.click_start_stop_session_tool(),
)
start_button.pack(side=tk.TOP, pady=1)
def create_link_tool_button(self):
"""
Create link tool button
:return: nothing
"""
link_image = Images.get("link")
link_button = tk.Radiobutton(
self.edit_frame,
indicatoron=False,
variable=self.radio_value,
value=3,
width=self.width,
height=self.height,
image=link_image,
command=lambda: tbaction.click_link_tool(),
)
link_button.pack(side=tk.TOP, pady=1)
def click_link_tool(self):
logging.debug("Click LINK button")
def pick_router(self, main_button):
self.network_layer_option_menu.destroy()
@ -229,7 +216,7 @@ class CoreToolbar(object):
"""
# create a frame and add buttons to it
self.destroy_previous_frame()
option_frame = tk.Frame(self.master)
option_frame = tk.Frame(self.master, padx=1, pady=1)
img_list = [
Images.get("router"),
Images.get("host"),
@ -249,22 +236,12 @@ class CoreToolbar(object):
self.pick_editnode,
]
for i in range(len(img_list)):
self.create_buttons(
self.create_button(
img_list[i], func_list[i], option_frame, network_layer_button
)
# place frame at a calculated position as well as keep a reference of that frame
_x = (
network_layer_button.winfo_rootx()
- self.selection_tool_button.winfo_rootx()
+ 40
)
_y = (
network_layer_button.winfo_rooty()
- self.selection_tool_button.winfo_rooty()
- 1
)
option_frame.place(x=_x, y=_y)
self.draw_button_menu_frame(self.edit_frame, option_frame, network_layer_button)
self.network_layer_option_menu = option_frame
# destroy the frame before any further actions on other widgets
@ -283,7 +260,7 @@ class CoreToolbar(object):
self.edit_frame,
indicatoron=False,
variable=self.radio_value,
value=4,
value=3,
width=self.width,
height=self.height,
image=router_image,
@ -325,7 +302,7 @@ class CoreToolbar(object):
"""
# create a frame and add buttons to it
self.destroy_previous_frame()
option_frame = tk.Frame(self.master)
option_frame = tk.Frame(self.master, padx=1, pady=1)
img_list = [
Images.get("hub"),
Images.get("switch"),
@ -341,23 +318,12 @@ class CoreToolbar(object):
self.pick_tunnel,
]
for i in range(len(img_list)):
self.create_buttons(
self.create_button(
img_list[i], func_list[i], option_frame, link_layer_button
)
# place frame at a calculated position as well as keep a reference of the frame
_x = (
link_layer_button.winfo_rootx()
- self.selection_tool_button.winfo_rootx()
+ 40
)
_y = (
link_layer_button.winfo_rooty()
- self.selection_tool_button.winfo_rooty()
- 1
)
option_frame.place(x=_x, y=_y)
self.master.update()
self.draw_button_menu_frame(self.edit_frame, option_frame, link_layer_button)
self.link_layer_option_menu = option_frame
# destroy the frame before any further actions on other widgets
@ -376,7 +342,7 @@ class CoreToolbar(object):
self.edit_frame,
indicatoron=False,
variable=self.radio_value,
value=5,
value=4,
width=self.width,
height=self.height,
image=hub_image,
@ -414,7 +380,7 @@ class CoreToolbar(object):
"""
# create a frame and add buttons to it
self.destroy_previous_frame()
option_frame = tk.Frame(self.master)
option_frame = tk.Frame(self.master, padx=1, pady=1)
img_list = [
Images.get("marker"),
Images.get("oval"),
@ -428,13 +394,10 @@ class CoreToolbar(object):
self.pick_text,
]
for i in range(len(img_list)):
self.create_buttons(img_list[i], func_list[i], option_frame, main_button)
self.create_button(img_list[i], func_list[i], option_frame, main_button)
# place the frame at a calculated position as well as keep a reference of that frame
_x = main_button.winfo_rootx() - self.selection_tool_button.winfo_rootx() + 40
_y = main_button.winfo_rooty() - self.selection_tool_button.winfo_rooty() - 1
option_frame.place(x=_x, y=_y)
self.master.update()
self.draw_button_menu_frame(self.edit_frame, option_frame, main_button)
self.marker_option_menu = option_frame
# destroy the frame before any further actions on other widgets
@ -453,7 +416,7 @@ class CoreToolbar(object):
self.edit_frame,
indicatoron=False,
variable=self.radio_value,
value=6,
value=5,
width=self.width,
height=self.height,
image=marker_image,
@ -461,50 +424,29 @@ class CoreToolbar(object):
)
marker_main_button.pack(side=tk.TOP, pady=1)
def create_selection_tool_button_for_exec(self):
for i in self.edit_frame.winfo_children():
i.destroy()
selection_tool_image = Images.get("select")
for i in range(7):
button = tk.Radiobutton(
self.edit_frame,
indicatoron=False,
variable=self.radio_value,
value=1,
width=self.width,
height=self.height,
image=selection_tool_image,
command=lambda: tbaction.click_selection_tool(),
)
button.pack(side=tk.TOP, pady=1)
def create_toolbar(self):
self.load_toolbar_images()
self.create_selection_tool_button()
self.create_start_stop_session_button()
self.create_link_tool_button()
self.create_regular_button(
self.edit_frame, Images.get("start"), self.click_start_stop_session_tool
)
self.create_radio_button(
self.edit_frame,
Images.get("select"),
self.click_selection_tool,
self.radio_value,
1,
)
self.create_radio_button(
self.edit_frame,
Images.get("link"),
self.click_link_tool,
self.radio_value,
2,
)
self.create_network_layer_button()
self.create_link_layer_button()
self.create_marker_button()
def create_radio_button(self, frame, image, func, value):
button = tk.Radiobutton(
frame,
indicatoron=False,
width=self.width,
height=self.height,
image=image,
value=value,
variable=self.exec_radio_value,
)
button.pack(side=tk.TOP, pady=1)
def create_regular_button(self, frame, image, func):
button = tk.Button(
frame, width=self.width, height=self.height, image=image, command=func
)
button.pack(side=tk.TOP, pady=1)
def create_observe_button(self):
menu_button = tk.Menubutton(
self.edit_frame,
@ -512,6 +454,7 @@ class CoreToolbar(object):
width=self.width,
height=self.height,
direction=tk.RIGHT,
relief=tk.RAISED,
)
menu_button.menu = tk.Menu(menu_button, tearoff=0)
menu_button["menu"] = menu_button.menu
@ -534,31 +477,55 @@ class CoreToolbar(object):
menu_button.menu.add_command(label="PIM neighbors")
menu_button.menu.add_command(label="Edit...")
def click_stop_button(self):
logging.debug("Click on STOP button ")
self.destroy_children_widgets(self.edit_frame)
self.create_toolbar()
def click_run_button(self):
logging.debug("Click on RUN button")
def click_stop_button(self):
logging.debug("Click on STOP button ")
for i in self.edit_frame.winfo_children():
i.destroy()
self.create_toolbar()
def click_plot_button(self):
logging.debug("Click on plot button")
def create_runtime_tool_bar(self):
self.create_radio_button(
self.edit_frame, Images.get("select"), self.click_selection_tool, 1
)
def click_marker_button(self):
logging.debug("Click on marker button")
def click_two_node_button(self):
logging.debug("Click TWONODE button")
def create_runtime_toolbar(self):
self.create_regular_button(
self.edit_frame, Images.get("stop"), self.click_stop_button
)
self.create_radio_button(
self.edit_frame,
Images.get("select"),
self.click_selection_tool,
self.exec_radio_value,
1,
)
self.create_observe_button()
self.create_radio_button(
self.edit_frame, Images.get("plot"), self.click_selection_tool, 2
self.edit_frame,
Images.get("plot"),
self.click_plot_button,
self.exec_radio_value,
2,
)
self.create_radio_button(
self.edit_frame, Images.get("marker"), self.click_selection_tool, 3
self.edit_frame,
Images.get("marker"),
self.click_marker_button,
self.exec_radio_value,
3,
)
self.create_radio_button(
self.edit_frame, Images.get("twonode"), self.click_selection_tool, 4
self.edit_frame,
Images.get("twonode"),
self.click_two_node_button,
self.exec_radio_value,
4,
)
self.create_regular_button(
self.edit_frame, Images.get("run"), self.click_run_button