2011-02-23 6 views
10

मेरे पास एक कस्टम विजेट है और इसे एक संदेशडिअलॉग लॉन्च करने की आवश्यकता है और मेरे लिए उस संदेश संवाद को विंडो के शीर्ष पर रखने के लिए मेरे विजेट में है, तो मुझे मूल gtk.window तक पहुंच की आवश्यकता है। क्या माता-पिता जीटीके विंडो पाने का कोई तरीका है? धन्यवादक्या आप विजेट से मूल जीटीके विंडो प्राप्त कर सकते हैं?

उत्तर

8

जीटीके डॉक्स सुझाव देते हैं:

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

get_toplevel सर्वोच्च विजेट आप के अंदर कर रहे हैं इस प्रकार is_toplevel जांच वापस आ जाएगी, चाहे या नहीं यह एक खिड़की है,। हाँ कुछ गलत नाम दिया गया है क्योंकि ऊपर दिए गए कोड में "get_toplevel()" है, फिर तत्काल "is_toplevel()" (सबसे अधिक संभावना है, get_toplevel() को कुछ और कहा जाना चाहिए)।

2

हालांकि gtk_widget_get_toplevel काम करना चाहिए, आप नीचे दिए गए कोड को भी आजमा सकते हैं। इसे दिए गए विजेट के लिए मूल gtk विंडो प्राप्त करनी चाहिए और इसके शीर्षक को प्रिंट करना चाहिए।

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)); 

आशा है कि यह मदद करता है, का संबंध

+2

यह निम्न स्तर GDK gunge के माध्यम से एक अनावश्यक चक्कर लेता करने के लिए सीधे toplevel फ़ीड प्राप्त कर सकते हैं - बेहतर रहने के लिए जीटीके परत के साथ। यहां आपको विजेट को एहसास होने की आवश्यकता है, और जीटीके 3 में समस्याएं हो सकती हैं। –

+0

"हालांकि उचित अनुशंसित विधि काम करनी चाहिए, आप किसी भी स्पष्ट कारण के लिए इस अनिवार्य जटिल विकल्प को भी आजमा सकते हैं" ... या कोई है .. ।? –

5

PyGTK में, आप toplevel = mywidget.get_toplevel() तरह उच्चस्तरीय तो gtk.MessageDialog()

संबंधित मुद्दे