0

我需要创建自定义 tk 画布小部件(绘图)。如何做到这一点描述了http://www.tcl.tk/man/tcl8.0/TkLib/CrtItemType.htm

它是画布需要显示绘图时调用的显示函数。

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);
}

主文件

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;
}

主要的.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 ]

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

4

0 回答 0