我在tcl/tk方面有很多经验,但是我想摆脱大型项目的脚本语言。但tk画布有一个非常大的功能,我不得不用一个好的GUI工具包取代。gui工具包,需要C++界面和需要的智能画布支持
我需要的一个功能是可以在其上创建活动图形对象的画布。例如,我有可以通过鼠标拖动像这样的TK移动的圆圈:
#!/usr/bin/wish8.5
canvas .c
pack .c
set item [.c create oval 10 10 20 20]
.c bind $item <Any-Enter> ".c itemconfig current -fill red"
.c bind $item <Any-Leave> ".c itemconfig current -fill blue"
bind .c <ButtonPress-1> "setlast %x %y"
bind .c <B1-Motion> "moveit %x %y"
set lastx 0
set lasty 0
proc setlast { x y } {
global lastx
global lasty
set lastx $x
set lasty $y
}
proc moveit { x y } {
global lastx
global lasty
.c move current [expr $x-$lastx] [expr $y-$lasty]
set lastx $x
set lasty $y
}
任何其他工具,我发现需要大量的手工工作,为这一点。通常情况下,您必须找出画布上的哪个项目位于鼠标下面,这对于复杂形状(如多边形)来说是一项非常大的工作量。
你最终找到了答案吗?你是如何解决这个问题的?我的确有完全相同的问题... –
我发现的具有最小功能的唯一组件是goocanvas(mm)。但:它不像tk画布那样容易使用。而且你必须处理来自画布部件意外行为的许多神秘效果。从画布上的鼠标事件调用对话框是一个悲剧!如果你想打印,你必须像在gtk中一样编写自己的打印支持。对我来说,也许我很愚蠢,但是如果用goocanvasmm的话,它会花费更多的时间。我相信通过C++接口使用tk-canvas是一种更好的方式!我会拆分我的编程这样做!gtk不好 – Klaus
好主意!我认为这个问题的答案。我有一个快速的外观和[链接](http://cpptk.sourceforge.net)看起来很有趣。它使用Tcl/Tk-isch语法。我用Tkx模块从Perl中使用了Tk,并使用了不同的语法,但是,嘿,在某些新技术中,转换它比重新转换为整个界面要容易得多。无论如何,请将您的解决方案的技术细节通知我们。 –