Giter Site home page Giter Site logo

tk.jl's Introduction

Julia interface to the Tk windowing toolkit.

A simple example

using Tk

w = Toplevel("Example")                                 ## A titled top level window
f = Frame(w, padding = [3,3,2,2], relief="groove")      ## A Frame with some options set
pack(f, expand = true, fill = "both")                   ## using pack to manage the layout of f

b = Button(f, "Click for a message")                    ## Button constructor has convenience interface
grid(b, 1, 1)                                           ## use grid to pack in b. 1,1 specifies location

## A callback to open a message
callback(path) = Messagebox(w, title="A message", message="Hello World") 
bind(b, "command", callback)                            ## bind callback to 'command' option
bind(b, "<Return>", callback)                           ## press return key when button has focus

tk.jl's People

Contributors

ararslan avatar aviks avatar bdeonovic avatar bkamins avatar femtocleaner[bot] avatar garborg avatar giordano avatar ihnorton avatar jagot avatar jakebolewski avatar jeffbezanson avatar jiahao avatar jverzani avatar keno avatar kmsquire avatar lilithhafner avatar lucasb-eyer avatar mschauer avatar nolta avatar prcastro avatar rsrock avatar samuelpowell avatar sjkelly avatar staticfloat avatar stefankarpinski avatar timholy avatar tkelman avatar viralbshah avatar vtjnash avatar wkearn avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

tk.jl's Issues

Warning: could not import Base.getindex into Tk

julia> using Winston
Warning: could not import Base.getindex into Tk
ERROR: ParseError("incomplete expression")
at C:\Users\Iain\AppData\Roaming\julia\packages\Tk\src\tkwidget.jl:94

This is on the 0.1.2 Windows build. I see Tk is at v0.0.0 so I'm guessing there wasn't a 0.1 split?

Build from source fails due to broken link

MESSAGE: Attempting to Create directory /Users/westley/.julia/Cairo/deps/downloads
MESSAGE: Directory /Users/westley/.julia/Cairo/deps/downloads already created
MESSAGE: Downloading file ftp://sourceware.org/pub/libffi/libffi-3.0.11.tar.gz
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0
curl: (7) couldn't connect to host
ERROR: failed process: Process(curl -o /Users/westley/.julia/Cairo/deps/downloads/libffi-3.0.11.tar.gz -L ftp://sourceware.org/pub/libffi/libffi-3.0.11.tar.gz, ProcessExited(7)) [7]

Please add a license file

I have no doubt that this is free software, but please add a LICENSE.md file to make that explicit.

darwin failure

Deleted ~/.julia, chose "source" build option.

julia> using Winston
ERROR: TclError("error initializing Tk: Can't find a usable tk.tcl in the following directories: \n    /System/Library/Frameworks/Tcl.framework/Versions/8.5/Resources/Scripts/tk8.5 /System/Library/Frameworks/Tcl.framework/Versions/8.5/Resources/Scripts/tk8.5/Resources/Scripts /System/Library/Frameworks/Tcl.framework/Versions/8.5/Resources/tk8.5 /System/Library/Frameworks/Tcl.framework/Versions/8.5/Resources/tk8.5/Resources/Scripts /Users/nolta/julia/usr/lib/tk8.5 /Users/nolta/julia/usr/lib/tk8.5/Resources/Scripts ~/Library/Tcl/tk8.5 ~/Library/Tcl/tk8.5/Resources/Scripts /Library/Tcl/tk8.5 /Library/Tcl/tk8.5/Resources/Scripts /System/Library/Tcl/tk8.5 /System/Library/Tcl/tk8.5/Resources/Scripts /System/Library/Tcl/8.5/tk8.5 /System/Library/Tcl/8.5/tk8.5/Resources/Scripts ~/Library/Frameworks/tk8.5 ~/Library/Frameworks/tk8.5/Resources/Scripts /Library/Frameworks/tk8.5 /Library/Frameworks/tk8.5/Resources/Scripts /System/Library/Frameworks/tk8.5 /System/Library/Frameworks/tk8.5/Resources/Scripts /Users/nolta/julia/lib/tk8.5 /Users/nolta/julia/usr/library\n\n\n\nThis probably means that tk wasn't installed properly.\n")
 in init at /Users/nolta/.julia/Tk/src/tkwidget.jl:36
 in include_from_node1 at loading.jl:91 (repeats 2 times)
 in reload_path at loading.jl:114
 in require at loading.jl:48
 in include_from_node1 at loading.jl:91 (repeats 3 times)
 in reload_path at loading.jl:114
 in require at loading.jl:48
at /Users/nolta/.julia/Tk/src/tkwidget.jl:426
at /Users/nolta/.julia/Tk/src/Tk.jl:24
at /Users/nolta/.julia/Winston/src/tk.jl:1
at /Users/nolta/.julia/Winston/src/plot.jl:13
at /Users/nolta/.julia/Winston/src/Winston.jl:2495

Build from source on 64-bit windows fails

Running the build.jl script, I got this very odd error (the first of many like it):

Configuring package '/usr/home/tim/packages/Tk/deps/src/tcl8.6.0/pkgs/itcl4.0.0'
 wd = /usr/home/tim/packages/Tk/deps/src/tcl8.6.0/win/pkgs/itcl4.0.0
checking for correct TEA configuration... ok (TEA 3.9)
checking for cygpath... echo
configure: configuring itcl 4.0.0
checking whether ln -s works... yes
checking for Tcl configuration... configure: error: C:/MinGW/msys/1.0/msys/home/
tim/src/julia directory doesn't contain tclConfig.sh

That directory that doesn't contain tclConfig.sh is the one I launched julia from, but within julia I had already cded to /usr/home/tim/packages/Tk/deps.

So from the msys command line, I did this:

./configure --enable-64bit --enable-threads --enable-symbols TCL_BIN_DIR="/c/MinGW/msys/1.0/msys/home/tim/packages/Tk/deps/usr/bin

followed by make

Then I had to do this manually:
cp tcl86.dll libtcl8.6.dll
And then back to include("build.jl") from within Julia.

This finally failed with this message:

make[2]: Nothing to be done for `all'.
make[2]: Leaving directory `/usr/home/tim/packages/Tk/deps/src/tcl8.6.0/win/pkgs
/thread2.7.0'
Making directory /usr/local/lib
Making directory /usr/local/lib/dde1.4
Making directory /usr/local/lib/reg1.3
Installing tcl86g.dll to /usr/local/bin/
Installing zlib1.dll to /usr/local/bin/
Installing tclsh86g.exe to /usr/local/bin/
Installing tclConfig.sh to /usr/local/lib/
Installing tclooConfig.sh to /usr/local/lib/
Installing libtcl86g.a to /usr/local/lib/
Installing libtclstub86g.a to /usr/local/lib/
installing tcldde14g.dll
installing libtcldde14g.a
installing tclreg13g.dll
installing libtclreg13g.a
Installing time zone data
make[1]: *** [install-tzdata] Error 5
make[1]: Leaving directory `/usr/home/tim/packages/Tk/deps/src/tcl8.6.0/win'
ERROR: failed process: Process(`make '' install`, ProcessExited(2)) [2]
 in error at error.jl:22
 in success at process.jl:414
 in wait_exit at process.jl:546
at C:\MinGW\msys\1.0\msys\home\tim\packages\Tk\deps\build.jl:107

julia>

Trying to get it working on PackageEvaluator

In my relentless drive to get all packages testing, I recently added the ability to use X virtual framebuffer to test packages that need Tk, e.g. ProfileView. However Tk itself is failing:

[idunning@che Tk]$ xvfb-run julia test/tests.jl 
ERROR: assertion failed: p == w
 in error at error.jl:21
 in include at boot.jl:244
 in include_from_node1 at loading.jl:128
while loading /home/idunning/.julia/v0.3/Tk/test/tests.jl, in expression starting on line 23

I don't really understand what that is testing so its hard for me to know what to do.

directory problem on Windows

running tests.jl
img = Image(Pkg.dir("Tk", "examples", "weather-overcast.gif"))
ERROR: TclError("couldn't open "C:UsersKees.juliaTkexamplesweather-overcast.gif": no such file or directory")
in tcl_eval at C:\Users\Kees.julia\Tk\src\tkwidget.jl:97
in tcl_eval at C:\Users\Kees.julia\Tk\src\tkwidget.jl:91
in tcl at C:\Users\Kees.julia\Tk\src\core.jl:48
in Image at C:\Users\Kees.julia\Tk\src\widgets.jl:321

Pkg.dir returns:
"C:\Users\Kees.julia\Tk\examples\weather-overcast.gif"
the backslashes disappear.

Tk.Canvas and frames

I'm trying to place a Tk.Canvas object into a ttk::frame to display a Winston graphic. It doesn't seem to work, though not exactly sure why. Any help? I really don't understand the magic of using Cairo with Tk.

## putting canvas into frame fails, though works if do_frame = false

do_frame = true

using Tk
w, h = (500, 500)
win = Window("name", w, h)
tcl_eval(" pack propagate $(win.path) 0")

if !do_frame
    c = Tk.Canvas(win)
else
    f = Tk.TkWidget(win, "ttk:frame")
    cmd = "ttk::frame $(f.path)"
    tcl_eval(cmd)
    tcl_eval("pack $(f.path) -expand 1 -fill both")

    c = Tk.Canvas(f)
end

#pack(c)
tcl_eval("pack $(c.c.path) -expand 1 -fill both")

Tk.init_canvas(c)
r = Cairo.CairoRenderer(Tk.cairo_surface(c))
r.upperright = (w, h)
r.on_open = () -> (cr = Tk.cairo_context(c); Cairo.set_source_rgb(cr, 1, 1, 1); Cairo.paint(cr))
r.on_close = () -> (Tk.reveal(c); Tk.tcl_doevent())


using Winston
x = [-pi:1:pi]
y = sin(x)

p = FramedPlot()
add(p, Curve(x, y))

Winston.page_compose(p, r, false)
r.on_close()

[pao: formatting]

clean up design

We need to rethink our GUI API.

As a small example, the Tk package currently has types TkWidget, Tk_Widget, TTk_Widget, Canvas, TkCanvas, and Tk_CairoCanvas. I know there are reasons for these, but this is not going to work from a usability perspective.

In the work I started in tkwidget.jl, I was not really trying to provide "Tk bindings". This goes against the usual way scripting languages wrap libraries, which is to provide the same API as the original library, just callable from the scripting language. The usual approach does have advantages: (1) all functionality is exposed, (2) you can refer to existing documentation for the library, (3) people who already know the library have a shallow learning curve. This is the direction that @jverzani took things, and I greatly appreciate that work since it brought us a lot of functionality, and we will probably keep most of it.

But I would also like something else, which is a set of simple julian abstractions that would be directly meaningful to our users. Examples might include Window, Canvas, DrawingWindow, PlotWindow, Canvas3D, etc. (not all of those exist yet). It is possible this should be a new package, e.g. "GUI.jl", which can be implemented on top of Tk.jl and/or Gtk.jl. Then all my non-idiomatic-tk stuff in tkwidget.jl can be removed and the design will be less split. Or we could change Tk.jl and Gtk.jl to provide the desired API directly.

The first approach is probably more typical. But personally, I value simplicity more than features and low-level control, and the higher-level "toy" API is the only one I'd want to use. It might be nice to preserve the ability to write Tk- or Gtk- specific code, but that also risks fragmentation, e.g. people writing GUI widgets that only work with one library. So I want to start talking about how we should move forward. cc @timholy

"Can't find init.tcl" on Windows

When I run using Tk I get the error

ERROR: TclError(
"error initializing Tcl: Can't find a usable init.tcl in the following directories: 
    {C:\\Ruby200-x64\\share\\tcl} C:/Ruby200-x64/share/tcl8.5 C:/Ruby200-x64/lib/tcl8.5 C:/Users/Mike/Desktop/julia-05c6461b55/lib/tcl8.5 C:/Users/Mike/Desktop/lib/tcl8.5 C:/Users/Mike/Desktop/julia-05c6461b55/library C:/Users/Mike/Desktop/library C:/Users/Mike/Desktop/tcl8.5.12/library C:/Users/Mike/tcl8.5.12/library

    This probably means that Tcl wasn't installed properly.
")
 in init at C:\Users\Mike\.julia\Tk\src\tkwidget.jl:58
WARNING: backtraces on your platform are often misleading or partially incorrect

at C:\Users\Mike\.julia\Tk\src\tkwidget.jl:452
at C:\Users\Mike\.julia\Tk\src\Tk.jl:25

Installing ActiveTCL didn't help, and copying its init.tcl file to one of these locations caused using Tk to hang until I reinstalled Julia. For what it's worth, git gui (using Tk) runs fine on my system.

globalEventLoop not defined

On Mac OS X 10.8.2 (with everything necessary installed by Home Brew).

Latest Julia version from master branch:
Version 0.0.0+109499586.r5c9e.dirty
Commit 5c9eb04ebe (2013-02-10 06:12:12)*

using Winston

It produces the following message:

WARNING: strchr is deprecated, use search instead.
ERROR: in init: globalEventLoop not defined
in init at /Users/dhlin/.julia/Tk/src/Tk.jl:55
in include_from_node1 at loading.jl:76
in reload_path at loading.jl:96
in require at loading.jl:48
in include_from_node1 at loading.jl:76
in include_from_node1 at loading.jl:76
in reload_path at loading.jl:96
in require at loading.jl:48
at /Users/dhlin/.julia/Tk/src/Tk.jl:321

It seems to me an issue of a Julia function (globalEventLoop) not being found in Tk, rather than an external library problem.

See: https://groups.google.com/forum/#!topic/julia-users/uJ-6k4d2OR4

calling configure(canvas_handle) causes REPL to terminate

On a Windows 7 machine, I entered the following instructions in the julia REPL. After the last one, the REPL terminates.

using Tk
t = Toplevel()
f = frame(t)
c = Canvas(c)
configure(c)

Here is an example. After calling configure(c), the REPL terminates.

untitled

Windows Install Error

Trying to jump into the plotting world, but I'm getting hung up on the Tk installation.

julia> Pkg.add("Tk")
INFO: Cloning cache of Tk from git://github.com/JuliaLang/Tk.jl.git
INFO: Cloning cache of Cairo from git://github.com/JuliaLang/Cairo.jl.git
INFO: Cloning cache of BinDeps from git://github.com/loladiro/BinDeps.jl.git
INFO: Cloning cache of Color from git://github.com/JuliaLang/Color.jl.git
INFO: Cloning cache of URIParser from git://github.com/loladiro/URIParser.jl.git
INFO: Installing Tk v0.2.4
INFO: Installing Cairo v0.2.8
INFO: Installing BinDeps v0.2.6
INFO: Installing Color v0.2.6
mINFO: Installing URIParser v0.0.0
INFO: Running build script for package Tk
WARNING: contains(collection, item) is deprecated, use in(item, collection) instead
WARNING: backtraces on your platform are often misleading or partially incorrect


INFO: Attempting to Create directory C:\Users\karbarcca\AppData\Roaming\Julia\packages\Tk\deps\downloads
INFO: Downloading file http://julialang.googlecode.com/files/Tk.tar.gz
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0     0    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0  9 16.4M    9 1525k    0     0  2741k      0  0:00:06 --:--:--  0:00:06 3015k 32 16.4M   32 5502k    0     0  3564k      0  0:00:04  0:00:01  0:00:03 3685k 51 16.4M   51 8630k    0     0  3380k      0  0:00:04  0:00:02  0:00:02 3449k 69 16.4M   69 11.4M    0     0  3320k      0  0:00:05  0:00:03  0:00:02 3369k 85 16.4M   85 14.0M    0     0  3176k      0  0:00:05  0:00:04  0:00:01 3211k100 16.4M  100 16.4M    0     0  3070k      0  0:00:05  0:00:05 --:--:-- 3108k
INFO: Done downloading file http://julialang.googlecode.com/files/Tk.tar.gz
INFO: Attempting to Create directory C:\Users\karbarcca\AppData\Roaming\Julia\packages\Tk
INFO: Directory C:\Users\karbarcca\AppData\Roaming\Julia\packages\Tk already created
INFO: Attempting to Create directory C:\Users\karbarcca\AppData\Roaming\Julia\packages\Tk\deps\usr
WARNING: An exception occured while building binary dependencies.
You may have to take manual steps to complete the installation, see the error message below.
To reattempt the installation, run Pkg.fixup("Tk").

 in build at pkg.jl:412

ERROR: could not start process `7z x 'C:\Users\karbarcca\AppData\Roaming\Julia\packages\Tk\deps\downloads\Tk.tar.gz' -y -so`: no such file or directory (ENOENT)
 in test_success at process.jl:431
 in success at process.jl:439
 in all at reduce.jl:221

at C:\Users\karbarcca\AppData\Roaming\Julia\packages\Tk\deps\build.jl:19

Any thoughts? I made sure that 7z is in the path, but I'm not sure what the x is that comes right after the 7z command.

Tk wrapper dependent upon not rebuilding libjulia (on Mac)

Tk probably shouldn't be linking against the libjulia-release.dylib library since this seems brittle and to cause segfaults in the Tk callbacks when libjulia is rebuilt, or especially when attempting to use the julia debug library.

julia> require("Tk")
could not load module libtk_wrapper: dlopen(/Users/jameson/Documents/no-backup/julia/usr/bin/../lib/libtk_wrapper.dylib, 1): Library not loaded: @rpath/libjulia-release.dylib
  Referenced from: /Users/jameson/Documents/no-backup/julia/usr/bin/../lib/libtk_wrapper.dylib
  Reason: image not found
 in dlopen at base.jl:131
 in load_now at util.jl:228
 in require at util.jl:176
 in load_now at util.jl:228
 in require at util.jl:176
 in load_now at util.jl:228
 in load_now at util.jl:240
 in require at util.jl:176
at /Users/jameson/.julia/Tk/src/Tk.jl:26

Uncaught OSX exception

I'm not quite sure when this happens, but it seems like we have a memory management issue somewhere on OSX:

2013-02-03 21:43:22.940 julia[5082:60b] -[__NSCFType symbolicTraits]: unrecognized selector sent to instance 0x10a41d290
2013-02-03 21:43:22.945 julia[5082:60b] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '-[__NSCFType symbolicTraits]: unrecognized selector sent to instance 0x10a41d290'
*** First throw call stack:
(
    0   CoreFoundation                      0x00007fff89f00f56 __exceptionPreprocess + 198
    1   libobjc.A.dylib                     0x00007fff924ebd5e objc_exception_throw + 43
    2   CoreFoundation                      0x00007fff89f8d1be -[NSObject doesNotRecognizeSelector:] + 190
    3   CoreFoundation                      0x00007fff89eede23 ___forwarding___ + 371
    4   CoreFoundation                      0x00007fff89eedc38 _CF_forwarding_prep_0 + 232
    5   AppKit                              0x00007fff8fbc2d91 -[NSFontManager traitsOfFont:] + 36
    6   libtk8.6.dylib                      0x000000010a9078ef GetTkFontAttributesForNSFont + 79
    7   libtk8.6.dylib                      0x000000010a908c55 TkpFontPkgInit + 261
    8   libtk8.6.dylib                      0x000000010a7c8Abort trap: 6

init() failure on require("tk")

Using Mac OS 10.8.2 and e88d7f4e90aabbbf17c9bcc0ceeab63e2a005f41

type error: init: in ccall: function argument not a pointer or valid constant, expected Ptr{None}, got (Symbol,ASCIIString)
 in init at /Users/bjohnson/.julia/Tk/src/Tk.jl:38
 in load_now at util.jl:237
 in load_now at util.jl:249
 in require at util.jl:185

I tried re-writting file_path(JULIA_HOME, "julia") from line 38 as convert(Ptr{Uint8}, file_path(JULIA_HOME, "julia") but got the same message.

Missing X11 headers upset tk_wrapper

If I try to use the skip or brew options on OSX 10.8.2 with XQuartz installed, the compilation of tk_wrapper fails with quite a few errors.

This is likely due to my Tk installation not being integrated with the X11 headers properly. Compilation from source works just fine.

Tk.jl package cannot find installed tcl/tk header files (Ubuntu 12.04)

I have the tcl8.5-dev and tk8.5-dev (Ubuntu) packages installed, but Tk.jl can't find the include files. On Ubuntu 12.04, they're located in /usr/include/tcl8.5. Installing from source works fine.

julia> Pkg.add("Winston")
MESSAGE: Installing IniFile v0.0.0
MESSAGE: Installing Tk v0.0.0
MESSAGE: Running build script for package Tk
MESSAGE: There are multiple options available for installing this dependency:
- skip: Skip Installation - Binaries must be installed manually
- source: Install depdendency from source
Plese select desired method: skip
MESSAGE: Attempting to Create directory /home/kmsquire/.julia/Tk/deps/usr/lib
/home/kmsquire/.julia/Tk/deps/usr/lib
src/tk_wrapper.c:3:17: fatal error: tcl.h: No such file or directory
compilation terminated.
ERROR: failed process: Process(`gcc -shared -g -fPIC -I/home/kmsquire/.julia/Tk/deps/usr/include -I/usr/local/include -L/home/kmsquire/.julia/Tk/deps/usr/lib -I/usr/include/tcl src/tk_wrapper.c -ltcl8.5 -ltk8.5 -o /home/kmsquire/.julia/Tk/deps/usr/lib/libtk_wrapper.so`, ProcessExited(1)) [1]
 in pipeline_error at process.jl:388
 in run at process.jl:378
 in run at /home/kmsquire/.julia/BinDeps/src/BinDeps.jl:376
 in run at /home/kmsquire/.julia/BinDeps/src/BinDeps.jl:350
 in run at /home/kmsquire/.julia/BinDeps/src/BinDeps.jl:376
 in include_from_node1 at loading.jl:76
 in anonymous at no file:206
 in cd at file.jl:26
 in runbuildscript at pkg.jl:203
 in _resolve at pkg.jl:279
 in anonymous at no file:131
 in cd at file.jl:26
 in cd_pkgdir at pkg.jl:34
 in add at pkg.jl:112
 in add at pkg.jl:138
at /home/kmsquire/.julia/Tk/deps/build.jl:73

error compiling jl_tcl_callback

I get the following error on a Mac (10.7.5)

julia> require("Tk.jl")
WARNING: julia_pkgdir is deprecated, use :(Pkg.dir) instead.
error compiling jl_tcl_callback: could not load module libtcl8.6: dlopen(libtcl8.6.dylib, 1): image not found
 in cfunction at base.jl:143
 in include_from_node1 at loading.jl:76
 in reload_path at loading.jl:96
 in require at loading.jl:48
at /Users/simon/.julia/Tk/src/Tk.jl:179

"using Tk" returns error "tcl_interp not defined"

using Tk returns the following error:

julia> using Tk
ERROR: tcl_interp not defined
 in tcl_result at /home/theodore/.julia/Tk/src/tkwidget.jl:59
 in init at /home/theodore/.julia/Tk/src/tkwidget.jl:34
 in include_from_node1 at loading.jl:91 (repeats 2 times)
 in reload_path at loading.jl:114
 in require at loading.jl:48
at /home/theodore/.julia/Tk/src/tkwidget.jl:333
at /home/theodore/.julia/Tk/src/Tk.jl:23

What could be the source of the problem?

Unrecognized option "-mmacosx-version-min=10.6"

The (latest change, dd6ca62 i think) breaks it for me (Version 0.2.0-2138).

Pkg.runbuildscript("Tk")
MESSAGE: Running build script for package Tk
MESSAGE: Attempting to Create directory /home/xyz/.julia/Tk/deps/usr/lib
MESSAGE: Directory /home/xyz/.julia/Tk/deps/usr/lib already created
gcc: Fehler: nicht erkannte Kommandozeilenoption ยป-mmacosx-version-min=10.6ยซ
ERROR: failed process: Process(gcc -shared -g -fPIC -I/home/xyz/.julia/Tk/deps/usr/include -mmacosx-version-min=10.6 -I/home/xyz/.julia/Tk/deps/usr/include -I/usr/local/include -L/home/xyz/.julia/Tk/deps/usr/lib -I/usr/include/tcl8.5 src/tk_wrapper.c -ltcl8.5 -ltk8.5 -o /home/xyz/.julia/Tk/deps/usr/lib/libtk_wrapper.so, ProcessExited(1)) [1]

provide == as well as isequal for Julia 0.3

Currently, you are providing an isequal method for various types (e.g. TTk_Container). In Julia 0.3, you will also need to provide ==. See JuliaLang/julia#6833.

(In Julia 0.2, == called isequal by default, so providing isequal was enough. In Julia 0.3, however, these two functions are swapped: isequal calls == by default. So overriding isequal is not enough to make things like != or == work. In order to remain backward-compatible with Julia 0.2, you will need to provide both methods.)

Broken build script on Linux, Julia v0.2

Starting with no ~/.julia directory, Pkg.add("Tk") ends with:

MESSAGE: Running build script for package Tk
 in cd at file.jl:25
ERROR: in build_wrapper: prefix not defined
 in build_wrapper at none:3
 in evalfile at loading.jl:145
 in anonymous at no file:249
 in cd at file.jl:25
 in runbuildscript at pkg.jl:246
 in _resolve at pkg.jl:394
 in anonymous at no file:163
 in cd at file.jl:25
 in cd_pkgdir at pkg.jl:42
 in add at pkg.jl:143
 in add at pkg.jl:175

This happens before the source/skip prompt. Does it still exist?

I was able to Pkg.update() to Tk v0.2.2 on another machine with no problems.

OS X: dylib conflict.

I build libtk and libtcl from source when prompted by Pkg.add("Tk"). Now I get this:

julia> require("Tk")
objc[54662]: Class TKApplication is implemented in both /Users/pygy/.julia/Tk/deps/usr/lib/libtk8.6.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.
objc[54662]: Class TKMenu is implemented in both /Users/pygy/.julia/Tk/deps/usr/lib/libtk8.6.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.
objc[54662]: Class TKContentView is implemented in both /Users/pygy/.julia/Tk/deps/usr/lib/libtk8.6.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.
objc[54662]: Class TKWindow is implemented in both /Users/pygy/.julia/Tk/deps/usr/lib/libtk8.6.dylib and /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk. One of the two will be used. Which one is undefined.
ERROR: in init: globalEventLoop not defined
 in init at /Users/pygy/.julia/Tk/src/Tk.jl:55
 in include_from_node1 at loading.jl:76
 in reload_path at loading.jl:96
 in require at loading.jl:48
at /Users/pygy/.julia/Tk/src/Tk.jl:321

Edit: If I require Cairo before Tk, I also get this error:

Warning: replacing module Cairo

Per-window management of resizing

Right now our resizing design is the following:

  • window-resizing triggers canvas callbacks
  • canvases are expected to call Tk.update() when finished so that the results are rendered to the screen.

That means that if you resize a window that has 9 canvases in it, then you get---you guessed it---9 calls to Tk.update() for a single change in the window size. Not only does this hammer performance, but it leads to amusing but distracting tearing artifacts as canvases sequentially redraw.

We need to switch to a design that registers canvases with windows. Any issues with a synchronous approach? The idea would be that the window resize() function is the only one registered as a callback, and this function calls each canvas's .resize() and .draw() functions in a loop. At the end, there's a single call to Tk.update().

Tk lib version in Arch Linux

Hi, I'm using Arch Linux and have installed tk/tck lib on my system. The tk in arch's depo is 8.6, but this package links libtk 8.5 for all linux. Could this be improved to be more flexible according to the user's local lib installation?

Can't install package on OSX 10.8 with Julia Version 0.2.0-1608.rea277f39

Starting with no .julia directory and trying Pkg.add("Tk") as the first package.

Choosing the brew option

ERROR: failed process: Process(`gcc -xobjective-c -shared -g -fPIC -I/Users/Administrator/.julia/Tk/deps/usr/include -I/usr/local/include -L/Users/Administrator/.julia/Tk/deps/usr/lib src/tk_wrapper.c -ltcl8.6 -ltk8.6 -framework AppKit -framework Foundation -framework ApplicationServices -o /Users/Administrator/.julia/Tk/deps/usr/lib/libtk_wrapper.dylib`, ProcessExited(1)) [1]
 in error at error.jl:22
 in pipeline_error at process.jl:399
 in run at process.jl:389
 in run at /Users/Administrator/.julia/BinDeps/src/BinDeps.jl:394
 in run at /Users/Administrator/.julia/BinDeps/src/BinDeps.jl:368
 in run at /Users/Administrator/.julia/BinDeps/src/BinDeps.jl:394
 in anonymous at no file:30
 in evalfile at loading.jl:145
 in anonymous at no file:249
 in cd at file.jl:25
 in runbuildscript at pkg.jl:246
 in _resolve at pkg.jl:361
 in anonymous at no file:163
 in cd at file.jl:25
 in cd_pkgdir at pkg.jl:42
 in add at pkg.jl:143
 in add at pkg.jl:175

And with the source option

ERROR: failed process: Process(`make -j8`, ProcessExited(2)) [2]
 in error at error.jl:22
 in pipeline_error at process.jl:399
 in run at process.jl:389
 in run at /Users/Administrator/.julia/BinDeps/src/BinDeps.jl:394
 in run at /Users/Administrator/.julia/BinDeps/src/BinDeps.jl:368
 in run at /Users/Administrator/.julia/BinDeps/src/BinDeps.jl:394 (repeats 4 times)
 in run at /Users/Administrator/.julia/BinDeps/src/BinDeps.jl:163
 in run at /Users/Administrator/.julia/BinDeps/src/BinDeps.jl:394
 in anonymous at no file:30
 in evalfile at loading.jl:145
 in anonymous at no file:249
 in cd at file.jl:25
 in runbuildscript at pkg.jl:246
 in _resolve at pkg.jl:361
 in anonymous at no file:163
 in cd at file.jl:25
 in cd_pkgdir at pkg.jl:42
 in add at pkg.jl:143
 in add at pkg.jl:175

This is preventing the ability to install Winston. JuliaGraphics/Winston.jl#40

Winston plotting

Hi,
I am unable to run the Winston examples. Here is the error message when I attempt
to "use" Winston on Intel Core I7 MacBook Pro with Mac OS 10.8.2:

julia> using(Winston)
dir not defined
in include at boot.jl:248
in include_from_node1 at util.jl:251
in reload_path at util.jl:271
in require at util.jl:223
in include at boot.jl:248
in include_from_node1 at util.jl:251
in reload_path at util.jl:271
in require at util.jl:223
at /Users/ahausknecht/.julia/Cairo/src/Cairo.jl:1

Note I am using

Version 0.0.0+107211096.rba9e.dirty
Commit ba9eb0a653 (2013-01-14 19:30:42)*

Regards,

Adam Hausknecht
Department of Mathematics
UMass Dartmouth

Support for OSX 10.6?

The official Julia binaries work on OSX 10.6, as do a number of packages. However, libtk_wrapper.so fails to build on OSX 10.6. Does Tk.jl not work on 10.6?

I'm not too familiar with OSX anymore. I only know about this because a friend and colleague of mine is running 10.6 and is having trouble installing Winston.jl, because Tk.jl fails to build. Anyone else have this trouble? Is a specific version of GCC/Xcode required? Would the gcc builds from homebrew or HPC for OSX (http://hpc.sourceforge.net/) work?

I'll try to get a copy of the exact error tomorrow.

Thanks,
Rob

segfault when there is no $DISPLAY

When using julia over ssh, having forgotten to pass the -X or -Y flags, Tk segfaults. I suspect there is a better way to handle not having an X11 display than this.

$ ./julia 
               _
   _       _ _(_)_     |  A fresh approach to technical computing
  (_)     | (_) (_)    |  Documentation: http://docs.julialang.org
   _ _   _| |_  __ _   |  Type "help()" to list help topics
  | | | | | | |/ _` |  |
  | | |_| | | | (_| |  |  Version 0.0.0+104433486.r9e20
 _/ |\__'_|_|_|\__'_|  |  Commit 9e20896235 (2012-12-13 15:57:12)
|__/                   |

julia> load("Tk")
Segmentation fault (core dumped)
$ 

(just built from scratch)

no method CCompile

I can't install Tk on a fresh julia 0.2 install on CentOS 6.3

When I choose to "skip" depandancies I get:



MESSAGE: There are multiple options available for installing this dependency:
- skip: Skip Installation - Binaries must be installed manually
- source: Install depdendency from source
Plese select desired method: skip
ERROR: no method CCompile(ASCIIString,ASCIIString,Array{ASCIIString,1},Nothing)
 in build_wrapper at none:9
 in evalfile at loading.jl:145
 in anonymous at no file:249
 in cd at file.jl:25
 in runbuildscript at pkg.jl:246
 in _resolve at pkg.jl:394
 in anonymous at no file:163
 in cd at file.jl:25
 in cd_pkgdir at pkg.jl:42
 in add at pkg.jl:143
 in add at pkg.jl:175

No need to say I was not more succesful trying to build dependancies.

require("Tk") gives libX11 error

On Mac OS 10.7.5. Using Apple-supplied tk and tcl. require("Tk") leads to the following error:

error compiling init: could not load module libX11: dlopen(libX11.dylib, 1): image not found
in load_now at util.jl:228
in load_now at util.jl:242
in require at util.jl:176
at /Users/bjohnson/.julia/Tk/src/Tk.jl:256
in load_now at util.jl:228
in load_now at util.jl:242
in require at util.jl:176
in load_now at util.jl:253
in require at util.jl:176

This library is on my system, in the usual location: /usr/X11/lib/

Thoughts on why julia can't find it?

Problems with system Tcl/Tk 8.5 on Mac OS X

  1. set_enabled() fails with the following:
2013-07-24 10:00:11.971 julia[17209:707] CFURLCopyResourcePropertyForKey failed because it was passed this URL which has no scheme: 

2013-07-24 10:00:11.972 julia[17209:707] CFURLCopyResourcePropertyForKey failed because it was passed this URL which has no scheme: 

2013-07-24 10:00:20.764 julia[17209:707] CFURLCopyResourcePropertyForKey failed because it was passed this URL which has no scheme: 

2013-07-24 10:00:20.765 julia[17209:707] CFURLCopyResourcePropertyForKey failed because it was passed this URL which has no scheme:

This blocks some of the function of @timholy's ImageView package.

  1. Sliders sometimes lose their knobs. Not entirely sure that this is related to the libraries, because the problem is not yet reproducible.

Using the homebrew tcl-tk (8.6, with quartz) by adding this (push!(DL_LOAD_PATH, "/usr/local/opt/tcl-tk/lib")) to my .juliarc.jl helps with (1), and sometimes (2). I think the inconsistent issue with (2) is related to these error messages (esp. "which one is undefined") when I use the homebrew Tk.

objc[20110]: Class TKApplication is implemented in both /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk and /usr/local/opt/tcl-tk/lib/libtk8.6.dylib. One of the two will be used. Which one is undefined.
objc[20110]: Class TKMenu is implemented in both /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk and /usr/local/opt/tcl-tk/lib/libtk8.6.dylib. One of the two will be used. Which one is undefined.
objc[20110]: Class TKContentView is implemented in both /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk and /usr/local/opt/tcl-tk/lib/libtk8.6.dylib. One of the two will be used. Which one is undefined.
objc[20110]: Class TKWindow is implemented in both /System/Library/Frameworks/Tk.framework/Versions/8.5/Tk and /usr/local/opt/tcl-tk/lib/libtk8.6.dylib. One of the two will be used. Which one is undefined.

Question for @ViralBShah or @vtjnash : how do I completely disable the system Tcl/Tk, and use only the homebrew version? All of this wasn't happening at the end of last week.

`brew install --enable-aqua tk` fails, "No available formula"

I'm not sure it's relevant in this case but I'm running 10.8.2, and a locally built version of Julia with the latest on release-0.1.

julia> Pkg.add("Tk")
MESSAGE: Installing BinDeps v0.0.0
Cloning into 'BinDeps'...
remote: Counting objects: 26, done.
remote: Compressing objects: 100% (13/13), done.
remote: Total 26 (delta 7), reused 24 (delta 5)
Receiving objects: 100% (26/26), 7.01 KiB, done.
Resolving deltas: 100% (7/7), done.
MESSAGE: Installing Cairo v0.0.0
Cloning into 'Cairo'...
remote: Counting objects: 180, done.
remote: Compressing objects: 100% (130/130), done.
remote: Total 180 (delta 72), reused 134 (delta 26)
Receiving objects: 100% (180/180), 39.66 KiB, done.
Resolving deltas: 100% (72/72), done.
MESSAGE: Running build script for package Cairo
/Users/westley/.julia/Cairo/deps
MESSAGE: There are multiple options available for installing this dependency:
- skip: Skip Installation - Binaries must be installed manually
- brew: Install depdendency using brew
- source: Install depdendency from source
Plese select desired method: brew
WARNING: read_from is deprecated, use readsfrom instead.
MESSAGE: Package already installed
Warning: Already linked: /usr/local/Cellar/cairo/1.12.6
To relink: brew unlink cairo && brew link cairo
MESSAGE: Installing Color v0.0.0
Cloning into 'Color'...
remote: Counting objects: 7, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 7 (delta 0), reused 7 (delta 0)
Receiving objects: 100% (7/7), done.
MESSAGE: Installing Tk v0.0.0
Cloning into 'Tk'...
remote: Counting objects: 189, done.
remote: Compressing objects: 100% (127/127), done.
remote: Total 189 (delta 75), reused 142 (delta 28)
Receiving objects: 100% (189/189), 27.08 KiB, done.
Resolving deltas: 100% (75/75), done.
MESSAGE: Running build script for package Tk
MESSAGE: There are multiple options available for installing this dependency:
- skip: Skip Installation - Binaries must be installed manually
- brew: Install depdendency using brew
- source: Install depdendency from source
Plese select desired method: brew
Error: No available formula for tk 
ERROR: failed process: Process(`brew install --enable-aqua tk`, ProcessExited(1)) [1]
 in pipeline_error at process.jl:388
 in run at process.jl:378
 in run at /Users/westley/.julia/BinDeps/src/BinDeps.jl:183
 in run at /Users/westley/.julia/BinDeps/src/BinDeps.jl:376
 in run at /Users/westley/.julia/BinDeps/src/BinDeps.jl:147
 in run at /Users/westley/.julia/BinDeps/src/BinDeps.jl:376
 in anonymous at no file:83
 in include_from_node1 at loading.jl:76
 in anonymous at no file:241
 in cd at file.jl:26
 in runbuildscript at pkg.jl:238
 in _resolve at pkg.jl:314
 in anonymous at no file:155
 in cd at file.jl:26
 in cd_pkgdir at pkg.jl:34
 in add at pkg.jl:135
 in add at pkg.jl:167
at /Users/westley/.julia/Tk/deps/build.jl:85

julia> 

Issue with scrollbars

I am trying to write some wrappers for the Tk package (https://github.com/jverzani/TkExtras.jl) and have run across a problem with scrollbars with the Mac. (Haven't tested on other platforms.) While I can replicate it with an example using ttk:scrollbar, it also shows up in this simpler example when one attempts to use ttk::combobox:

using Tk

w = Window("Error", 200, 200)
path = w.path
cmb = Tk.TkWidget(w, "ttk::combobox")
cmd = "ttk::combobox $(cmb.path) -values [list USA Canada Australia]"
tcl_eval(cmd)

pack(cmb)

Build failure for Mac OS X 10.8

It builded the tcl part successfully, and then failed when configuring tk. Messages below:

INFO: Changing Directory to /Users/dhlin/.julia/Tk/deps/builds/tk
checking for Tcl configuration... found /System/Library/Frameworks/Tcl.framework/tclConfig.sh
checking for existence of /System/Library/Frameworks/Tcl.framework/tclConfig.sh... loading
configure: error: tk 8.6 requires Tcl 8.6+
Found config for Tcl 8.5

As a TCL 8.6 has been available in .julia/Tk/deps, why would it look at /System/Library/ instead of the tcl library that it had just builded?

Pick tk 8.5 or 8.6 on linux, whichever is present.

On linux, it is quite likely that the tk package and dependencies are available. On mac, these dependencies are bundled in the downloadable application, including the tk-wrapper.

I suggest running the find_library() functions in ext.jl first in build.jl, and only presenting the compilation choices to the user if find_library() fails.

This would greatly reduce the barrier to getting graphics working in Julia.

[ViralBShah: Updated title of the issue]

Flipped / garbled display elements on OS X 10.8.3

I'm opening this issue to follow up on this discussion: Mac 0.2-pre binaries with graphics

and the possibly related issues I've had with Tim's ImageView package:
JuliaImages/ImageView.jl#2

I've followed the first half of Tim's suggestion, and run the First real example from TkDocs in wish. It works as expected, even when resizing the window. That's true for both wish installed by Homebrew, and the wish found in my .julia/Tk/deps/usr/bin (installed from source thru Pkg.add). I have not tried to implement the example in julia yet.

As an aside, it looks like there are copies of Tcl/Tk all over the place on my system. which wish gives me /Applications/ccp4-6.3.0/bin/wish, and points to a Tcl/Tk ver 8.4.x that is linked to X11. CCP4 is an xray crystallography package that seems to like taking over the front of my path. Also, the default install of R will put it's own Tcl/Tk in /usr/local. I imagine that this may complicate debugging.

Tk performance puzzle

In ImageView, I have an application where I'm painting a 5-megapixel surface in a loop. It plays more slowly than I'd like under these circumstance. I noticed that if I zoom in on a smaller region---keeping the size of the window constant---that it plays much faster. I therefore assumed that the bottleneck was the fill operation. However, profiling suggests this is not the case, and that Tk.update() is the main bottleneck. For mysterious reasons, the time required for Tk.update() seems to vary with the size of the source that is painted to the canvas, even though I would have guessed that Tk.update would have no way of "knowing" that information because only the canvas should matter.

So, here's a systematic test. The code in this gist tests 3 operations---Cairo.fill, Tk.reveal, and Tk.update---for sources and canvases of different sizes. You can ignore the normalization part, here I'm just showing the raw timings.

Results:

paintarea looks like this (repeated for each column):
9-element Float64 Array:
    400.0  
   4000.0  
  40000.0  
   4000.0  
  40000.0  
 400000.0  
  40000.0  
 400000.0  
      4.0e6

winarea looks like this (repeated for each row):
1x9 Float64 Array:
 400.0  4000.0  40000.0  4000.0  40000.0  400000.0  40000.0  400000.0  4.0e6

julia> reshape(tfill, (9,9))
9x9 Float64 Array:
 0.00245289  0.0018184   0.00190354  0.0018275   0.0017293   0.00170003  0.00204117  0.00195058  0.00217543
 0.00239578  0.00318355  0.00288343  0.00309047  0.00269057  0.00318406  0.00255513  0.00279306  0.00383765
 0.00462529  0.00584485  0.00529055  0.00472924  0.00471452  0.0065624   0.00628025  0.00629306  0.00752696
 0.0025594   0.00311649  0.00291305  0.00172498  0.00290865  0.00335312  0.0030211   0.0034887   0.00371312
 0.00590883  0.00521956  0.00677782  0.005023    0.00318307  0.00713736  0.00521244  0.00680339  0.00761565
 0.0518323   0.0536135   0.0521766   0.0520546   0.0528012   0.0563673   0.0559326   0.057972    0.0575578 
 0.00596179  0.00614094  0.00720646  0.00677127  0.00563481  0.00856668  0.00696773  0.00828367  0.00794681
 0.0522692   0.0530637   0.0531833   0.0526137   0.0529721   0.0566752   0.0540204   0.0586045   0.0591545 
 0.629912    0.636078    0.623166    0.625815    0.630078    0.6572      0.626554    0.684176    0.766557

julia> reshape(treveal, (9,9))
9x9 Float64 Array:
 0.0132271   0.00943789  0.00905099  0.00870083  0.0092333   0.00931332  0.0111473   0.00973364  0.0142216
 0.00814719  0.00972981  0.0108839   0.0124309   0.0125025   0.00964868  0.008771    0.00905754  0.0109809
 0.0101579   0.0105036   0.00936286  0.00908874  0.00963928  0.0180162   0.0134028   0.0117307   0.0168576
 0.0083246   0.00965364  0.0131163   0.0143147   0.011118    0.0104047   0.00966678  0.0110059   0.0122708
 0.0119933   0.00934052  0.01202     0.00985168  0.00943573  0.0154633   0.0119803   0.0134146   0.0186537
 0.0207188   0.0250156   0.0196513   0.0236574   0.0206701   0.0235087   0.0247588   0.0295777   0.0208007
 0.0103966   0.00920776  0.0142922   0.0104327   0.010021    0.0130901   0.0131545   0.0129084   0.0117035
 0.027712    0.0220468   0.0226839   0.0278794   0.0209326   0.0228339   0.0213186   0.0214724   0.0261472
 0.0294226   0.044306    0.0447171   0.0332779   0.0391952   0.0385551   0.0293824   0.0346828   0.0348237

julia> reshape(tupdate, (9,9))
9x9 Float64 Array:
 0.0456249  0.082689   0.0910697  0.104548   0.0703653  0.102934  0.071009   0.110762   0.671718
 0.0500649  0.0821391  0.0656425  0.0714468  0.075207   0.126673  0.0722175  0.0878375  0.729297
 0.0659795  0.100264   0.0763811  0.065171   0.0756814  0.188756  0.101253   0.113759   0.683277
 0.05096    0.068492   0.072321   0.0591601  0.0647436  0.210691  0.0744623  0.146036   0.486776
 0.0779399  0.089597   0.119075   0.0653394  0.0578468  0.181642  0.0864316  0.149122   0.688707
 0.255617   0.265621   0.251711   0.265452   0.290863   0.287773  0.303016   0.304087   0.67087 
 0.0893102  0.0964651  0.0957275  0.102411   0.0803975  0.206583  0.0944839  0.154907   0.558618
 0.288977   0.294936   0.329803   0.296259   0.315333   0.347745  0.313739   0.309785   0.660055
 1.50423    1.46713    1.46059    1.508      1.47422    1.51676   1.4846     1.55611    1.68278

Interpretation:

  • If one discards the smallest source, the fill operation very quickly settles into scaling with the source area. This is as I would expect.
  • reveal seems approximately constant-time
  • update depends more strongly on the source area than the canvas size, and undergoes a fairly catastrophic loss of performance for the largest source areas.

This last result makes absolutely no sense to me. One point worth noting is that tupdate is always larger than tfill, but that the time difference is not constant (which might be predicted if there were asynchronous operations happening). Does anyone else understand?

Tk broken on 0.1.2?

I didn't delve much into this, but trying to get this working with Alan on his Mac, it seemed that the version of Tk currently in METADATA.jl is broken. (something about a parse error on line 97 of Tk.jl)

@JeffBezanson

Re-build Tk on Windows

We should re-compile the Windows Tk packages against msvcr90 instead of 110. I believe this can be done in VS2012 by re-targeting the linker. (Or switch to WinRPM if possible)

See #59 (comment)

update for new timers interface in Julia 0.3

As discussed in JuliaLang/julia#7140, the Timer interface has changed: timer callbacks only take one argument (the timer object), rather than two (the timer object and an integer status).

It looks like tcl_doevent will need another method to be added:

tcl_doevent(timer) = tcl_doevent(timer, 0)

Don't remove the old one, to maintain Julia 0.2 compatibility.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.