D Классы, ООП и GTKd Notebook

Я пытаюсь добавить страницу в блокнот gtk, используя gtkd из второго класса (MyNewClass) ниже. Записная книжка создается в первом классе main_window и вызывается вторым. Программа компилируется нормально, однако, когда я открываю программу, главное окно gtk остается пустым, за исключением окна тестера.

import gtk.Box;
import gtk.Button;
import gtk.Grid;
import gtk.Label;
import gtk.MainWindow;
import gtk.Main;
import gtk.Notebook;

class main_window : MainWindow
{
  Notebook notebook;

  this()
  {
super("MyProg");
    setDefaultSize(600,100);

       //Here is the creation of the notebook
 this.notebook=new Notebook;

Box tester=new Box(Orientation.VERTICAL, 1);  
notebook.appendPage(tester, new Label("test")); //This works fine from this class

 Grid grid=new Grid();
 grid.setColumnSpacing(12);  //establish the main grid
 grid.setRowSpacing(3);
 grid.attach(notebook, 0,0,1,9);
add(grid);
showAll();
  }
}

class MyNewClass : main_window
{
    this()
    {
File MFile = File("file.txt", "r");

    Grid MGrid;
  int row=0;
 int col=0;  //Set the column and row number for the gtk grid.
  string[] list;
 string i;
float p;
Label MLabel;


          while(!MFile.eof)
          {
             if (match(line, `\[\[`)){
             MGrid=new Grid();
        MGrid.setColumnSpacing(12);
         MGrid.setRowSpacing(3);
             row=0;

             line=replace(line, regex(r"(\[)", "g"), "");
            line=replace(line, regex(r"(\])", "g"), "");

                //I HAVE USED A TEST WRITELN HERE TO MAKE SURE THE FUNCTION IS CALLED.
                //Below is the notebook append that fails. When I test it from the first class above, I can append. When I call it here, it compiles but nothing is done.

                Box MBox=new Box(Orientation.VERTICAL, 1);
                MBox.add(MGrid);
         super.notebook.appendPage(MBox, new Label(line));//
          }
      }
}

void main(string[] args)
{
Main.init(args);
new main_window;

new M;
Main.run();
}

1 ответ

Решение

Хотя код не компилируется, но причина, по которой ваши страницы не отображаются, заключается в том, что вам нужно вызвать MBox.show() показать коробки.

Box MBox = new Box(Orientation.VERTICAL, 1);
MBox.add(MGrid);
super.notebook.appendPage(MBox, new Label(line));
MBox.show();

Вы также можете позвонить showAll на виджете контейнера, чтобы показать все дочерние виджеты. В вашем случае это блокнот, сетка с блокнотом или главное окно. Так что вы можете добавить notebook.showAll() после цикла, чтобы достичь того же.

В дополнение к этому, вы можете придерживаться стиля D для написания кода D: http://dlang.org/dstyle.html.

Другие вопросы по тегам