كيف أقوم بعرض نافذة شكل matplotlib أعلى جميع النوافذ الأخرى في Spyder

StackOverflow https://stackoverflow.com//questions/20025077

  •  21-12-2019
  •  | 
  •  

سؤال

أنا أستخدم Spyder IDE وأجد أن نوافذ أشكال matplotlib يتم عرضها دائمًا خلف النوافذ الأخرى.على سبيل المثال، مباشرة بعد بدء سبايدر، إذا كتبت plt.plot([0,1],[0,1]) في وحدة التحكم، أحصل على قطعة أرض خلف نافذة Spyder الرئيسية.كيف يمكنني جعل النوافذ الشكلية الجديدة تظهر فوق كافة النوافذ الأخرى؟

لقد وجدت هذا الحل (جعل نافذة رسم matplotlib منبثقة باعتبارها النافذة النشطة)، لكنه لا يعمل بالنسبة لي في سبايدر.أواجه مشكلة مع fig.canvas.manager.window.انها تقول AttributeError: 'FigureManagerMac' object has no attribute 'window'.

هل كانت مفيدة؟

المحلول

حسنًا، لقد توصلت إلى الحل عندما كنت أعمل على شيء آخر.

عندما أستخدم MacOSX الخلفية، ثم fig.canvas.manager.window يعطي AttributeError: 'FigureManagerMac' object has no attribute 'window'.ومع ذلك، عندما أستخدم TkAgg الخلفية، ثم fig.canvas.manager لديه السمة window.وهكذا أستطيع التنفيذ هذا الاقتراح على النحو التالي:

import matplotlib
matplotlib.use('TkAgg')
import matplotlib.pyplot as plt
fig = plt.figure()
plt.plot([0,1],[0,1])
#Put figure window on top of all other windows
fig.canvas.manager.window.attributes('-topmost', 1)
#After placing figure window on top, allow other windows to be on top of it later
fig.canvas.manager.window.attributes('-topmost', 0)

بسيطة بما فيه الكفاية، أليس كذلك؟الجزء الأول الصعب هو أنه يجب عليك تعيين الواجهة الخلفية قبل استيراد pyplot.تغيير الواجهة الخلفية بعد ذلك لا يفعل شيئًا في تجربتي.الجزء الثاني الصعب هو ما يفعله برنامج Spyder's Scientific Startup import matplotlib.pyplot as plt مباشرة عند تشغيل Spyder IDE، لذلك ليس لديك فرصة لتعيين الواجهة الخلفية قبل استيراد pyplot.الطريقة للتغلب على ذلك هي الانتقال إلى Preferences->Console->External Modules، وتعيين الواجهة الخلفية لواجهة المستخدم الرسومية على TkAgg، وإعادة تشغيل Spyder.ثم الكود أعلاه يعمل بشكل صحيح.

في السابق كنت أقوم بإعداد الواجهة الخلفية عبر matplotlib.rcParams['backend'] = 'TkAgg' مباشرة بعد إطلاق سبايدر.ومع ذلك، عندما كنت أفعل شيئًا آخر، بدأت أتلقى أخطاء تشير إلى MacOSX الخلفية.لم يكن هذا منطقيًا بالنسبة لي، لأنني اعتقدت أنني كنت أتعاطى TkAgg.الجزء المجنون هو عندما استفسرت matplotlib.get_backend عادت TkAgg!من الواضح أن تعيين الواجهة الخلفية بعد استيراد pyplot يعمل كما لو أنك قمت بتغيير الواجهة الخلفية، لكنه لا يغير الواجهة الخلفية فعليًا.ارج!!

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top