Tkd виджет не находит параметры строки и столбца - PullRequest
0 голосов
/ 28 мая 2019

Я пытаюсь создать простое приложение с графическим интерфейсом, используя пакет tkd и следующий код:

// modified from: https://github.com/nomad-software/tkd

import tkd.tkdapplication; 

class Application : TkdApplication    {                
    auto labellist = ["First", "Second", "Third", "Fourth", "Fifth", "Sixth", ]; 
    override protected void initInterface() {         
        int ncol =0; 
        auto frame = new Frame(2, ReliefStyle.groove); 
        frame.pack(10);  
        foreach(lab; labellist){
            auto label = new Label(frame, lab);
            label.grid(row=nrow, column=0);
            auto entry = new Entry(frame); 
            entry.grid(row=nrow, column=1);
            nrow += 1; 
        }
        auto exitButton = new Button(frame, "Exit").setCommand(&this.exitCommand).pack(10);                                  
    }
    private void exitCommand(CommandArgs args)  { 
        this.exit();                                 
    }
}

void main(string[] args){
    auto app = new Application(); 
    app.run(); 
}

Однако выдается следующая ошибка:

$ dub run
Performing "debug" build using /usr/bin/dmd for x86_64.
x11 1.0.21: target for configuration "tcltk-import" is up to date.
tcltk 8.6.5: target for configuration "library" is up to date.
tkd 1.1.12: target for configuration "library" is up to date.
tkdgui ~master: building configuration "application"...
source/app.d(15,15): Error: undefined identifier row
source/app.d(15,25): Error: undefined identifier column
source/app.d(17,15): Error: undefined identifier row
source/app.d(17,25): Error: undefined identifier column
source/app.d(18,4): Error: undefined identifier nrow
/usr/bin/dmd failed with exit code 1.

Подробности о сетке упомянуты здесь . Строка и столбец являются допустимыми параметрами для ввода.

Где проблема и как ее можно решить.

1 Ответ

0 голосов
/ 29 мая 2019

В вашем коде есть две проблемы. Вот первый:

label.grid(row=nrow, column=0);
           ^^^^      ^^^^^^^

D не поддерживает именованные параметры, которые вы пытаетесь использовать. Вместо этого вам нужно будет использовать позиционные параметры:

label.grid(0, nrow);

FWIW, есть несколько предложений по добавлению именованных параметров в D, но на данный момент ни одного из них нет в языке.

Вторая проблема nrow нигде не определена. Судя по существованию ncol и тому факту, что он нигде не используется, кажется, вы изменили код с работы со столбцами на работу со строками и не изменили имя ncol на nrow.

...