ماشین حساب ساده با tkinter-python

ماشین حساب ساده با tkinter-python

from tkinter import *
import math

def calculate():
    try:
        num1 = float(enter1.get())
        num2 = float(enter2.get())
        result = num1 * num2
        label3.config(text=str(result))
    except ValueError:
        label3.config(text='Enter numeric values!')
def calculate2():
    try:
        num1 = float(enter1.get())
        num2 = float(enter2.get())
        result = num1 / num2
        label3.config(text=str(result))
    except ValueError:
        label3.config(text='Enter numeric values!')
def calculate3():
    try:
        num1 = float(enter1.get())
        num2 = float(enter2.get())
        result = num1 + num2
        label3.config(text=str(result))
    except ValueError:
        label3.config(text='Enter numeric values!')
def calculate4():
    try:
        num1 = float(enter1.get())
        num2 = float(enter2.get())
        result = num1 - num2
        label3.config(text=str(result))
    except ValueError:
        label3.config(text='Enter numeric values!',fg="white")
def calculate5():
    try:
        num1 = float(enter1.get())
        result = num1**2
        label3.config(text=str(result))
    except ValueError:
        label3.config(text='Enter numeric values!',fg="white")
def calculate6():
    try:
        num1 = float(enter1.get())
        result = math.sqrt(num1)
        label3.config(text=str(result))
    except ValueError:
        label3.config(text='Enter numeric values!',fg="white")
root = Tk()
root.configure(background='black')
label1 = Label(root, text='عدد اول',bg="black", fg="white")
label1.grid(row=0, column=0,columnspan=2)
enter1 = Entry(root, bg='white')
enter1.grid(row=1, column=0,columnspan=2)
label2 = Label(root, text='عدد دوم',bg="black", fg="white")
label2.grid(row=2, column=0,columnspan=2)
enter2 = Entry(root, bg='white')
enter2.grid(row=3, column=0, columnspan=2)
btn1 = Button(root, text='ضرب', command=calculate,bg="black",activebackground="green", fg="white")
btn1.grid(row=4, column=0)
btn2 = Button(root, text='تقسيم', command=calculate2,bg="black",activebackground="orange", fg="white")
btn2.grid(row=5, column=0)
btn3 = Button(root, text='جمع', command=calculate3,bg="black",activebackground="purple", fg="white")
btn3.grid(row=5, column=1)
btn4 = Button(root, text='تفريق', command=calculate4,bg="black",activebackground="red", fg="white")
btn4.grid(row=4, column=1)
btn5 = Button(root, text='توان ۲ عدد اول', command=calculate5,bg="black",activebackground="cyan", fg="white")
btn5.grid(row=6, column=0, columnspan=2)
btn6 = Button(root, text='ريشه عدد اول', command=calculate6,bg="black",activebackground="yellow", fg="white")
btn6.grid(row=7, column=0, columnspan=2,)
label3 = Label(root, bg="black", fg="red")
label3.grid(row=8, column=0, columnspan=2)
enter1.focus()
enter1.bind('', func=lambda e:enter2.focus_set())
root.mainloop()

re

آموزش پایتون-توابع

تابع یکی از مهمترین مفهومات در ریاضیات است. تابع ساده زیر را در نظر بگیرید:

y=x+1

function(x)=x+1

https://www.mathsisfun.com/sets/function.html

https://www.mathsisfun.com/sets/function.html

x به عنوان ورودی (پارامتر)  و y به عنوان خروجی در نظر گرفته میشود.

تابع در برنامه نویسی هم بر گرفته ازهمین مفهوم است. در واقع ما وقتی یک برنامه چند خطی ساده مینویسیم متوجه اهمیت تابع نمیشویم ولی وقتی تعداد خطوط زیاد شد،  همچنین تکرار برخی خطوط بالا رفت، این کدهای تکراری را با عنوان یک تابع با نام خاص میسازیم. و هر کجای برنامه و به هر تعداد که خواستیم استفاده میکنیم، همچنین به برنامه نویسان اجازه اشتراک گذاشتن کد ها را می دهد. سپس متوجه اهمیت آن میشویم. 

توابع تحت نام های مختلف در زبان های برنامه نویسی شناخته می شوند، برای مثال : زیرمجموعه ها(subroutines)، روال ها(routines)، روش ها(procedures)، روش ها(methods) یا زیر برنامه ها(subprograms).

تابع در پایتون با با کلمه کلیدی def تعریف و بعد فراخوانی میشود. تابع از سه بخش تشکیل میشود:

نام، پارامتر، بدنه:

 

 

>>> def add(x,y):
	return x+y
>>> add(2,3)
۵
>>>

تابعی برای جمع دو عدد تعریف میکنیم:

در خط اول توسط def نامی برای تابع انتخاب و تعریف شده است. سپس دو پارامتر به عنوان ورود ی تعریف میکنیم . : را میگذاریم و اینتر را میزنیم. سپس تابع را توسط نام آن  و انتخاب دو آرگومان فراخوانی میکنیم. اینتر را زده و نتیجه را مشاهده میکنیم.

کاربرد تابع در tkinter

وقتی کد زیر اجرا میشود پنجره ای حاوی باتن را مشاهده میکنیم که قراره با کلیک روی آن رویدای که نمایش پیام است را ببینیم و این رویداد توسط فراخوانی تابع انجام میگیرد.

 

import tkinter.messagebox
from tkinter import *
top = Tk()
def helloCallBack():
   messagebox.showinfo( "Hello Python", "Hello World")
B = Button(top, text ="Hello", command = helloCallBack,bg='red', fg='white')
B.pack()
top.mainloop()

45

جمع دو عدد با ماژول tkinter

 

import tkinter.messagebox
import sys
from tkinter import *
top = Tk()
top.configure( bg = 'yellow' )
def sum():
    arg1= a.get()
    arg2 = b.get()
    t=arg1+arg2
    messagebox.showinfo("مجموع ۲ عدد",t )

a=IntVar()
b=IntVar()
Label(top, text="عدد اول",bg='yellow').grid(row=0)
Label(top, text="عدد دوم ",bg='yellow').grid(row=1)
e1 = Entry(top,textvariable = a).grid(row=0, column=1)
e2 = Entry(top,textvariable = b).grid(row=1, column=1)

B = Button(top, text ="نتيجه", command = sum,bg='red', fg='white').grid(row=2, column=1)

top.mainloop()

jam

Tkinter_Variable Classes در پایتون

نحوه استفاده از  کلاس متغیرها(Variable Classes)

انواع در tkinter کمی متفاوت از انواع در برنامه نویسی پایتون است .StringVar () یکی از آن انواع در tkinter است.

با استفاده از این انواع ما یاد می گیریم چگونه داده ها را از رابط گرافیکی tkinter  گرفته و در متغیرها ذخیره کنیم نا از آن داده ها استفاده کنیم.

در جدول زیر برخی از انواع  موجود در tkinter مشاهده میکنید:

 

 

7ture

 

بررسی با یک مثال :

وارد محیط شل پایتون شوید و برای ایجاد یک شی یا نمونه از کلاس StringVar   عبارت زیر را تایپ کنید:

>>>x=StringVar()
Traceback (most recent call last):
File "<pyshell#29>", line 1, in 
x=StringVar()
NameError: name 'StringVar' is not defined

با مشاهده این ارر متوجه میشویم برای استفاده از این کلاس باید ماژول tkinter را فراخوانی کنیم:

>>> from tkinter import*
>>> x=StringVar()
Traceback (most recent call last):
File "<pyshell#31>", line 1, in 
x=StringVar()
AttributeError: 'NoneType' object has no attribute '_root'

ارر بعدی مربو ط به این است که ما باید قبل از هر دستور دیگری بعد ازfrom tkinter import*، یک نمونه از کلاس Tk  درست میکردیم. یه جورایی میشه گفت سازنده کلاس را فرخوانی کردیم. مثل فرخوانی تابع.

الان دیگه بستر برای ایجاد یه نمونه از کلاس StringVar  مهیا شده است:

 

>>> root=Tk()
>>> x=StringVar()
>>> x.set("Sufra")
>>> x.get()
'Sufra'
>>> print(x)
PY_VAR0
>>> y=x.get()
>>> print(y)
Sufra
>>> y.get()
Traceback (most recent call last):
 File "<pyshell#48>", line 1, in <module>
 y.get()
AttributeError: 'str' object has no attribute 'get'
>>> print(x.get())

>>>
>>> x.get()
''
>>> print(x)
PY_VAR1

متد GET & SET

خیلی مهمه در هنگام نوشتن StringVar  به حروف بزرگ و کوچک توجه کنید چون با ارر مواجه میشوید. حالا برای مقدار دهی به x، از متد set استفاده میکنیم. توسط متد get  رشته ای را که در x ذخیره شده مشاهده میکنیم. سپس این مقدار را در متغیر دیگری ذخیره و توسط print نمایش میدهیم.. برای دیدن مقادیر پیش فرض نمیتونیم مستقیم متغیر را با PRINT چاپ کنیم. چون فقط یک متغیری را میبینیم که برای هر نمونه ایجاد شده در حال افزاش میباشد ولی مقدار پیش فرض را نمایش
نمیدهد. 

مقادیر پیش فرض

>>> print(StringVar ())
PY_VAR3
>>> g=StringVar ()
>>> print(g)
PY_VAR4
>>> print(g.get ())

>>>
>>> h=IntVar ()
>>> print(h)
PY_VAR7
>>> print(h.get())
۰
>>> j=DoubleVar ()
>>> print(j.get())
۰٫۰
>>> k=BooleanVar ()
>>> print(k.get())
False
>>>

http://sufra.ir/2017/10/09/tkinter_variable-classes/

http://sufra.ir/2017/10/09/tkinter_variable-classes/

یک مثال کاربردی 

 

from tkinter import *
top = Tk()
label = Label(top, text='Hello World!') label.pack()
mainloop()
http://sufra.ir/2017/10/09/tkinter_variable-classes/

http://sufra.ir/2017/10/09/tkinter_variable-classes/

from tkinter import *
top =Tk()
label = Label(top, text='Hello World!')
label.pack()
label.config(text="Hello Sufra!")
mainloop()
http://sufra.ir/2017/10/09/tkinter_variable-classes/

http://sufra.ir/2017/10/09/tkinter_variable-classes/

from tkinter import *
root = Tk()
inp = StringVar()
inp.set("New Text!")
label =Label(root, textvariable = inp).pack()
mainloop()
http://sufra.ir/2017/10/09/tkinter_variable-classes/

http://sufra.ir/2017/10/09/tkinter_variable-classes/

در شل پایتون وضوح تغییر در مقدار متغیر بیشتر است.

الان ما بدون استفاده از کلاسهای متغیر مقداری را به برچسب نسبت دادیم و خروجی آن را مشاهده کردیم.

l4

با استفاده از کلاس متغیر رشته یک نمونه ساخته و در متغیر inp قرار دادیم. سپس با استفاده از متد set آن را مقدار دهی کردیم،و در textvariable =inp برچسب قرار دادیم.

l5

ما یه نمونه ی دیگر ساخته و مقدار دهی کردیم

l6

مقادیری که در این شی ها ذخیره کرده بودیم را عوض کردیم همانطور که مشاهده میکنید فورا مقدار آنها عوض شد و قبلی ازمیان رفت.

Tkinter چیست؟

معرفی (tkinter(Tk interface

 

سلام

ما آموزش پایتون را تا if پیش بردیم. مسئله ای که هست من خودم علاقمندم هر دستوری را با یک مثال شهودی پیش ببرم ولی خوب برای این کار باید تقریبا مقدمات پایتون را بلد باشید. با این حال من تصمیم گرفتم از  tkinter  که کتابخانه  واسط کاربر گرافیکی در پایتون هست استفاده کنم تا ضمن یادگیری دستورات پایه با نوشتن برنامه های تحت ویندوز هم آشنا بشیم.

یک فایل جدید باز میکنیم  و کد زیر را نوشته و اجرا میگیریم:

import tkinter
tkinter._test()

همانطور که در تصویر زیر مشاهده میکنید پنجره دارای چند برچسب و  دکمه است که یک سری اطلاعات مانند ورژن ماژول و.. میدهند  و کار خاصی انجام نمیدهند.

2

پنجره اصلی(Tk())

برای ساخت برنامه ای مطابق با نیازمندیهای خودمون  در ابتدابا کد زیر یک پنجره درست میکنیم :

from tkinter import*
root=Tk()

یا

import tkinter
root=tkinter.Tk()

 

در هر دو مورد ما یک خروجی خواهیم داشت با این تفاوت که با from tkinter import* ، ما اجازه داریم از محتویات ماژول بدون نوشتن نام،  استفاده کنیم.

در جلسات قبلی برای تعریف متغیر یک اسم به آن نسبت و مقداری را در ان قرار میدادیم x=1. در اینجا من متغیری به نام x از جنس اینتیجر دارم.

اینجا ()root=Tk  متغیری از جنس کلاس پنجره داریم. در واقع ما قسمتی از حافظه را با این کار اشغال میکنیم. نام تمام متغیرهای استفاده شده اختیاری است.

 

1

 

Widgets

Widget یا چیز،  اشیا گرافیکی هستند که میتوانند به پنجره برنامه اضافه شوند. برخی از Widgets  مهم  را بعد از معرفی در برنامه خود به کار میبریم:

Labels

از برچسب ها برای نمایش متن و عکس استفاده میکنیم:

w = Label(root, text=“Hello, sufra!”)
w.pack()

همانطور که در کد بالا مشاهده کردید برای نمایش یک متن ما باید  یک کلاس جدیدی از جنس لیبل ایجاد و در متغیر w قرار دادیم . این کلاس دارای دو آرگومان هست که اولی پنجره ای است که قراره روی آن نمایش داده شود. دومی متغیری از جنس رشته که قرار است متنی را نمایش دهد. البته آرگومانهای دیگری مثل رنگ متن و پس زمینه و… هم میگیرد.

برچسب ها مانند html  فقط به درد نمایش اطلاعات میخورند و کاربر نمیتواند با برنامه تعاملی داشته باشد. 

تا اینجا ما برچسب خودمون را ساختیم برای نمایش اون روی پنجره از متد pack استفاده میکنیم. از اونجایی که ماژول tkinter، کراس پلتفرم است، پنجره اندازه برچسب میشود. 

 

Ca 8 با geometry اندازه پنجره را به دلخواه تغییر میدهیم.

 

پایتون

آموزش پایتون-دستور شرطی IF

در این قسمت به دستورات شرطی میپردازیم:

9if

 

https://www.tutorialspoint.com/python/python_decision_making.htm

به عنوان نمونه میخواهیم ببینیم عدد وارد شده کمتر از ۱۰۰ هست یا نه :

در پایتون بر خلاف c,c++,c#,java,… خبری از{} برای قرار دادن دستورات داخل آن نیست و برای این کار از تب یعنی ۴ تا space استفاده میشه.  با این تب به مفسر میگیم این خط کد مربوط به دستور IF است.

x=85

if x < 100:

    print( “عدد وارد شده کمتر از ۱۰۰ است. “)

در این قطعه کد ما فقط شرط درستی را بررسی میکنیم

58

else

یک عدد از کاربر دریافت میکنیم حالا اگر عدد وارد شده بیشتر از ۱۰۰ بودو شرط ما نادرست بود، از else  استفاده میکنیم:

x=int(input(“لطفا يک عدد صحيح وارد کنيد:”))
if x < 100:
print( “عدد وارد شده کمتر از ۱۰۰ است. “)
else:
print(“عدد وارد شده بزرگتر از ۱۰۰ است.”)

8

 

Symbols for Conditions

10

elif

 elif همان خلاصه شده else if  در زبانهای دیگر مثل جاوا، سی شارپ، سی و… میباشد. در واقع اگر بخواهیم در صورت برقرار نبودن شرطی شرطهای بعدی را هم بررسی کنیم:

x=int(input(“لطفا يک عدد صحيح وارد کنيد:”))
if x < 20:

    print( “عدد وارد شده کمتر از ۱۰۰ است. “)

elif x == 100:

     print( “برابر ۱۰۰ است .”)
elif x > 100 and x<150:

     print( “عدد وارد شده بيشتر از ۱۰۰ و کمتر از ۱۵۰ است. “)
elif x > 100 or x<50:

    print( “عدد وارد شده يا بيتر از ۱۰۰ يا کمتر ا ۱۵۰ است.”)

else:
print(“عدد وارد شده در اين محدوده نيست”)

IF های تو در تو

در صورت درست بودن یک شرط، شرطی دیگر را بررسی کنیم:

var = 100
if var < 200:
 print ("Expression value is less than 200")
 if var == 150:
 print ("Which is 150")
 elif var == 100:
 print ("Which is 100")
 elif var == 50:
 print ("Which is 50")
elif var < 50:
 print ("Expression value is less than 50")
else:
 print ("Could not find true expression")

print ("Good bye!")

Expression value is less than 200
Which is 100
Good bye!

رسم yinyang با turtle

from turtle import *

def yin(radius, color1, color2):
width(3)
color(“black”, color1)
begin_fill()
circle(radius/2., 180)
circle(radius, 180)
left(180)
circle(-radius/2., 180)
end_fill()
left(90)
up()
forward(radius*0.35)
right(90)
down()
color(color1, color2)
begin_fill()
circle(radius*0.15)
end_fill()
left(90)
up()
backward(radius*0.35)
down()
left(90)

def main():
reset()
yin(200, “black”, “white”)
yin(200, “white”, “black”)
ht()
return “Done!”

if __name__ == ‘__main__’:
main()
mainloop()

9

گذاشتن و برداشتن قلم turtle

قلم لاک پشتی با استفاده از تابع down  روی بوم نقاشی گذاشته و توسط تابع  up  برداشته میشود. 

import turtle
t = turtle.Pen()
t.backward(100)
t.up()
t.right(90)
t.forward(20)
t.left(90)
t.down()
t.forward(100)

 

 

7

   import turtle
t = turtle.Pen()
t.forward(50)
t.left(45)
t.up()
t.forward(50)
t.down()
t.left(45)
t.forward(50)
t.left(45)
t.up()
t.forward(50)
t.down()
t.left(45)
t.forward(50)
t.left(45)
t.up()
t.forward(50)
t.down()
t.left(45)
t.forward(50)
t.left(45)
t.up()
t.forward(50)
t.down()
t.left(45)

8

برگشت به عقب و راستگرد با turtle

import turtle
t = turtle.Pen()
t.forward(30)#حرکت به سمت جلو
t.left(90)#تغییر جهت به چپ
t.forward(30)
t.right(90)#تغییر جهت به راست 
t.forward(30)
t.left(90)
t.forward(30)
t.right(90)
t.forward(30)
t.left(90)
t.forward(30)
t.right(90)

t.backward(200)#حرکت به عقب

t.right(90)
t.forward(30)
t.left(90)
t.forward(30)
t.right(90)
t.forward(30)
t.left(90)
t.forward(30)
t.right(90)
t.forward(30)
t.left(90)
t.forward(30)
t.right(90)
t.forward(30)
t.left(90)
t.forward(30)
t.left(90)
t.forward(30)

6