GTK + виджеты не отображаются в окне после компиляции с Vala - PullRequest
0 голосов
/ 22 сентября 2018

Я очень большая Вала Новичок.Я сделал функцию cusButton, которая в некоторой степени предназначена для рефакторинга других кнопок и сокращения строк кода.После компиляции и запуска у меня появляется пустой экран. (Ничего не отображается). Вероятно, это глупая ошибка.Ребята, можете ли вы указать мне на мою ошибку?

   Gtk.Button cusButton(string label,Gtk.Box grid ){
       var button  = new Gtk.Button.with_label(label);    
       button.show();
       grid.pack_start(button,true,true,0);
       return button;   
}


public class window:Gtk.ApplicationWindow{
    internal window(MyApplication app){
    Object (application:app,title:"TCalc");
    this.set_default_size(640,1136);


    this.window_position = Gtk.WindowPosition.CENTER;
    var parent = new Gtk.Box(Gtk.Orientation.VERTICAL,0);
    //Row 1
    //int left, int top, int width , int height 
    var row1 = new Gtk.Box(Gtk.Orientation.HORIZONTAL,0);
    var clear_button = cusButton("AC",row1);
    var ac_button = cusButton("<-",row1);
    var perc_button = cusButton("%",row1);
    var div_button = cusButton("/",row1);

    //Row 2
    var row2 = new Gtk.Box(Gtk.Orientation.HORIZONTAL,0);
    var sev_button = cusButton("7",row2);
    var eight_button = cusButton("8",row2);
    var nine_button = cusButton("9",row2);
    var multi_button = cusButton("X",row2);
    //A few more rows..

    parent.pack_start(row1,false,false,1);
    parent.pack_start(row2,false,false,1);

    this.add(parent);
    parent.show();

}
}

public class MyApplication : Gtk.Application { 
protected override void activate(){
    new window (this).show();
}
internal MyApplication () {
    Object (application_id: "org.example.MyApplication");
}

}
public static int main(string[] args) {
   return new MyApplication().run(args);

}

1 Ответ

0 голосов
/ 22 сентября 2018

Попробуйте использовать show_all () вместо show ().Это спасает вас от вызова шоу на всех виджетах.Поэтому измените:

protected override void activate(){
    new window (this).show();
}

на

protected override void activate(){
    new window (this).show_all();
}

Затем вы можете также удалить другие вызовы на show (), например, button.show();, которые есть в вашем коде.

...