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

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 ]

プロット ウィジェットを含む 2 つの異なるキャンバス ウィジェットが作成されます。他の関数は何もしないので、表示関数のコードのみを示します。シンプルな機能(プロットを表示する)だけが必要です。ここでのプロットの代わりに、長方形を印刷しています。問題は、黒い四角形が最初のプロットにのみ表示され、2 番目のプロットが空であることです。これはどのように起こりますか?

4

0 に答える 0