تولید کننده آموزش و محصولات مبتنی بر برنامه نویسی مدرن

توسعه فریم ورک وب بر پایه سی پلاس پلاس

با سلام خدمت دوستان 

تصمیم گرفتم یک فریم ورک وب بر پایه سی پلاس پلاس توسعه بدم 

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

ادامه مطلب...
۱۴ اسفند ۹۵ ، ۱۰:۵۱ ۰ نظر موافقین ۰ مخالفین ۰
بهنام صباغی

اموزش gui با کتابخانه tkinter این قسمت multiple events

با سلام بهنام صباغی هستم با اموزش gui با کتابخانه tkinter این قسمت multiple events
اگر روی یک لیبل دوتا بایند تعریف کنیم مثلا یکی برای هر کلیکی که از موس بشه و یکی برای ین که فقط کلیک چپ بشه و کد رو اجرا کنیم به نظرتون چی میشه ؟ کد زیر رو اجرا کنید تا ببینید چی میشه

#********************CODE************************
from tkinter import *


root=Tk()
root.geometry('640x480+200+200')

label1=Label(root,text='label 1')
label2=Label(root,text='label 2')
label1.pack()
label2.pack()
label1.bind('<ButtonPress>',lambda e : print('<ButtonPress>'))
label1.bind('<1>',lambda e : print('1'))
root.mainloop()
#********************************************

ادامه مطلب...
۱۵ فروردين ۹۵ ، ۰۱:۰۵ ۳ نظر موافقین ۰ مخالفین ۰
بهنام صباغی

اموزش gui با کتابخانه tkinter این قسمت virtual events

با سلام بهنام صباغی هستم با اموزش gui با کتابخانه tkinter این قسمت virtual events
توی این درس در مورد ایونت های مجازی صحبت میکنیم کد زیر رو ببینید
#************************CODE*************************
from tkinter import *


root=Tk()
root.geometry('640x480+200+200')

entry=Entry(root)
entry.pack()

entry.bind('<<Copy>>',lambda e : print('copy'))
entry.bind('<<Paste>>',lambda e : print('paste'))

root.mainloop()


#********************************************************

ادامه مطلب...
۱۵ فروردين ۹۵ ، ۰۱:۰۴ ۰ نظر موافقین ۰ مخالفین ۰
بهنام صباغی

اموزش gui با کتابخانه tkinter این قسمت mouse

با سلام بهنام صباغی هستم با اموزش gui با کتابخانه tkinter این قسمت mouse
طریقه‌ی تعریف bind به همون صورت هست و فقط ایونت ها فرق میکنه پس من یه توضیحی درمورد ایونت ها میدم اول اینو بگم که کلید سمت چپ موس عددش 1 هست اون گردونه ای که وسط موس هست و میشه چرخوندش و میشه باهاش کلیک هم کرد 2 هست البته برای کلیک کردنش 2 هست  و کلید سمت راست 3 هست حالا ایونت های زیر رو ببینید اولین ایونت برای فشرده شدن کلید هست که میشه که برای همه یکسان عمل میکنه

ادامه مطلب...
۱۵ فروردين ۹۵ ، ۰۱:۰۰ ۰ نظر موافقین ۱ مخالفین ۰
بهنام صباغی

اموزش gui با کتابخانه tkinter این قسمت keyboard

با سلام بهنام صباغی هستم با اموزش gui با کتابخانه tkinter این قسمت keyboard
دوستان bind هم برای ایونت ها کاربرد داره ما میتونیم با بایند هر ایونتی رو روی هر ابزاری تعریف کنیم اگر یادتون باشه کال بک فقط برای فشردن کلید ها یا به عبارت دیگه یک بار کلیک کردن روی اونها بکار میرفت ولی bind دست ما رو خیلی بازتر میذاره اینجا توی این درس من تمرکز دارم روی کلید هایی که از کیبورد میشه فشرد و درس بعد در مورد موس صحبت میکنم خب با یه مثال شروع میکنم
#********************CODE***********************

ادامه مطلب...
۱۵ فروردين ۹۵ ، ۰۰:۵۸ ۰ نظر موافقین ۰ مخالفین ۱
بهنام صباغی

اموزش gui با کتابخانه tkinter این قسمت callback

با سلام بهنام صباغی هستم با اموزش gui با کتابخانه tkinter این قسمت callback
خب یه برنامه ی ساده مینویسم و روی اون توضیح میدم
#******************CODE*******************
from tkinter import *
from tkinter import ttk

root=Tk()
root.geometry('640x480+200+200')
def button_callback():
    print('clicked')
button=ttk.Button(root,text='click',command=button_callback).pack()
#***********************************

ادامه مطلب...
۱۵ فروردين ۹۵ ، ۰۰:۵۴ ۰ نظر موافقین ۱ مخالفین ۰
بهنام صباغی

اموزش gui با کتابخانه tkinter این قسمت geometry manager place

با سلام بهنام صباغی هستم با اموزش gui با کتابخانه tkinter این قسمت geometry manager place
خب دوستان این یکی خیلی دست ادم رو بازتر میذاره میشه توی x و y خاص ابزارمون رو نمایش بدیم کد زیر رو اجرا کنید
#**********************CODE******************
from tkinter import *
from tkinter import ttk

root=Tk()
root.rowconfigure(0,weight=1)
root.rowconfigure(1,weight=3)
root.columnconfigure(2,weight=1)
ttk.Label(root,text='bytton1',background='red').place(x=20,y=30)
ttk.Label(root,text='bytton1',background='blue').place(x=30,y=40)
ttk.Label(root,text='bytton1',background='orange').place(x=40,y=50)

ttk.Label(root,text='bytton1',background='green').place(x=50,y=60)

#*********************************************
خب میبینید که با تغییر اندازه ی روتمون اینها نغییری نمیکنند برای این مشکل از relx و rely استفاده میکنیم به صورت زیر
ttk.Label(root,text='bytton1',background='orange').place(relx=0.5,rely=0.5)
میبینید که تقریبا وسط پنجرمونه ولی سوال اینجاست که چطور میشه کاری کرد که دقیقا وسطش باشه جوابشم تنظیم anchor به 'center' است مثل زیر
ttk.Label(root,text='bytton1',background='orange').place(relx=0.5,rely=0.5,anchor='center')
میتونید نقطه ی صفر رو با relx و rely مقدار بدیم و از اونجا هم دوباره ایکس و y بدیم مثال زیر رو ببینید
ttk.Label(root,text='bytton1',background='pink').place(relx=0.5,x=100,rely=0.5,y=50,anchor='center')
خی تا الان از سمت جپ بالا مقدار میدادیم حالا میشه از سمت راست بالا هم مقدار داد ولی با منفی و باید relx رو برابر 1.0 قرار بدیم میدونید چرا دیگه مثال رو ببینید
ttk.Label(root,text='bytton1',background='green').place(relx=1.0,x=- 5,y=5)
 و میشه اندازه ی ابزار رو هم تعیین کرد
ttk.Label(root,text='bytton1',background='green').place(relx=1.0,x=- 5,y=5,relwidth= 0.5,relheight=0.5))
و
1 - place_slaves()
2 - place_configure()
3 - place_info()
4 - place_forget()
موفق باشید

۱۵ فروردين ۹۵ ، ۰۰:۵۳ ۰ نظر موافقین ۰ مخالفین ۱
بهنام صباغی

اموزش gui با کتابخانه tkinter این قسمت geometry manager grid

با سلام بهنام صباغی هستم با اموزش gui با کتابخانه tkinter این قسمت geometry manager grid
خب این یکی یکم بهتره البته از نظر من توی این یکی از ایندکس برای نمایش استفاده میکنیم صفحه رو به قطعه های کوچیک تقسیم میکنه از سمن بالا چپ شماره ردیف و شماره ستون کد رو ببینید
#**********************CODE***********************

from tkinter import *
from tkinter import ttk

root=Tk()

ttk.Label(root,text='bytton1',background='red').grid(row=0,column=0)

ttk.Label(root,text='bytton1',background='blue').grid(row=1,column=0)

ttk.Label(root,text='bytton1',background='orange').grid(row=0,column=1)

ttk.Label(root,text='bytton1',background='green').grid(row=1,column=1)

#************************************************

حالا اگر بخوایم دقیقا زیر هم نباشند و یکم جابجا بشند و از قطعه ی خودشون بیرون بیاند یه راه داره کد زیر رو ببینید

#**********************CODE***********************

from tkinter import *
from tkinter import ttk

root=Tk()

ttk.Label(root,text='bytton1',background='red').grid(row=0,column=2 ,rowspan=2)

ttk.Label(root,text='bytton1',background='blue').grid(row=1,column=0,  columnspan=2)

ttk.Label(root,text='bytton1',background='orange').grid(row=0,column=0)

ttk.Label(root,text='bytton1',background='green').grid(row=0,column=1)

#************************************************
با این الگو میتونیم بذاریمشون زیر همدیگه اجرا کنید خودتون میفهمید و موقعیت رو هم میتونید با جهت های جغرافیایی بهش بدید
ttk.Label(root,text='bytton1',background='green').grid(row=0,column=1,stick ='e')
حالا کد زیر رو اجرا کنید
#**********************CODE***********************

from tkinter import *
from tkinter import ttk

root=Tk()

ttk.Label(root,text='bytton1',background='red').grid(row=0,column=2 ,rowspan=2,stick ='nsew')

ttk.Label(root,text='bytton1',background='blue').grid(row=1,column=0,  columnspan=2,stick ='nsew')

ttk.Label(root,text='bytton1',background='orange').grid(row=0,column=0,stick ='nsew')

ttk.Label(root,text='bytton1',background='green').grid(row=0,column=1,stick ='nsew')

#************************************************
میبینید که با تغییر اندازه تغییر نمیکنند برای این مشکل با توایع rowconfigure و  columnconfigure که متعلق به روت هستند و مشخص کردن وزن برای هرکدوم مشکل رو حل میکنیم مثال زیر رو ببینید
#**********************CODE***********************

from tkinter import *
from tkinter import ttk

root=Tk()
root.rowconfigure(0,weight=1)
root.rowconfigure(1,weight=3)
root.columnconfigure(2,weight=1)
ttk.Label(root,text='bytton1',background='red').grid(row=0,column=2 ,rowspan=2,stick ='nsew')

ttk.Label(root,text='bytton1',background='blue').grid(row=1,column=0,  columnspan=2,stick ='nsew')

ttk.Label(root,text='bytton1',background='orange').grid(row=0,column=0,stick ='nsew')

ttk.Label(root,text='bytton1',background='green').grid(row=0,column=1,stick ='nsew')

#************************************************
کد بالا رو اجرا کنید و پنجره رو تغییر اندازه بدید میبینید که در راستای row ردیف دوم به ازای هر یک پیکسل تغییر اندازه ی ردیف اول سه پیکسل تغییر اندازه میده و هر ردیفی رو که تعریف نکنیم یا ستون فرقی نمیکنه صفر درنظر گرفته میشه
درراستای ستون ها هم سومی رو که یک دادم تغییر میکنه وبقیه صفر هستند
توابع زیر هم مثل همون pack برای grid هم صادقند
1 - grid_slaves()
2 - grid_configure()
3 - grid_info()
4 - grid_forget()
موفق باشید

۱۵ فروردين ۹۵ ، ۰۰:۵۲ ۱ نظر موافقین ۱ مخالفین ۰
بهنام صباغی

اموزش gui با کتابخانه tkinter این قسمت geometry manager pack

با سلام بهنام صباغی هستم با اموزش gui با کتابخانه tkinter این قسمت geometry manager pack
خب لالاخره رسیدیم به حالت های چیدن ایزار هامون روی صفحه اسم کلیشون geometry manager هست و الان من میخوام شما رو بیشتر با pack اشنا کنم همونی که تا الان ازش استفاده ی ساده میکردیم و باهاش اشنایی نداشتیم حالا براتون کامل توضیحش میدم
کد زیر رو اجرا کنید
#**********************CODE******************
from tkinter import *
from tkinter import ttk

root=Tk()

button1=ttk.Button(root,text='bytton1')
button1.pack()

#*********************************************

ادامه مطلب...
۱۵ فروردين ۹۵ ، ۰۰:۵۱ ۰ نظر موافقین ۱ مخالفین ۰
بهنام صباغی

اموزش gui با کتابخانه tkinter این قسمت dialog

با سلام بهنام صباغی هستم با اموزش gui با کتابخانه tkinter این قسمت dialog
دیالوگ برای زمانی کاربرد داره که میخواید به کاربر پیامی رو نمایش بدید و یا نظرش رو بپرسید با یه مثال ساده شروع میکنم
#***********************CODE**********************
from tkinter import messagebox

messagebox.showinfo(title='error',message="you dont undrestand if don't  exercise")
#***************************************************
میبینید که اول یک پنجره اصل نمایش داده میشه و بعد پیام اخطار اجرا میشه چون رای اجرای پیام نیاز به یک پنجره اصلی داریم و سه مدل از این دیالوگ ها داریم که از اسمشون معلومه برای چه کاری هستند
1 - showinfo()
2 - showwarning()
3 - showerror()

ادامه مطلب...
۱۵ فروردين ۹۵ ، ۰۰:۲۳ ۱ نظر موافقین ۱ مخالفین ۰
بهنام صباغی