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