اذهب إلى المحتوى

السؤال

نشر

أريد تحويل هذا الكود إلى GUI يسمح للمستخدم بإدخال السرعة التي يريدها, ثم يكون هناك 3 أزرار تسمح للمستخدم بأختيار الزمن وهي: 5 و8 و12 ساعة. كيف يمكني فعل هذا؟ الرجاء المساعدة فلقد توصلت للكود التالي وهو يعمل في بايثون فقط بدون واجهه

# Distance Traveled

speed=70

# The distance in 5 hours
print("The distance the car will travel in 5 hours is", speed*5, "miles")
print("The distance the car will travel in 8 hours is", speed*8, "miles")
print("The distance the car will travel in 12 hours is", speed*12, "miles")

 

Recommended Posts

  • 1
نشر

تحويل برنامج بسيط مكون من 5 أسطر مثل هذا سوف يأخذ بعض المجهود الإضافي لإنشاء واجهة رسومية GUI له، حيث يجب أن يتم إستعمال أحد المكتبات الخاصة بالواجهات الرسومية مثل Tkinter (موجودة مسبقًا في Python لذلك لا تحتاج تثبيت أي شيء إضافي)، لذلك يمكن إما جعل البرنامج يتلقى مُدخل من المستخدم من سطر الأوامر مباشرة:
 

# Distance Traveled
speed=int(input("Enter Speed: "))

# The distance in 5 hours
print("The distance the car will travel in 5 hours is", speed*5, "miles")
print("The distance the car will travel in 8 hours is", speed*8, "miles")
print("The distance the car will travel in 12 hours is", speed*12, "miles")

أو يمكن عمل واجهة كاملة من خلال مكتبة Tkinter وستكون الخطوات كالتالي:
في البداية نقوم بعمل نافذة فارغة:

import tkinter as tk
from tkinter import *


class App(tk.Frame):
    def __init__(self, master):
        super().__init__(master)


root = tk.Tk()

# تغير عنوان النافذة
root.title("Calculate Distance")

myapp = App(root)
myapp.mainloop()

بعد ذلك نقوم بإضافة صندوق للإدخال ونص "Enter Speed" وزر لحساب المسافة:
 

class App(tk.Frame):
    def __init__(self, master):
        super().__init__(master)

        # إضافة حاشية إلى النافذة
        self.pack(padx=20, pady=20)

        # كتابة نص بسيط
        self.label = tk.Label(self, text="Enter Speed:")
        self.label.pack(fill=BOTH, expand=True)

        # عمل صندوق لإدخال قيمة السرعة
        self.entrythingy = tk.Entry(self, width=50)
        self.entrythingy.pack(fill=BOTH, expand=True)

        # عمل نص لعرض النتيجة في النهاية
        self.result_label = tk.Label(self, text="")
        self.result_label.pack(fill=BOTH, expand=True)
        
        # عرض ثلاث أزرار لحساب المسافة
        self.calc_btn_5 = tk.Button(
            text="Time: 5", command=lambda:self.calcDistance(time=5))	# التابع calcDistance سنقوم بعملة في الخطوة التالية
        self.calc_btn_5.pack(side=LEFT, expand=True)
        self.calc_btn_8 = tk.Button(
            text="Time: 8", command=lambda:self.calcDistance(time=8))	# التابع calcDistance سنقوم بعملة في الخطوة التالية

        self.calc_btn_8.pack(side=LEFT, expand=True)
        self.calc_btn_12 = tk.Button(
            text="Time: 12", command=lambda:self.calcDistance(time=12))	# التابع calcDistance سنقوم بعملة في الخطوة التالية

        self.calc_btn_12.pack(side=LEFT, expand=True)

الآن نقوم بعمل التابع calcDistance لحساب المسافة وإظهار النتيجة في النافذة:
 

class App(tk.Frame):
    def __init__(self, master):
        super().__init__(master)
        # ...

    def calcDistance(self, time=1):
        # جلب القيمة من صندوق الإدخال
        speed = self.entrythingy.get()
        if not speed:
            return

        # تحويل المدخل إلى رقم
        speed = int(speed)

        # تجهيز النتيجة النهائية
        result = f"The distance the car will travel in { time } hours is { speed * time } miles"

        # عرض النتيحة في النافذة
        self.result_label.config(text=result)

سيكون شكل البرنامج في النهاية كالتالي:
619dd4526cc6c_Screenshot2021-11-24075450.png.b42b47aa9c84f2195291de899772002a.png

هنا الكود بالكامل:

import tkinter as tk
from tkinter import *


class App(tk.Frame):
    def __init__(self, master):
        super().__init__(master)

        # إضافة حاشية إلى النافذة
        self.pack(padx=20, pady=20)

        # كتابة نص بسيط
        self.label = tk.Label(self, text="Enter Speed:")
        self.label.pack(fill=BOTH, expand=True)

        # عمل صندوق لإدخال قيمة السرعة
        self.entrythingy = tk.Entry(self, width=50)
        self.entrythingy.pack(fill=BOTH, expand=True)

        # عمل نص لعرض النتيجة في النهاية
        self.result_label = tk.Label(self, text="")
        self.result_label.pack(fill=BOTH, expand=True)
        
        # عرض ثلاث أزرار لحساب المسافة
        self.calc_btn_5 = tk.Button(
            text="Time: 5", command=lambda:self.calcDistance(time=5))
        self.calc_btn_5.pack(side=LEFT, expand=True)
        self.calc_btn_8 = tk.Button(
            text="Time: 8", command=lambda:self.calcDistance(time=8))
        self.calc_btn_8.pack(side=LEFT, expand=True)
        self.calc_btn_12 = tk.Button(
            text="Time: 12", command=lambda:self.calcDistance(time=12))
        self.calc_btn_12.pack(side=LEFT, expand=True)



    def calcDistance(self, time=1):
        # جلب القيمة من صندوق الإدخال
        speed = self.entrythingy.get()
        if not speed:
            return

        # تحويل المدخل إلى رقم
        speed = int(speed)

        # تجهيز النتيجة النهائية
        result = f"The distance the car will travel in { time } hours is { speed * time } miles"

        # عرض النتيحة في النافذة
        self.result_label.config(text=result)


root = tk.Tk()

# تغير عنوان النافذة
root.title("Calculate Distance")

myapp = App(root)
myapp.mainloop()

 

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...