في Python tkinter، تهدف معلمة "الأمر" لعنصر واجهة المستخدم إلى تحديد وظيفة لـ يتم تنفيذها عند الضغط على الزر. ومع ذلك، هناك مفهوم خاطئ شائع بين المبتدئين وهو ملاحظة أن الوظيفة المرتبطة بـ "الأمر" يتم تنفيذها حتى في وقت إعلان الزر.
لفهم هذا السلوك، نحتاج إلى التعمق في كيفية تعامل بايثون مع معلمات الوظيفة. عند تمرير دالة كمعلمة، هناك احتمالان:
في رمز المثال الذي قدمته، يتم تمرير Hello() كمعلمة إلى عنصر واجهة المستخدم "الزر"، مما يعني أنه سيتم تنفيذ الوظيفة على الفور، ويتم تمرير القيمة المرجعة الخاصة بها إلى "الأمر". نظرًا لأن Hello() لا يُرجع أي شيء، فإنه يُرجع لا شيء، والذي يتم بعد ذلك تعيينه لمعلمة "الأمر" الخاصة بالزر، ولا يفعل شيئًا فعليًا.
لحل هذه المشكلة وتنفيذ الوظيفة فقط عند النقر فوق الزر، يجب عليك تمرير كائن الوظيفة، مثل هذا:
hi = Button(frame, text="Hello", command=Hello)
وبهذه الطريقة، عند الضغط على الزر، سيتم استدعاء الدالة Hello() وستنفذ التعليمات البرمجية المقصودة.
بالإضافة إلى ذلك، إذا كنت بحاجة إلى تمرير الوسائط إلى الدالة، فيمكنك استخدام تعبير لامدا لتغليف استدعاء الدالة، كما هو موضح أدناه:
hi = Button(frame, text="Hello", command=lambda: Goodnight("Moon"))
في هذه الحالة، يضمن تعبير lambda أن Goodnight() لا يتم تنفيذ الوظيفة في وقت إعلان الزر، بل تنتظر حتى يتم النقر فوق الزر ويتم تنفيذ الأمر.
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3