我試圖通過銷燬小部件從Gtk.FlowBox中移除一個小部件,但是還有一個灰色框留在原地。任何想法如何刪除灰色框,以便相鄰的小部件在刪除小部件後落入適當位置。從Gtk.FlowBox中移除小部件
以下是如何窗口小部件包裝: 1-兩個圖像(來自PIXBUF)和標籤被添加到窗格在overlayImage 2-疊印圖像被添加到事件盒 3-事件盒被添加到FlowBox
我曾嘗試以下方法: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並更新問題 –