Source code for xtb_step.tk_xtb
# -*- coding: utf-8 -*-
"""The graphical part of a xTB step"""
import pprint # noqa: F401
import tkinter as tk # noqa: F401
import xtb_step # noqa: F401
import seamm
from seamm_util import ureg, Q_, units_class # noqa: F401
[docs]
class TkxTB(seamm.TkNode):
"""
The graphical part of a xTB step in a flowchart.
Attributes
----------
tk_flowchart : TkFlowchart = None
The flowchart that we belong to.
node : Node = None
The corresponding node of the non-graphical flowchart
canvas: tkCanvas = None
The Tk Canvas to draw on
dialog : Dialog
The Pmw dialog object
x : int = None
The x-coordinate of the center of the picture of the node
y : int = None
The y-coordinate of the center of the picture of the node
w : int = 200
The width in pixels of the picture of the node
h : int = 50
The height in pixels of the picture of the node
self[widget] : dict
A dictionary of tk widgets built using the information
contained in xTB_parameters.py
See Also
--------
xTB, TkxTB,
xTBParameters,
"""
def __init__(
self,
tk_flowchart=None,
node=None,
namespace="org.molssi.seamm.xtb.tk",
canvas=None,
x=None,
y=None,
w=200,
h=50,
):
"""
Initialize a graphical node.
Parameters
----------
tk_flowchart: Tk_Flowchart
The graphical flowchart that we are in.
node: Node
The non-graphical node for this step.
namespace: str
The stevedore namespace for finding sub-nodes.
canvas: Canvas
The Tk canvas to draw on.
x: float
The x position of the nodes center on the canvas.
y: float
The y position of the nodes cetner on the canvas.
w: float
The nodes graphical width, in pixels.
h: float
The nodes graphical height, in pixels.
Returns
-------
None
"""
self.namespace = namespace
self.dialog = None
super().__init__(
tk_flowchart=tk_flowchart,
node=node,
canvas=canvas,
x=x,
y=y,
w=w,
h=h,
)
self.create_dialog()
[docs]
def create_dialog(self):
"""
Create the dialog. A set of widgets will be chosen by default
based on what is specified in the xTB_parameters
module.
Parameters
----------
None
Returns
-------
None
See Also
--------
TkxTB.reset_dialog
"""
frame = super().create_dialog(title="xTB")
# make it large!
screen_w = self.dialog.winfo_screenwidth()
screen_h = self.dialog.winfo_screenheight()
w = int(0.9 * screen_w)
h = int(0.8 * screen_h)
x = int(0.05 * screen_w / 2)
y = int(0.1 * screen_h / 2)
self.dialog.geometry(f"{w}x{h}+{x}+{y}")
self.tk_subflowchart = seamm.TkFlowchart(
master=frame, flowchart=self.node.subflowchart, namespace=self.namespace
)
self.tk_subflowchart.draw()
[docs]
def right_click(self, event):
"""
Handles the right click event on the node.
Parameters
----------
event : Tk Event
Returns
-------
None
See Also
--------
TkxTB.edit
"""
super().right_click(event)
self.popup_menu.add_command(label="Edit..", command=self.edit)
self.popup_menu.tk_popup(event.x_root, event.y_root, 0)