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

السؤال

نشر

السلام عليكم ورحمة الله وبركاته

أقوم بعمل برنامج لتحويل التقويم الياباني، علي كود آلة حاسبة مبسط مع دعم ال tooltip

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

 

مرفق أدناه الكود التالي لا أعلم ما الخطأ به.. المشكلة الوحيدة هي أن زرا  "الجمع" و "يساوي" لا يقومان بمسح الرقم الموجود.. فاذا ضغطت رقم 1 ثم ضغطت زر الجمع ثم رقم 2 يظهر الرقمان 1 و2 متجاوران.. واذا ضغطت زر يساوي لا يظهر الناتج بالطبع بسبب المشكلة السابقة (وربما لمشكلة اضافية أيضاً).

 

from tkinter import *
import tkinter as tk
from tkinter import messagebox
from tkinter import Entry,Tk#, Canvas
from tkinter.tix import *
from tkinter.tix import Balloon
from tkinter.tix import tixCommand

class Calculator:
    def __init__(self, master):
        self.master = master

    def button_click(entry, value):
        entry_field.insert(tk.END, value)

    def clear(entry):
        entry_field.delete(0, tk.END)

    def backspace(entry):
        current_text = entry.get()
        entry_field.delete(len(current_text) - 1)

    def buttonadd():
        number_one = entry_field.get()
        global number1
        global calculator
        calculator = "addition"
        number1 = int(number_one)
        entry_field.delete(0, END)

    def buttonequal():
        numbertwo = entry_field.get()
        entry_field.delete(0, END)

    def add(self, number_one, numbertwo):
        return number_one + numbertwo

if Calculator == "addition":
        entry_field.insert(0, number1 + int(numbertwo))

def button_click(root, text):
    if text == "=":
        try:
            result = str(eval(entry_field.get()))
            entry_field.delete(0, tk.END)
            entry_field.insert(0, result)
        except:
            entry_field.delete(0, tk.END)
            entry_field.insert(0, "Error")
    elif text == "CLR":
        entry_field.delete(0, tk.END)
    elif text == "BCKSP":
        entry_field.delete(len(entry_field.get()) - 1, tk.END)
    else:
        entry_field.insert(tk.END, text)
        
# Create the main application window
root = Tk()
root.geometry("1000x1000")
root.title("برنامج تحويل التقويم الياباني")
root.configure(background="light green")
root.columnconfigure((0, 1, 2, 3, 4), weight=1)

# Create a Balloon widget for tooltips
tool_tip = Balloon(root)

# Create the label
label_1 = tk.Label(root, text="近現代", bg="green", fg="white", font=('Mincho', 12))
label_1.grid(row=0, column=0, columnspan=4, padx=10, pady=10)

# Create the entry field
entry_field = tk.Entry(root, width=30, justify='right', font=('Arial', 16))
entry_field.grid(row=1, column=0, columnspan=4, padx=10, pady=10)

# Create the buttons
button_1 = tk.Button(root, text="明治", bg="green", fg="white", font="Mincho, 12", command=lambda: button_click(root, "1868"))
button_1.grid(row=2, column=0, columnspan=4, padx=10, pady=10)

button_2 = tk.Button(root, text="大正", bg="green", fg="white", font="Mincho, 12", command=lambda: button_click(root, "1912"))
button_2.grid(row=3, column=0, columnspan=4, padx=10, pady=10)

button_3 = tk.Button(root, text="昭和", bg="green", fg="white", font="Mincho, 12", command=lambda: button_click(root, "1926"))
button_3.grid(row=4, column=0, columnspan=4, padx=10, pady=10)

button_4 = tk.Button(root, text="平成", bg="green", fg="white", font="Mincho, 12", command=lambda: button_click(root, "1989"))
button_4.grid(row=5, column=0, columnspan=4, padx=10, pady=10)

button_5 = tk.Button(root, text="令和", bg="green", fg="white", font="Mincho, 12", command=lambda: button_click(root, "2019"))
button_5.grid(row=6, column=0, columnspan=4, padx=10, pady=10)

button_6 = tk.Button(root, text="CLR", bg="blue", fg="white", font="Arial, 12", command=lambda: entry_field.delete(0, tk.END))
button_6.grid(row=1, column=4, columnspan=4, padx=5, pady=5)

button_7 = tk.Button(root, text="BCKSP←", bg="blue", fg="white", font="Arial, 12", command=lambda: entry_field.delete(len(entry_field.get()) - 1, tk.END))
button_7.grid(row=1, column=5, columnspan=4, padx=5, pady=5)

button_8 = tk.Button(root, text="+", bg="blue", fg="white", font="Arial, 12", command=lambda: buttonadd())
button_8.grid(row=1, column=2, columnspan=4, padx=10, pady=10)

button_9 = tk.Button(root, text="=", bg="blue", fg="white", font="Arial, 12", command= lambda: buttonequal())
button_9.grid(row=1, column=3, columnspan=4, padx=10, pady=10)

button_10 = tk.Button(root, text="1", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "1"))
button_10.grid(row=4, column=1, columnspan=4, padx=5, pady=5)

button_11 = tk.Button(root, text="2", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "2"))
button_11.grid(row=4, column=2, columnspan=4, padx=5, pady=5)

button_12 = tk.Button(root, text="3", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "3"))
button_12.grid(row=4, column=3, columnspan=4, padx=5, pady=5)

button_13 = tk.Button(root, text="4", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "4"))
button_13.grid(row=4, column=4, columnspan=4, padx=5, pady=5)

button_14 = tk.Button(root, text="5", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "5"))
button_14.grid(row=4, column=5, columnspan=4, padx=5, pady=5)

button_15 = tk.Button(root, text="6", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "6"))
button_15.grid(row=5, column=1, columnspan=4, padx=5, pady=5)

button_16 = tk.Button(root, text="7", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "7"))
button_16.grid(row=5, column=2, columnspan=4, padx=5, pady=5)

button_17 = tk.Button(root, text="8", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "8"))
button_17.grid(row=5, column=3, columnspan=4, padx=5, pady=5)

button_18 = tk.Button(root, text="9", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "9"))
button_18.grid(row=5, column=4, columnspan=4, padx=5, pady=5)

button_19 = tk.Button(root, text="0", bg="cyan", fg="white", font="Arial, 12", command=lambda: button_click(root, "0"))
button_19.grid(row=5, column=5, columnspan=4, padx=5, pady=5)

# Assign tooltips to the widgets
tool_tip.bind_widget(button_1, balloonmsg="أقصي رقم للادخال هو 44")
tool_tip.bind_widget(button_2, balloonmsg="أقصي رقم للادخال هو 14")
tool_tip.bind_widget(button_3, balloonmsg="أقصي رقم للادخال هو 63")
tool_tip.bind_widget(button_4, balloonmsg="أقصي رقم للادخال هو 29")
tool_tip.bind_widget(button_5, balloonmsg="لا يوجد رقم أقصي حتي تاريخه")

# Run the main application loop
root.mainloop()

 

 

ملحوظة (1) :تمت تجربة الأكواد التالية أيضاً.. لكن بلا جدوي.. لا يتم مسح الرقم عند ادراج الرقم الجديد أو عند ضغط علامة الجمع.

button_8 = tk.Button(root, text="+", bg="blue", fg="white", font="Arial, 12", command=lambda: entry.insert(tk.END, '+'))
button_8.grid(row=1, column=2, columnspan=4, padx=10, pady=10)

button_9 = tk.Button(root, text="=", bg="blue", fg="white", font="Arial, 12", command= lambda: button_click(root, "="))
button_9.grid(row=1, column=3, columnspan=4, padx=10, pady=10)

ملحوظة (2) أعلم أن أوامر الاستيراد import والتعريف def ربما تكون أكثر من اللازم، لكني اضطررت لوضعها كلها لحل مشكلة not defined (بما فى ذلك علامة النجمة لا تقوم باستيراد الكل وأضطر لإدخال الأمر المحدد فى السطر التالي) // لا مشكلة هنا.. المشكلة الوحيدة هي ما ذكرته أعلاه قبل الكود الرئيسي. 

 

مع جزيل الشكر مقدماً..

Recommended Posts

  • 1
نشر

و عليكم السلام
كان يوجد مشكلة فى زر الجمع و زر المساوة يجب ان تضع فى الbutton_click احتمال لل + و استخدامها:

def button_click(root, text):
    if text == "=":
        try:
            result = str(eval(entry_field.get()))
            entry_field.delete(0, tk.END)
            entry_field.insert(0, result)
        except:
            entry_field.delete(0, tk.END)
            entry_field.insert(0, "Error")
    elif text == "+": # add this condition
        entry_field.insert(tk.END, "+")
    elif text == "CLR":
        entry_field.delete(0, tk.END)
    elif text == "BCKSP":
        entry_field.delete(len(entry_field.get()) - 1, tk.END)
    else:
        entry_field.insert(tk.END, text)


و لست بحاجة الى هذا الكود فهو غير مستخدم:
 

if Calculator == "addition":
        entry_field.insert(0, number1 + int(numbertwo))


و يجب  التعديل فى كود ال button 8, 9 و ذلك باستخدام button_click بدلا من button_add and button_equal:

button_8 = tk.Button(root, text="+", bg="blue", fg="white", font="Arial, 12", command=lambda: buttonadd())
button_8.grid(row=1, column=2, columnspan=4, padx=10, pady=10)

button_9 = tk.Button(root, text="=", bg="blue", fg="white", font="Arial, 12", command= lambda: buttonequal())
button_9.grid(row=1, column=3, columnspan=4, padx=10, pady=10)



و يمكنك ايضا الاستغناء عن جميع ال imports و جعلها بهذة الطريقة:
 

from tkinter import *
import tkinter as tk
from tkinter.tix import *

و هذا كل الكود بعد التعديلات. ولاحظ أن الكود مختلف فى التنسيق و ذلك لستخدامى black formatter يمكن البحث عنه و هو ينسق كود البايثون بشكل افضل.

from tkinter import *
import tkinter as tk
from tkinter.tix import *


class Calculator:
    def __init__(self, master):
        self.master = master

    def button_click(entry, value):
        entry_field.insert(tk.END, value)

    def clear(entry):
        entry_field.delete(0, tk.END)

    def backspace(entry):
        current_text = entry.get()
        entry_field.delete(len(current_text) - 1)

    def buttonadd():
        global number1
        global operation
        number1 = int(entry_field.get())
        operation = "addition"
        entry_field.delete(0, END)

    def buttonequal():
        number2 = int(entry_field.get())
        entry_field.delete(0, END)
        if operation == "addition":
            result = number1 + number2
            entry_field.insert(0, result)


def button_click(root, text):
    if text == "=":
        try:
            result = str(eval(entry_field.get()))
            entry_field.delete(0, tk.END)
            entry_field.insert(0, result)
        except:
            entry_field.delete(0, tk.END)
            entry_field.insert(0, "Error")
    elif text == "+":
        entry_field.insert(tk.END, "+")
    elif text == "CLR":
        entry_field.delete(0, tk.END)
    elif text == "BCKSP":
        entry_field.delete(len(entry_field.get()) - 1, tk.END)
    else:
        entry_field.insert(tk.END, text)


# إنشاء نافذة التطبيق الرئيسية
root = Tk()
root.geometry("1000x1000")
root.title("برنامج تحويل التقويم الياباني")
root.configure(background="light green")
root.columnconfigure((0, 1, 2, 3, 4), weight=1)

# إنشاء أداة بالون للتلميحات
tool_tip = Balloon(root)

# إنشاء تسميات الإدخال
label_1 = tk.Label(root, text="近現代", bg="green", fg="white", font=("Mincho", 12))
label_1.grid(row=0, column=0, columnspan=4, padx=10, pady=10)

# إنشاء حقل الإدخال
entry_field = tk.Entry(root, width=30, justify="right", font=("Arial", 16))
entry_field.grid(row=1, column=0, columnspan=4, padx=10, pady=10)

# إنشاء الأزرار
button_1 = tk.Button(
    root,
    text="明治",
    bg="green",
    fg="white",
    font="Mincho, 12",
    command=lambda: button_click(root, "1868"),
)
button_1.grid(row=2, column=0, columnspan=4, padx=10, pady=10)

button_2 = tk.Button(
    root,
    text="大正",
    bg="green",
    fg="white",
    font="Mincho, 12",
    command=lambda: button_click(root, "1912"),
)
button_2.grid(row=3, column=0, columnspan=4, padx=10, pady=10)

button_3 = tk.Button(
    root,
    text="昭和",
    bg="green",
    fg="white",
    font="Mincho, 12",
    command=lambda: button_click(root, "1926"),
)
button_3.grid(row=4, column=0, columnspan=4, padx=10, pady=10)

button_4 = tk.Button(
    root,
    text="平成",
    bg="green",
    fg="white",
    font="Mincho, 12",
    command=lambda: button_click(root, "1989"),
)
button_4.grid(row=5, column=0, columnspan=4, padx=10, pady=10)

button_5 = tk.Button(
    root,
    text="令和",
    bg="green",
    fg="white",
    font="Mincho, 12",
    command=lambda: button_click(root, "2019"),
)
button_5.grid(row=6, column=0, columnspan=4, padx=10, pady=10)

button_6 = tk.Button(
    root,
    text="CLR",
    bg="blue",
    fg="white",
    font="Arial, 12",
    command=lambda: entry_field.delete(0, tk.END),
)
button_6.grid(row=1, column=4, columnspan=4, padx=5, pady=5)

button_7 = tk.Button(
    root,
    text="BCKSP←",
    bg="blue",
    fg="white",
    font="Arial, 12",
    command=lambda: entry_field.delete(len(entry_field.get()) - 1, tk.END),
)
button_7.grid(row=1, column=5, columnspan=4, padx=5, pady=5)

button_8 = tk.Button(
    root,
    text="+",
    bg="blue",
    fg="white",
    font="Arial, 12",
    command=lambda: button_click(root, "+"),
)
button_8.grid(row=1, column=2, columnspan=4, padx=10, pady=10)

button_9 = tk.Button(
    root,
    text="=",
    bg="blue",
    fg="white",
    font="Arial, 12",
    command=lambda: button_click(root, "="),
)
button_9.grid(row=1, column=3, columnspan=4, padx=10, pady=10)

button_10 = tk.Button(
    root,
    text="1",
    bg="cyan",
    fg="white",
    font="Arial, 12",
    command=lambda: button_click(root, "1"),
)
button_10.grid(row=4, column=1, columnspan=4, padx=5, pady=5)

button_11 = tk.Button(
    root,
    text="2",
    bg="cyan",
    fg="white",
    font="Arial, 12",
    command=lambda: button_click(root, "2"),
)
button_11.grid(row=4, column=2, columnspan=4, padx=5, pady=5)

button_12 = tk.Button(
    root,
    text="3",
    bg="cyan",
    fg="white",
    font="Arial, 12",
    command=lambda: button_click(root, "3"),
)
button_12.grid(row=4, column=3, columnspan=4, padx=5, pady=5)

button_13 = tk.Button(
    root,
    text="4",
    bg="cyan",
    fg="white",
    font="Arial, 12",
    command=lambda: button_click(root, "4"),
)
button_13.grid(row=4, column=4, columnspan=4, padx=5, pady=5)

button_14 = tk.Button(
    root,
    text="5",
    bg="cyan",
    fg="white",
    font="Arial, 12",
    command=lambda: button_click(root, "5"),
)
button_14.grid(row=4, column=5, columnspan=4, padx=5, pady=5)

button_15 = tk.Button(
    root,
    text="6",
    bg="cyan",
    fg="white",
    font="Arial, 12",
    command=lambda: button_click(root, "6"),
)
button_15.grid(row=5, column=1, columnspan=4, padx=5, pady=5)

button_16 = tk.Button(
    root,
    text="7",
    bg="cyan",
    fg="white",
    font="Arial, 12",
    command=lambda: button_click(root, "7"),
)
button_16.grid(row=5, column=2, columnspan=4, padx=5, pady=5)

button_17 = tk.Button(
    root,
    text="8",
    bg="cyan",
    fg="white",
    font="Arial, 12",
    command=lambda: button_click(root, "8"),
)
button_17.grid(row=5, column=3, columnspan=4, padx=5, pady=5)

button_18 = tk.Button(
    root,
    text="9",
    bg="cyan",
    fg="white",
    font="Arial, 12",
    command=lambda: button_click(root, "9"),
)
button_18.grid(row=5, column=4, columnspan=4, padx=5, pady=5)

button_19 = tk.Button(
    root,
    text="0",
    bg="cyan",
    fg="white",
    font="Arial, 12",
    command=lambda: button_click(root, "0"),
)
button_19.grid(row=5, column=5, columnspan=4, padx=5, pady=5)

# تعيين التلميحات للأزرار
tool_tip.bind_widget(button_1, balloonmsg="أقصي رقم للادخال هو 44")
tool_tip.bind_widget(button_2, balloonmsg="أقصي رقم للادخال هو 14")
tool_tip.bind_widget(button_3, balloonmsg="أقصي رقم للادخال هو 63")
tool_tip.bind_widget(button_4, balloonmsg="أقصي رقم للادخال هو 29")
tool_tip.bind_widget(button_5, balloonmsg="لا يوجد رقم أقصي حتي تاريخه")

# تشغيل حلقة التطبيق الرئيسية
root.mainloop()

بالتوفيق.

  • 0
نشر

شكراً جزيلاً لكم،،

لا أعرف كيف أشكركم.

سأخصص شكر خاص لكم داخل الكود وعلى الموقع عندما أقوم بنشر البرنامج بعد الانتهاء من منه (ادراج بقية السنوات مثلاً)_ وهو مجاني بالمناسبة.

 

حالياً أستخدم PyCharm Community Edition فى البرمجة والتنسيق، أو ++Notepad فى التنسيق فقط.

وجدت Black Formatter علي Github وسأقوم بتحميله واستخدامه باذن الله تعالي.

مع جزيل الشكر لكم مرة أخري.

والسلام عليكم ورحمة الله وبركاته..

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...