خطأ عند اغلاق اللعبة

عندما اغلق اللعبة حقت ping pong يظهر لي هذا الخطأ
هل احد يعرف السبب وشكرا

3 إعجابات

طيب تاكد كده من ال() window.exitonclic معموله صح ولا لا

إعجاب واحد (1)

الخطأ بيحصل لأن الكود بيحاول يعمل bind لحدث بعد إغلاق النافذة. الحل هو التأكد من عدم ربط أي أحداث أو استخدام أوامر على النافذة بعد إغلاقها. ممكن تضيف شرط للتحقق من إن النافذة لسه موجودة قبل أي عملية bind أو تلغي الأحداث المرتبطة قبل إغلاق التطبيق.

إعجاب واحد (1)

ما فهمت والله بس ممكن توضح وتعطي مثال

إعجابَين (2)

الخطأ اللي بيظهر بيحصل لأن الكود بيحاول يعمل ربط (bind) لحدث معين (زي ضغط زر معين) بعد ما النافذة الرسومية للعبة اتقفلت. ببساطة، مش مسموح إنك تتعامل مع نافذة اتقفلت أو دُمّرت بالفعل.

المشكلة:

في اللعبة بتاعتك، لما بتقفل النافذة، الكود بيحاول ينفذ أمر على حاجة مش موجودة (النافذة اتقفلت)، وده اللي بيعمل الخطأ.

الحل:

لازم تتأكد إن النافذة لسه موجودة قبل ما تحاول تربط أي أحداث. كمان ممكن تلغي أي أحداث مرتبطة بالنافذة قبل ما تقفلها.

مثال عملي:

إنت مثلاً ممكن تكتب كود يتحقق إذا النافذة لسه موجودة قبل ما تحاول تربط أي حدث. هنا مثال بسيط:

import turtle

# إنشاء نافذة اللعبة
window = turtle.Screen()

# تعريف وظيفة لتتحقق من وجود النافذة قبل ربط الحدث
def check_window_and_bind():
    if window._root is not None:  # تحقق إذا النافذة موجودة
        window.onkey(None, "space")  # ربط حدث بالضغط على المسافة

# إغلاق النافذة بعد مدة قصيرة (مثلاً لمحاكاة إغلاق اللعبة)
def close_window():
    window.bye()  # إغلاق النافذة

window.listen()  # تفعيل الاستماع للأحداث
window.onkey(close_window, "q")  # إغلاق النافذة عند الضغط على "q"

# اختبار الكود
check_window_and_bind()  # محاولة ربط حدث لو النافذة موجودة

window.mainloop()  # تشغيل النافذة

إيه اللي بيحصل هنا:

  1. بنعمل نافذة للعبة باستخدام مكتبة turtle.
  2. بنعمل وظيفة check_window_and_bind علشان تتأكد إن النافذة موجودة قبل ربط أي حدث.
  3. لما تضغط على “q”، النافذة بتتقفل.

جرب تحط الكود ده أو حاجة مشابهة في مشروعك، بحيث قبل أي عملية ربط (bind) تتأكد إن النافذة لسه مفتوحة.

إعجابَين (2)

عندي طريقة عملتها وتحلت في الكود بتاعي وهي كالتالي

اكت امر try وحط في الكود وبعديها حط expert وداخلها pass كما في المثال

try:
   ضع الكود كاملا في الداخل هنا عدا المكتبات المصدرة 
expert:
    pass
3 إعجابات

ال expert ده مش موجوده
ال try اه موجوده لكن ال expert لا مش موجوده

إعجابَين (2)

عفوا اخطات في الكتابة الأمر اسمه except عشان في مصحح تلقائي للكتابة قام وحط لي كلمة expert بدل except

try:
   ضع الكود كاملا في الداخل هنا عدا المكتبات المصدرة 
except:
    pass

هو لعبة ال snake game هي بس اللي مطلعتش كده
لكن ping pong او اي مشروع تاني بيطلعلي نفس الخطأ حتى لما عملت الtry و ال except

إعجاب واحد (1)

اعمل مثل دا المثال

from turtle import Screen

try:
    window = Screen()
    window.setup(750,615)
    window.cv._rootwindow.resizable(False, False)
    window.bgcolor("#020202")
    window.title("Language : اختيار اللغة")
    window.listen()
    window.tracer(0)

    if lang == "2":

        title = "Snake Game Version: 1.27"

        font = "Arial"

        font1 = "System"

        font2 = "Fixedsys"

        fontsnakegame = "system"

        sizesnakegame = 100

        gotosnakegame = -100

        snakegame = "Snake\nGame"

        version = "snake game version: 1.27, Programer: Badr-den alk"

        enterGame = "Press Enter to start game"

        enterMode = f"Choose your preferred game mode\n{" "*15}to start playing."

        classicmode = "1: Classic game"

        boder = "2: Border game"

        obstacles = "3: Obstacles game"

        sizeobs = 27

        tip1 = "Press Options 1 to Classic game, 2 to Border game, 3 to Obstacles game"

        scorec = "Score"

        modeclassic = "Classic game"

        gotocla = 158

        modeboder = "Border game"

        gotobor = 165

        modeobstacles = "Obstacles game"

        gotoobs = 118

        gameover = "Game Over"

        final = "Final Score"

        again = "1: Play again"

        mode_menu = "2: Mode Menu"

        exit_game = "3: Exit Game"

        tip2 = "Press Options 1 to Play again, 2 to Mode Menu, 3 to Exet Game"

except:
    pass

وبعديها صدر اللعبة تاني

فعلا انحلت المشكلة شكراً لك :heart:
@badr_den

وشكرا للجميع

إعجاب واحد (1)

العفو اخي بارك الله فيك :rose:

إعجاب واحد (1)

المصحح شغال في اللاب ؟ اذا نعم
اعطني اسمه من فضلك

إعجاب واحد (1)

هو بجي مع ويندوز بس انت لازم تفاعله من الاعدادات خاصية التصحيح التلقائي

خش على الاعدادات

ويعديها ادخل على devises

وبعدها ادخل على خانة typing

وحدد على الخيارات الثلاثة وفعلهم كما في الصورة

ودا مثال وانا بكتب كلمة dark حط لي عدة خيارات فانا من العجلة لما كنت بكتب للزميل كتبت جزء من الكلمة فحط لي الخيارات دي وحطيت الخيار الخطا :sweat_smile:

إعجاب واحد (1)

جزاك الله خير اسف تعبتك
اخر سوال معلش
هو اشتغل انجلش بس
ما يشتغل للعربي ؟

لست متاكد ولكن لا اظن بان اللغة العربية مدعوم فيها هذه الخاصية انظر في الصورة عندما دخلت على اللغات اللغة العربية فقط بها ميزتان واما الانجليزية فيها كل الميزات والخصائص

إعجاب واحد (1)

غريبة الويندوز هذه
مع ان اضعف اجهزة الاندريد تدعم هذه الميزة

كتر خيرها سويت لك لغة عربية في الونيدوز :joy: :joy: :joy: :joy:

إعجاب واحد (1)

غير كافي مقارنة بالسعر الي كحيته :sneezing_face:

إعجاب واحد (1)

لا اخي واجبي اني اشارك معاكم الحلول بالعكس ان بكون مبسوط جدا لما احل مشكلة الاخوة بارك الله فيهم

بالنسبة لسؤالك نعم هذا الخطا ما بعطل اي شيء بالكود هذا الخطا فقط يظهر لك الخطا التي حدث عندما قمت باقفال اللعبة بشكل مفاجئ لان الاكواد لم تكمل عملها لذلك تظهر النافذة بكتابة اسماء الاكواد التي لم يتم اكمال عملها اثناء اقفالك للعبة بشكل مفاجئ

إعجاب واحد (1)