TkInter wrapper for tcl/tk GUI: Difference between revisions

From ASCEND
Jump to navigation Jump to search
MarkJones (talk | contribs)
MarkJones (talk | contribs)
No edit summary
Line 1: Line 1:
This is a guide how you can check out the oldschool 90s tcl/tk interface of ASCEND. This is computers and chemical engineering history and worth conserving!
This is a guide how you can check out the oldschool 90s tcl/tk interface of ASCEND. This is computers and chemical engineering history and worth conserving.


The TkInter wrapper is used to call the tcl legacy code:
The TkInter wrapper is used to call the tcl legacy code:

Revision as of 22:36, 26 December 2018

This is a guide how you can check out the oldschool 90s tcl/tk interface of ASCEND. This is computers and chemical engineering history and worth conserving.

The TkInter wrapper is used to call the tcl legacy code:

https://wiki.python.org/moin/TkInter

https://en.wikipedia.org/wiki/Tkinter


Here are notes which are going to be formulated in detail over time:

Python script to wrap the legacy tcl code with TkInter

Environment variables have to be set in the Python script.

See http://ascend4.org/Environment_variables_for_ASCEND for more information.

Locate the following script in the ascend/tcltk/tk/ folder and call it from the command line.

import tkinter

gui = tkinter.Tk()


#Variables
ASCENDTK = tkinter.StringVar()
ASCENDTK.set("./")

ASCENDBITMAPS = tkinter.StringVar()
ASCENDBITMAPS.set("./bitmaps")

ASCENDDIST = tkinter.StringVar()
ASCENDDIST.set("../../")

TKTABLE_LIBRARY = tkinter.StringVar() #the Tktable issue hasn't been resolved yet
TKTABLE_LIBRARY.set("/usr/lib/tcltk/x86_64-linux-gnu/Tktable2.10")

asc_swap_del_backspace = tkinter.StringVar()
asc_swap_del_backspace.set("1") # for UNIX systems

argc = tkinter.IntVar()
argc.set(0)

#Evaluation
gui.tk.eval('lappend auto_path {%s}' % './')

gui.tk.eval('set env(ASCENDTK) %s'      % (ASCENDTK.get()))
gui.tk.eval('set env(ASCENDBITMAPS) %s' % (ASCENDBITMAPS.get()))
gui.tk.eval('set env(ASCENDDIST) %s'    % (ASCENDDIST.get()))

gui.tk.eval('set asc_swap_del_backspace %s' % (asc_swap_del_backspace.get()))

gui.tk.eval('set argc %s' % (argc.get()))

#gui.tk.eval('package require Tktable')

gui.tk.eval('source {ascend.tcl}')

#Mainloop
gui.mainloop()

ascend/tcltk/tk/

AscendRC

ascend.tcl
env(ASCENDTK)
GlobalProc.tcl
set_global_defaults
	Glob_do_GNU
	set_Template_defaults
	asc_swap_del_backspace -> GlobalProc.tcl ; set to "1" for unix systems
        set_Global_Defaults {} {
            __userdata_init
View.tcl

main.tcl
load_Templates
Util_do_Read


ascend/tcltk/interface

config.h

main.c
main()

	This function creates a Tcl interpreter, initializes Tcl and Tk,
	initializes the Ascend data structures, sets up the user's
	environment, sources ASCEND's startup script, and calls Tk_MainLoop
	so the user can interact with ASCEND. Cleans up and exits the
	program when Tk_MainLoop returns.

	This function is based on the functions Tk_Main and Tcl_AppInit
	from the Tk8.0 distribution.  See the files tkMain.c and tkAppInit.c
	in the Tk sources.
Commands.c
__userdata_init
Driver.c
AscDriver()

Changes made to the codebase to get the GUI up and running with TkInter

There was an issue with tktable which I couldn't fix and also found this bug report which might actually not be resolved: http://bugs.ascend4.org/view.php?id=254 see also: https://github.com/nbro/tktable/issues/3


Also the trunk branch was missing the interval.c and interval.h files in ascend/compiler/. I copied the files over from the Python3 branch and then the issue was solved

In line 138 in solver.tcl the - bitmap {feet} and -bitmap{stop} options couldn't find the bitmaps in ascend/tcltk/tk/bitmaps.

See the Notes section for other changes to get the tcl/tk interface working.

Notes

ASC_IMPORT???:

Definition at line 124 of file ascend/general/platform.h


ASCENDTK:

This environment variable is used to define the location of the Tcl/Tk support files used by the ASCEND Tcl/Tk GUI. It defaults to $ASCENDDIST/TK. It has no effect on the PyGTK GUI.


asc_swap_del_backspace:

set to "1" for unix systems


__userdata_init:

comment out


argc:

set argument counter argc to 0


tktable missing:

- install via sudo apt-get install tk-table

- ascend still can't find tktable

- install tcl8.5-dev, tk8.5-dev, libxft-dev, libfontconfig1-dev, libfreetype6-dev, libpng-dev

- error: if {[catch {package require Tktable 2.8} err]} in ascend.tcl

- http://bugs.ascend4.org/view.php?id=254

- https://github.com/nbro/tktable/issues/3

- The plot window and the solver window require the

- TkTable exension package by Roland King mthomas 98.05.07: require 1.8 until we debug the memory errors in 2.0

- comment the if clause block starting with line 225 in ascend.tcl out

- Issue not yet resolved


error because interval.c and interval.h files were missing (trunk branch) in ascend/compiler/:


bitmap "feet" not defined:

- ascend.tcl line 259: awin all

- awin is in GlobalProc.tcl

- ShowWindow.solver in line 108 in GlobalProc.tcl

- line 138 in solver.tcl

- option -bitmap {feet} was removed because it couldn't be located

- option -bitmap {stop} was removed

Ascend starts with main GUI! Some windows or buttons still don't work.

still having these error messages:

Error calling set_Library_Defaults; invalid command name "libr_query (in NoteboxProc.tcl)

Error calling set_Probe_Defaults; invalid command name "__probe" (in ProbeProc.tcl)

Error calling set_Solver_Defaults; invalid command name "slv_available" (in SolverProc.tcl)

Error calling set_Units_Defaults invalid command name "u_dim2num" (in UnitsProc.tcl)