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