سلحفاة بايثون الرسم الحر باستخدام الفأرة كود بايثون جاهز

output
canvas
info

سلحفاة بايثون الرسم الحر باستخدام الفأرة كود بايثون جاهز

سلحفاة بايثون الرسم الحر باستخدام الفأرة في هذا الكود سوف نستخدم مكتبة turtle للرسم الحر وحفظ احداثيات الرسم في ملف للاستخدام لاحقاً او للتعديل.

سوف اشرح الدوال الرئيسية لتتمكن من التعديل علية

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

screen.onmouseover(tt)
screen.onmovemode('false')
screen.onclick(startd)
screen.listen()
turtle.done()

دالة onmouseover ليست موجودة في مكتبة turtle الاصلية ولكنها موجوده في نظامنا وهي لتفعيل وضع تتبع حركة الماوس وارجاع الاحداثيات مع كل حركة.

دالة onmovemode ايضاً موجودة في نظامنا فقط قمنا باضافتها لتفعيل وايقاف وضع تتبع احداثيات الفأرة وتاخذ براميتر واحد من النوع النصي ، لبداء ارجاع احداثيات الفأرة تكون القيمة 'true' ولايقاف تتبع الحركة تكون القيمة 'false'.

ودالة onclick هي اساسية في مكتبة turtle وهي لتتبع نقرات الفأرة ودالة listen اساسية ايضاً وهي لبداء الاستماع او تتبع الحركة والازرار.

 

بعد ان قمنا باعداد تتبع الاحداث كلما تحرك الماوس داخل منطقة الرسم سوف يتم ارسال الاحداثيات x, y الي الدالة StartToEnd وهي مسؤلة عن بداء الرسم مع حركة الماوس تبعاً للاحداثيات الواردة من دالة onmouseover.

def StartToEnd(x, y):
    global part
    if drawnow:
        part.append([x,y])
        turtle.goto(x, y)

داخل الدالة StartToEnd قمت بالتصريح عن المتغير العام part لتخزين احداثيات المسار ثم التحقق اذا كان متح لنا الرسم ام لا من خلال متغير drawnow اذا كانت قيمة المتغير True تبداء السلحفاة بملاحقة الماوس ورسم خط ، وتخزين الاحداثيات في القائمة part.

سوف نتحكم في بداء ,وتشغيل الدالة والرسم من خلال نقرات الفأرة عند النقر يبداء الرسم وعند النقر مرة اخري ينتهي الرسم وهذه هي وظيفة الدالة start:

def start(x, y):
    global drawnow
    global part
    if candraw:
        if drawnow:
            screen.onmovemode('false')
            drawnow = False
            turtle.penup()
            savepart(part)
            #drawpart(part, "green")
            part = []
        else:
            drawnow = True
            screen.onmovemode('true')
            turtle.goto(x,y)
            turtle.pendown()

في بداية الدالة صرحت عن المتغيرين العالميين drawnow , part حتي نستطيع تعديل قيمتهم من داخل الدالة. دالة الشرط الاولي تستخدم فقط مع السطر المعلق # يمكنك ازالة التعليق لتعرف كيف يعمل.

دالة الشرط الثانية اذا كانت قيمة متغير drawnow = True : هذا يعني انها النقرة الثانية ولذلك سوف نقوم بايقاف تتبع حركة الفأرة ثم تعديل قيمة متغير drawnow الي False.

ثم رفع قلم السلحفاة استعداد لنقطة البداية الجديدة ثم ارسال قائمة الاحداثيات part الي الدالة savepart وهي المسؤلة عن حفظ الاجزاء داخل الملف parts.js في صورة نص json ثم تفريق قيمة القائمة part استعداد للاجزاء الجديدة.

اذا كانت قيمة متغير drawnow = False : هذا يعني انها النقرة الاولي للماوس لذلك سوف نجعل قيمة المتغير drawnow = True ، ثم تفعيل وضع تتبع الحركة ثم ارسال السلحفاة الي احداثيات النقرة ثم انزال القلم وسوف تبداء دالة StartToEnd في عملها.

لاحظ انه يجب النقر لتفعيل الرسم والنقر مرة اخري لانهاء الرسم.

 

دالة savepart 

def savepart(part):
    try:
        loadf = json.loads(open('parts.js', 'r').read())
    except:
        loadf = {}
    loadf[len(loadf)+1] = part
    savef = json.dumps(loadf)
    f = open('parts.js', 'w')
    f.write(savef)
    f.close()

تمتلك الدالة براميتر واحد وهو part وهو من نوع القائمة list [] احدي انواع التسلسل.

في البداية نحاول فتح الملف وتحويلة الي object كائن بايثون وفي حالة حدوث خطأ يتم انشاء كائن فارغ {}.

بعد ذلك نقوم باضافة القائمة الجديدة الي الكائن مع رقم فهرس اكبر من اخر رقم فهرس برقم واحد : loadf[len(loadf)+1] = part .

ثم نقوم بتحويل كائن بايثون الي نص json ثم نفتح الملف للكتابة ونقوم بكتابة نص json بداخلة ثم نغلق الملف.

 

بعد ذلك يمكن استخدام دالة drawfromfile لرسم الاجزاء في اي وقت من الملف parts.js

def drawfromfile():
    screen.bgpic("https://img.freepik.com/free-vector/vector-black-minimal-aesthetic-grid-pattern-background_53876-117155.jpg?w=740&t=st=1670639867~exp=1670640467~hmac=06085cd7558bec8799105db479e31904a4e4a86ba44f034413b5b50d72317511")
    try:
        f = json.loads(open('parts.js', 'r').read())
    except:
        f = {}
    turtle.speed(9999999999999)
    for i in range(1, len(f)+1):
        part = f[str(i)]
        turtle.goto(part[0][0], part[0][1])
        turtle.pendown()
        for y in range(1, len(part), 10):
            turtle.tracer(1)
            turtle.goto(part[y][0], part[y][1])

            turtle.update()
        turtle.penup()
#drawfromfile()

بعد رسم الاجزاء قم بتفعيل السطر الاخير drawfromfile() ثم اعد التشغيل.

 

بواسطة : admin
رابط مباشر https://www.brmgha.com/ide?embd=HvfBTxKEUKp

تضمين في موقع الكتروني

التعليقات

no comments found.
  • من خلال الضغط علي زر {;} في شريط الادوات يمكنك اضافة اكواد بايثون الي التعليق للتجربة اون لاين.
  • برجاء مراعاة قواعد الكتابة، والادب.

اكواد بايثون جاهزة

بحث
رسم بورترية python turtle

رسم بورترية python turtle

كود رسم دائرة بايثون turtle

رسم نجمة خماسية بايثون turtle

Python Turtle Online Shaheed Minar

رسم قلب python turtle

Python Turtle Online Fractal Art Tree Of Life

Python Turtle Online Play Sierpinski's Game

Python Turtle Online draw koch snowflakes by click window

Python Turtle Online Draws a Koch snowflake fractal

Python Turtle Online Draw Sierpinski Square

Python Turtle Online Sierpinski Triangle fractal

Python Turtle Online Nonuniform Fractal Tree Drawer

Python Turtle Online Fractal Tree Drawer

Python Turtle Online Drawing Mona Lisa

Python Turtle Online Ulam Spiral

Python Turtle Online Draw Polygons

Python Turtle Online Draw decorative graphics

Python Turtle Online Draw Tree branches

Python Turtle Online Draw Snakes

اون لاين بايثون, اون لاين كومبايلر, بايثون اون لاين كومبايلر, كومبايلر اون لاين, باثون اون لاين, برنامج بايثون اون لاين, محرر نصوص اون لاين, كومبايلر اونلاين, محرر أكواد بايثون اون لاين, بايثون كومبايلر, بايثون اون لاين, محرر اكواد اون لاين, بايثون اونلاين, محرر بايثون اون لاين, mtplotlib