16.04 এর নিচে জেনिटी চলাকালীন ত্রুটি বার্তা: Gtk- বার্তা: GtkDialog একটি ক্ষণস্থায়ী পিতামাতাকে ছাড়াই ম্যাপ করা হয়েছে। এটা নিরুৎসাহিত করা হয়


19

উবুন্টু 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 () (যা এই উইন্ডোটি সর্বদা উপরে থাকে, বা অন্যটির জন্য ক্ষণস্থায়ী হিসাবে সেট করে) এবং এটি একটি মডেল ডায়ালগ তৈরির জন্য optionচ্ছিকভাবে gtk_window_set_modal ()। এটি শেষ পর্যন্ত বিভিন্ন GtkDialog কনস্ট্রাক্টররা কি করে।


zenity --help-generalদেয় --attach=WINDOW Set the parent window to attach toতবে আমি কীভাবে এটি ব্যবহার করব তা নিশ্চিত নই (উইন্ডো কী?), সম্ভবত এটি আপনার সমস্যার সমাধান করবে।
আল.জি.

ধন্যবাদ, @ আল.জি. WINDOW_ID=$(xprop -name প্রতিধ্বনি $ TITLE e | লাইনের সাহায্যে আমি উইন্ডো আইডি পুনরুদ্ধার করতে সক্ষম হয়েছি গ্রেপ ডাব্লুএম_সিএলআইআইএলইডিআর | কাট-ডি "#" -ফ 2 | কাট -c2-20) `এবং আমি তখন চেষ্টা করেছি zenity --attach=$WINDOW_ID --text-info --filename=<filename> কিন্তু দুঃখের সাথে আমি এখনও সতর্কতা পেয়েছি। খুব খারাপ, তবে উইন্ডো আইডি কীভাবে পাবেন তা একদিন কাজে লাগতে পারে!
লিও সাইমন

আসলে আপনি যদি gtk_window_set_transient_ এর জন্য উত্সের উত্সটি অনুসন্ধান করেন তবে কোনও ফল পাবেন না।
আল.জি.

হা. আপনি যদি 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 ডেভস এই সতর্কতাটি যুক্ত করার সিদ্ধান্ত নিয়েছে যা বেশ কয়েকটি প্যাকেজগুলিকে প্রভাবিত করে। আমাদের কেবল জেনিটি দেবকে অপেক্ষা করতে হবে জেনটিটি ধরে রাখতে এবং ঠিক করতে।

সঙ্গে ব্যাশ শেল (এই 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
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.