16.04 के तहत ज़ेनिटी चलाने पर त्रुटि संदेश: Gtk-Message: GtkDialog बिना क्षणिक माता-पिता के मैप किया गया। यह हतोत्साहित किया जाता है


19

Ubuntu 16.04 के तहत मुझे निम्नलिखित संदेश मिलता है

 Gtk-Message: GtkDialog mapped without a transient parent. This is discouraged

जब मैं कमांड के साथ ज़ेनिटी खोलता हूं

  zenity --text-info --filename=<filename>

यह 14.04 के तहत नहीं हुआ। मुझे लगता है कि उत्तर इस पोस्ट से संबंधित है, लेकिन पोस्ट यह नहीं बताता है कि प्रस्तावित समाधान को कैसे लागू किया जाए। क्या कोई कृपया बता सकता है कि मुझे किस फ़ाइल को सुझाई गई लाइनों को जोड़ना चाहिए?

आप इस चेतावनी को GtkDialog को एक माँ-बाप को मॉडल बनाकर ठीक करते हैं। संबंधित कार्य हैं gtk_window_set_transient_for () (जो इस विंडो को हमेशा शीर्ष पर या किसी अन्य के लिए क्षणिक होने के लिए सेट करता है) और वैकल्पिक रूप से gtk_window_set_modal () इसे एक संवाद बनाने के लिए। यह आखिरकार विभिन्न GtkDialog कंस्ट्रक्टर क्या करते हैं।


zenity --help-generalदेता है, --attach=WINDOW Set the parent window to attach toलेकिन मुझे यकीन नहीं है कि इसका उपयोग कैसे करें (विंडो क्या है?), शायद यह आपकी समस्या को हल करेगा।
अल.जी.

धन्यवाद, @ Al.G मैं रेखा WINDOW_ID=$(xprop -name Echo $ TITLE` के साथ WINDOW आईडी को पुनर्प्राप्त करने में सक्षम था grep WM_CLIENT_LEADER | cut -d "#" -f2 | cut -c2-20) `और मैंने तब कोशिश की zenity --attach=$WINDOW_ID --text-info --filename=<filename> लेकिन दुख की बात है कि मुझे अभी भी चेतावनी मिली है। बहुत बुरा है, लेकिन यह एक दिन काम में आ सकता है यह जानने के लिए कि विंडो आईडी कैसे प्राप्त करें!
सिंह साइमन

वास्तव में यदि आप gtk_window_set_transient_for के लिए ज़ेनिटी के स्रोत को खोजते हैं तो आपको कोई परिणाम नहीं मिलेगा।
अल.जी.

हाँ। यदि आप gtk_window_set_modal खोजते हैं, तो आपको बहुत सारे परिणाम मिलते हैं, लेकिन मुझे नहीं पता कि इसे संदेश को चुप करने वाले तरीके से कैसे सेट किया जाए।
लियो साइमन

1
डॉक्स के अनुसार आप इसे एक विंडो और एक मूल विंडो देते हैं। मुझे लगता है कि अभिभावक की खिड़की के साथ खिड़की के निर्माण के बाद इसे कहीं और कहा जाना चाहिए NULL। हालाँकि, मैं make installस्थानीय रूप से ज़िंदादिली नहीं कर सकता (मैं स्थापित करने के लिए डॉक्स या कुछ नहीं खोज सका) इसलिए मैंने अंतिम रूप दिया। गंदे का उपयोग करना पड़ेगा 2>/dev/null
अल.जी.

जवाबों:


21

अनदेखी करो इसे।

यह एक चेतावनी है , त्रुटि नहीं। एप्लिकेशन काम करता है, यह सिर्फ मन में सर्वोत्तम प्रथाओं के साथ कोडित नहीं है, जैसा कि ऐसा लगता है। आपको zenityअपने लिंक किए गए प्रश्न में वर्णित सुधार को लागू करने के लिए स्रोत कोड को संशोधित करना होगा और फिर इसे स्वयं संकलित करना होगा, लेकिन ... यह वैसे भी काम करता है, इसलिए आपको परेशान क्यों होना चाहिए?

यदि आप केवल अपने टर्मिनल में आउटपुट से छुटकारा चाहते हैं, तो आप बस STDERR (मानक त्रुटि स्ट्रीम, जहां यह चेतावनी मुद्रित होती है) को रीडायरेक्ट कर सकते हैं /dev/null(वर्चुअल कैरेक्टर डिवाइस जो डेटा को निगलता है) 2> /dev/null, कमांड के अंत में संलग्न करके , इस तरह:

zenity --text-info --filename=<filename> 2> /dev/null

1
धन्यवाद! दुर्भाग्य से किसी कारण 2> /dev/nullसे वांछित प्रभाव नहीं होता है, चेतावनी अभी भी बनी हुई है। मुझे पता है कि यह केवल एक उपद्रव है, लेकिन मैं इस तरह की चेतावनी को दबाने में सक्षम होना पसंद करूंगा।
सिंह साइमन

3

ऐसा लगता है कि Gtk devs ने इस चेतावनी को जोड़ने का फैसला किया है जो कई पैकेजों को प्रभावित करता है। हमें बस ज़ीनिटी देव के लिए ज़ेनिटी को पकड़ने और ठीक करने के लिए इंतजार करना होगा।

साथ बैश खोल (इस Posix अनुरूप नहीं है) को दबाने विशिष्ट त्रुटि संदेश के लिए अपेक्षाकृत आसान stderr करने के लिए के माध्यम से अन्य संदेशों की अनुमति है:

zenity --info --text "hello" 2> >(grep -v 'GtkDialog' >&2)

यह स्टडआउट के साथ हस्तक्षेप नहीं करता है, ताकि इसे सामान्य रूप में कमांड प्रतिस्थापन में पाइप या उपयोग किया जा सके:

echo message: $(zenity --entry  2> >(grep -v 'GtkDialog' >&2) )

2

zenity ... 2>/dev/nullमेरे लिये कार्य करता है। एकमात्र समस्या जो मुझे दिखाई देती है वह यह है कि अन्य (महत्वपूर्ण) त्रुटियां संदेश भी आपके कोड में किसी भी तरह से बेहतर बिल्ड एरर कैप्चर को दबा दिया जाएगा


2
वास्तव में, यह एक खतरनाक समाधान जैसा दिखता है। बेहतर है कि इसका इस्तेमाल न करें।
मार्क वॉनहोमिसन

0

डेव रॉव के उत्तर पर निर्माण , यदि आपके पास कई संकेत हैं, तो आप इस तरह के एक समारोह बनाकर इसे साफ कर सकते हैं

function zenityNoWarn() {
    zenity "$@" 2> >(grep -v 'GtkDialog' >&2)
}

फिर इसे इस तरह उपयोग करें:

zenityNoWarn --question --text "Are you sure?"

यह अन्य तर्क के साथ संयोजन के दौरान चीजों को पढ़ने में थोड़ा आसान बनाता है:

if [[ `zenityNoWarn --question --text "Are you sure?"; echo $?` -eq 0 ]]; then
    echo "Yes!"
else
    echo "No..."
fi
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.