"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > متى يتم تنفيذ وظيفة معلمة \"الأمر\" الخاصة بالزر؟

متى يتم تنفيذ وظيفة معلمة \"الأمر\" الخاصة بالزر؟

تم النشر بتاريخ 2024-11-09
تصفح:462

When is the Button\'s \

تنفيذ معلمة "الأمر" للزر عند الإعلان: كشف الغموض

في Python tkinter، تهدف معلمة "الأمر" لعنصر واجهة المستخدم إلى تحديد وظيفة لـ يتم تنفيذها عند الضغط على الزر. ومع ذلك، هناك مفهوم خاطئ شائع بين المبتدئين وهو ملاحظة أن الوظيفة المرتبطة بـ "الأمر" يتم تنفيذها حتى في وقت إعلان الزر.

لفهم هذا السلوك، نحتاج إلى التعمق في كيفية تعامل بايثون مع معلمات الوظيفة. عند تمرير دالة كمعلمة، هناك احتمالان:

  • تمرير كائن الوظيفة: يتم تحقيق ذلك ببساطة عن طريق الإشارة إلى اسم الوظيفة، مثل Command=Hello.
  • تمرير قيمة إرجاع الدالة: يتم ذلك عن طريق وضع استدعاء الدالة بين قوسين، مثل Command=Hello().

في رمز المثال الذي قدمته، يتم تمرير Hello() كمعلمة إلى عنصر واجهة المستخدم "الزر"، مما يعني أنه سيتم تنفيذ الوظيفة على الفور، ويتم تمرير القيمة المرجعة الخاصة بها إلى "الأمر". نظرًا لأن Hello() لا يُرجع أي شيء، فإنه يُرجع لا شيء، والذي يتم بعد ذلك تعيينه لمعلمة "الأمر" الخاصة بالزر، ولا يفعل شيئًا فعليًا.

لحل هذه المشكلة وتنفيذ الوظيفة فقط عند النقر فوق الزر، يجب عليك تمرير كائن الوظيفة، مثل هذا:

hi = Button(frame, text="Hello", command=Hello)

وبهذه الطريقة، عند الضغط على الزر، سيتم استدعاء الدالة Hello() وستنفذ التعليمات البرمجية المقصودة.

بالإضافة إلى ذلك، إذا كنت بحاجة إلى تمرير الوسائط إلى الدالة، فيمكنك استخدام تعبير لامدا لتغليف استدعاء الدالة، كما هو موضح أدناه:

hi = Button(frame, text="Hello", command=lambda: Goodnight("Moon"))

في هذه الحالة، يضمن تعبير lambda أن Goodnight() لا يتم تنفيذ الوظيفة في وقت إعلان الزر، بل تنتظر حتى يتم النقر فوق الزر ويتم تنفيذ الأمر.

بيان الافراج أعيد طبع هذه المقالة على: 1729295717 إذا كان هناك أي انتهاك، يرجى الاتصال بـ [email protected] لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3