ウィジェットを破棄してGtk.FlowBoxからウィジェットを削除しようとしていますが、グレーボックスが残っています。どのように私は灰色のボックスを削除することができますので、隣接するウィジェットは、ウィジェットの削除後に場所に落ちるように考えています。 1- 2つの画像を(PIXBUFから)とラベル 2-オーバーレイ画像がFlowBoxGtk.FlowBoxからウィジェットを削除する
に追加されるイベントボックス 3-イベントボックスに追加されOverlayImageに添加される:は、以下のウィジェットがパックされる方法であります
は、私は次の方法を試してみました: の1-破壊イベントボックス 、2-取得し、オーバーレイ画像のすべての子を破棄して、両方のケースでオーバーレイ画像とイベントボックス
を破壊し、ウィジェットが削除されるが、空の領域に留まりますその場所でクリックしたときに灰色ですが、何もしません - 画像を参照してください。
この空のスペースを削除すると、次のウィジェットが自動的にウィジェットが削除された場所に入り、次のウィジェットがその場所に収まるようになります。
コードは、ここで利用可能であり、「removeSelectedBooksFromLibrary」はFlowBox
このからユーザによって選択されたイベントボックスを除去FlowBoxから https://github.com/babluboy/bookworm/blob/master/src/bookworm.vala#L589
これにウィジェットを追加するためのコードである方法でありますFlowBox からウィジェットを削除するためのコードhttps://github.com/babluboy/bookworm/blob/master/src/bookworm.vala#L512
に感謝です解決策が追加され、ウィジェットとその親を削除する実例があります。
public class FlowBoxIssue : Gtk.Window {
public static int main (string[] args) {
Gtk.init (ref args);
FlowBoxIssue window = new FlowBoxIssue();
window.show_all();
Gtk.main();
return 0;
}
public FlowBoxIssue() {
this.title = "FlowBox Issue";
this.window_position = Gtk.WindowPosition.CENTER;
this.destroy.connect (Gtk.main_quit);
this.set_default_size (800, 600);
Gtk.FlowBox library_flowbox = new Gtk.FlowBox();
Gtk.Box library_mainbox = new Gtk.Box (Gtk.Orientation.VERTICAL, 20);
Gtk.ScrolledWindow library_scroll = new Gtk.ScrolledWindow (null, null);
library_scroll.set_policy (Gtk.PolicyType.AUTOMATIC, Gtk.PolicyType.AUTOMATIC);
library_scroll.add (library_flowbox);
Gtk.Overlay aOverlayImage1 = new Gtk.Overlay();
Gtk.EventBox aEventBox1 = new Gtk.EventBox();
Gtk.EventBox aEventBox2 = new Gtk.EventBox();
Gtk.EventBox aEventBox3 = new Gtk.EventBox();
try{
Gdk.Pixbuf aBookCover1 = new Gdk.Pixbuf.from_file_at_scale("cover.png", 200, 250, false);
Gtk.Image aCoverImage1 = new Gtk.Image.from_pixbuf(aBookCover1);
aOverlayImage1.add(aCoverImage1);
Gtk.Label overlayTextLabel1 = new Gtk.Label("Label 1");
aOverlayImage1.add_overlay(overlayTextLabel1);
aEventBox1.add(aOverlayImage1);
library_flowbox.add (aEventBox1);
}catch(Error e){
}
Gtk.Overlay aOverlayImage2 = new Gtk.Overlay();
try{
Gdk.Pixbuf aBookCover2 = new Gdk.Pixbuf.from_file_at_scale("cover.png", 200, 250, false);
Gtk.Image aCoverImage2 = new Gtk.Image.from_pixbuf(aBookCover2);
aOverlayImage2.add(aCoverImage2);
Gtk.Label overlayTextLabel2 = new Gtk.Label("Label 2");
aOverlayImage2.add_overlay(overlayTextLabel2);
aEventBox2.add(aOverlayImage2);
library_flowbox.add (aEventBox2);
}catch(Error e){
}
Gtk.Overlay aOverlayImage3 = new Gtk.Overlay();
try{
Gdk.Pixbuf aBookCover3 = new Gdk.Pixbuf.from_file_at_scale("cover.png", 200, 250, false);
Gtk.Image aCoverImage3 = new Gtk.Image.from_pixbuf(aBookCover3);
aOverlayImage3.add(aCoverImage3);
Gtk.Label overlayTextLabel3 = new Gtk.Label("Label 3");
aOverlayImage3.add_overlay(overlayTextLabel3);
aEventBox3.add(aOverlayImage3);
library_flowbox.add (aEventBox3);
}catch(Error e){
}
Gtk.Button delete_button = new Gtk.Button.with_label("Delete Pix");
delete_button.clicked.connect (() => {
//This is the line which resolved the issue - get the parent of the widget and destroy it and then destroy the widget
aEventBox2.get_parent().destroy();
aEventBox2.destroy();
});
library_mainbox.pack_start(library_scroll, true, true, 0);
library_mainbox.pack_end(delete_button, true, false, 0);
this.add(library_mainbox);
}
}
あなたはコードをリンクするのを忘れました(実際には質問自体に[MCVE](http://stackoverflow.com/help/mcve)する必要があります)。 – andlabs
コードに言及するのを忘れて謝罪します。私はMCVEを作成し、質問を更新しようとします –