2011-02-23 36 views

Trả lời

8

Các tài liệu GTK đề nghị:

GtkWidget *toplevel = gtk_widget_get_toplevel (widget); 
    if (gtk_widget_is_toplevel (toplevel)) 
    { 
     /* Perform action on toplevel. */ 
    } 

get_toplevel sẽ trở lại widget trên cùng bạn bên trong, có hay không đó là một cửa sổ, do đó việc kiểm tra is_toplevel. Yeah cái gì đó được đặt tên sai vì mã trên làm một "get_toplevel()" sau đó một "is_toplevel()" tức thời (rất có thể, get_toplevel() nên được gọi là cái gì khác).

2

Mặc dù gtk_widget_get_toplevel sẽ hoạt động, bạn cũng có thể thử mã bên dưới. Nó sẽ nhận được cửa sổ gtk gốc cho tiện ích đã cho và in tiêu đề của nó.

GdkWindow *gtk_window = gtk_widget_get_parent_window(widget); 
GtkWindow *parent = NULL; 
gdk_window_get_user_data(gtk_window, (gpointer *)&parent); 
g_print("%s\n", gtk_window_get_title(parent)); 

hy vọng điều này giúp, coi

+2

này có một đường vòng không cần thiết thông qua gunge GDK ở mức độ thấp - tốt hơn để ở với lớp GTK. Ở đây bạn yêu cầu widget phải được nhận ra và có thể có vấn đề trong GTK 3. –

+0

"mặc dù phương pháp được đề xuất phù hợp sẽ hoạt động, bạn cũng có thể thử thay thế phức tạp không cần thiết này vì không có lý do rõ ràng" ... hoặc là có một .. .? –

5

Trong pygtk, bạn có thể nhận được các mục cấp đầu như toplevel = mywidget.get_toplevel() sau đó ăn toplevel trực tiếp đến gtk.MessageDialog()

Các vấn đề liên quan