创建自定义tk画布小部件

时间:2013-04-23 13:18:54

标签: c++ canvas tcl tk xlib

我需要创建自定义tk canvas小部件(plot)。如何做到描述http://www.tcl.tk/man/tcl8.0/TkLib/CrtItemType.htm

当画布需要显示情节时调用的是dispay函数。

void
PlotItem::DisplayPlot( Tk_Canvas canvas, Tk_Item *itemPtr, Display *display, Drawable drawable, int x, int y, int width, int height) {
    PlotItem *plotPtr = (PlotItem *) itemPtr;
    GC gc = XCreateGC(display, drawable, 0, 0);
    XFillRectangle(display, drawable, gc, 100, 100, 50, 50);
}

的main.cpp

int main() {
    Tcl_Interp *interp = Tcl_CreateInterp(); 
    if (Tcl_Init(interp) == TCL_ERROR) {
        return TCL_ERROR;
    } 
    if (Tk_Init(interp) == TCL_ERROR) {
        return TCL_ERROR;
    } 

    Tk_CreateItemType(&tkPlotType); 
    int result = Tcl_Eval(interp, "source main.tcl");

    std::cout << result << std::endl;
    std::cout << interp->result << '\n';

    Tk_MainLoop(); 
    return 0;
}

main.tcl

wm title . program_tk
wm minsize . 628 628

canvas .vp -background white -width 310 -height 224
canvas .hp -background white -width 310 -height 224

pack .vp 
pack .hp 

set verticalPlot [eval .vp create plot 1 1 ]
set horizontalPlot [eval .hp create plot 1 1 ]

它创建了两个不同的画布小部件,都包含绘图小部件。仅显示显示功能的代码,因为其他功能不起作用。我只需要简单的功能(显示情节)。这里没有绘图是打印矩形。  问题是黑色矩形仅显示在第一个图上,第二个图表是空的。怎么会发生这种情况?

0 个答案:

没有答案