استفاده از Entry
در این قسمت می خواهیم به بررسی نحوه ساخت باکس هایی که کاربر بتواند ورودی های متنی مورد نظر را در آن قرار دهد را بسازیم، که با نام Entry در این ماژول یاد می شوند. این تابع برای گرفتن ورودی های text از کاربر است و می توان از آن برای ساخت فرم هایی که می خواهیم کاربر آنها را پر کند استفاده کنیم. که در واقع می توانیم با استفاده از برچسب ها در کنار این ویدجت یک فرم برای ورود نام و نام فامیل کاربر را ایجاد کنیم. به مثال زیر توجه کنید.
نمونه کد:
# importing libraries
from tkinter import *
# building a window
window = Tk()
#adding window title
window.title("icc-aria gui app")
#making a label for first name entry
Label(window, text="First Name").pack()
#making the entry for first name
name = Entry(window)
name.pack()
#making a label for last name entry
Label(window, text="Last Name").pack()
#making the entry for last name
family_name = Entry(window)
family_name.pack()
#creating the loop for the program
window.mainloop()
# importing tkinter modules
from tkinter import *
# inherianceing from Tk module and initializing the Tk class for creating object
class App(Tk):
def __init__(self):
Tk.__init__(self)
self.title("icc-aria gui app")
#making a label for first name entry
Label(self, text="First Name").pack()
#making the entry for first name
name = Entry(self)
name.pack()
#making a label for last name entry
Label(self, text="Last Name").pack()
#making the entry for last name
family_name = Entry(self)
family_name.pack()
# creating the object of app for tk main window
if __name__ == "__main__":
app = App()
app.mainloop()
نکته: اگر دقت کنید در قسمت معرفی command ما تابع را بدون پرانتز قرار دادیم چون به صورت یک صفت بر روی کلید عمل خواهد کرد.
خروجی کد:
تا اینجا متوجه شدیم که چطور این فیلد ها را ایجاد کنیم. اما سوالی که الان برای شما ایجاد می شود این است که چطور این مقادیر را در کد می بایستی دریافت و بر روی آن ها عملیات انجام دهیم. برای انجام این کار نیاز به معرفی چند متد برای دریافت ورودی ها و همچنین ایجاد عملکرد های دیگر بر روی این ورودی هاست. معرفی تعدادی از متد هایی که ممکن است در طول آموزش مورد استفاده قرار گیرند. که این متد ها در مواردی بر روی بعضی ویدجت ها عملکرد مشابهی خواهد داشت.
- delete ( first, last=None )
- get()
- icursor()
- index ( index )
- insert ( index, s )
- select_adjust ( index )
- select_clear()
- select_from ( index )
- select_present()
- select_range ( start, end )
- select_to ( index )
- xview ( index )
- xview_scroll ( number, what )
نمونه کد زیر می تواند مقادیر را به عنوان ورودی گرفته و پس از فشردن کلیدی عملیات مد نظر را بر روی ورودی ها انجام دهد.
کد نمونه:
# importing modules
from tkinter import *
#making a window instance
window = Tk()
#creating a title for window
window.title("icc-aria gui app")
def sign_in():
first_name = name.get()
last_name = family_name.get()
print("welcome mr/ms {} {}".format(first_name,last_name))
user_name.configure(text="welcome mr/ms {} {}".format(first_name,last_name))
Label(window, text="First Name").pack()
#making the entry for first name
name = Entry(window)
name.pack()
#making a label for last name entry
Label(window, text="Last Name").pack()
#making the entry for last name
family_name = Entry(window)
family_name.pack()
#making an action button
btn = Button(window,text="sign in",command=sign_in)
btn.pack()
#making a label to be able to welcome user
user_name = Label(window)
user_name.pack()
#making a loop for the window to run
window.mainloop()
# importing tkinter modules
from tkinter import *
# inherianceing from Tk module and initializing the Tk class for creating object
class App(Tk):
def __init__(self):
Tk.__init__(self)
self.title("icc-aria gui app")
#making a label for first name entry
Label(self, text="First Name").pack()
#making the entry for first name
self.name = Entry(self)
self.name.pack()
#making a label for last name entry
Label(self, text="Last Name").pack()
#making the entry for last name
self.family_name = Entry(self)
self.family_name.pack()
#making an action button
btn = Button(self,text="sign in",command=self.sign_in)
btn.pack()
#making a label to be able to welcome user
self.user_name = Label(self)
self.user_name.pack()
#function to get the name and family name to show in window and console
def sign_in(self):
first_name = self.name.get()
last_name = self.family_name.get()
print("welcome mr/ms {} {}".format(first_name,last_name))
self.user_name.configure(text="welcome mr/ms {} {}".format(first_name,last_name))
# creating the object of app for tk main window
if __name__ == "__main__":
app = App()
app.mainloop()
نمونه خروجی:
سلام
سایت و آموزشات خیلی عالی هست
سلام استاد یه سوال داشتم
خواستم بدونم چیکار باید بکن که وقتی دکمه سانینگ رو میزتنم وارد یه پنجره دیگه بشه ممنون میشم کدش رو بنویسید
و چیجوری باید رنگ بکگراند رو عوض کنم ممنون
اگه میشه این دو تا کد رو بنویسید ممنون
واقعیت نمیشه اینجا کد نوشت ولی می تونم رفرنس بهت بدم برای بخش مربوط به signin می تونی صفحه ایجاد کنی و بعد کلاس رو از بین ببری و یه کلاس دیگه رو برای ایجاد صفحه صدا بزنی یا از toplevel استفاده کنی برای تغییر پس زمینه هم آرگومان های background frame رو تغییر بده
سلام
یک دکمه درست کردم که وقتی می زنیم داخل یک تکس باکس متنی بصورت پیش فرض بنویسد. برنامه با کلاس نوشته شده است. اما خطای زیر را نمایش میدهد.(در کد بالا که شما نوشتید درست عمل می کند و خطایی ندارد)
self.cr1_en.insert(0, "Python")
AttributeError: 'Bill_App' object has no attribute 'cr1_en'
خطا به وضوح داره میگه که شما دارید به attribute اشتباهی اشاره می کنین
یه self قبلش باید مینوشتم
برنامه داره میگه این شی این attribute رو نداره، خب چرا نداره حتما نمی شناسه چون شی صحیح نوشته شده به عبارتی همون شی هست پس حتما در موقع آدرس دهی داخل کلاس اونو نمی شناسه؛ برای رفع این گونه خطاها حتما باید بررسی بشه که در تعریف اولیه شی کلمه کلیدی self قبلش اومده که در اینجا با نوشتن این کلمه قبل از شی بصورت self.cr1_en مشکل حل شد.
دوست عزیز شما توی کدی که به من فرستادی قبلش self نوشتی!
و اینکه با دادن این یه خط کد خطای نبودن اون attribute رو هم برای من فرستادی
خوب قطعا اینو به هر کسی بدی جوابی که من دادم رو میگیری
داده درست خروجی درست هم داره
درسته، مشکل هم دقیقا همینجاست؛ در برنامه هایی که از کلاس استفاده می کنند در هنگام تعریف اولیه متغیر آن کلاس، اگر بخواهیم در توابع فراخوانی شوند باید از کلمه کلیدی self قبل از آن استفاده شود و در خود تابع هم همینطور. در غیر اینصورت نیازی به نوشتن این کلمه در هنگام تعریف متغیر نیست. متن قبلی هم که در آن کلمه self نوشته شده بود حاصل خطای برنامه است که به نوعی به این نکته اشاره داشت که این self.cr1_en فاقد ویژگیهای کلاس Bill_App هست و برای حل مشکل باید این ویژگیها را با کلمه self برای ارجاع آدرس دهی در توابع آن کلاس به آن متغیر داد.(ضمنا من قصد یادگیری بیشتر از اطلاعات مفید شما را دارم و به نوعی درس پس میدهم)
متوجه منظورتون هستم، اما مسئله اینه که باید در نظر داشته باشید که برای اینکه بتونید مشکلات رو درست پیدا کنین لازم میشه که طرح مشکل هم درست باشه، اما در مورد شاخص های کلاس باید بگم در صورتی که متغیری که استفاده می کنید داخل کلاس به صورت یک attribute تعریف شده باشه در این صورت در تمام کلاس قابل بازیابی هستش اما در صورتی که اینطور نباشه به عنوان یک متغیر local بهش نگاه میشه و فقط داخل همون تابع قابل دسترسه
سلام برای بستن پنجره باید از چه تدی اتفاده کنیم
کافیه بر روی کلاس اصلی و یا شئ صفحه از متد quit استفاده کنید
سلام برامن رو لیبل ارور میده
قطعا مشکل از قطعه کدتون هستش ارور رو بنویسید لطفا
ببخشید برای گرفتن عدد از کاربر از چه دستوری باید استفاده کرد؟؟
آموزش رو ادامه بدید بخش های مربوط به گرفتن مقادیر عددی هم توضیح داده شده
بله درسته الان درست است
سلام ببخشید این ویدیو رو برا من باز نمیکنه نمیدونم چرا لطفا رسیدگی کنین
عزیز احتمالا مشکل از سمت شماس و الا همه می تونن ببینن
ostan dakhel barname neveshte shode baraye amali kardan button ba estefade az tabe ghesmathaye neveshte shode be onvan self eshtebah hastan va bayad self haro pak konid
khastam beheton begam ke digar dostan dochar moshkel nashan
بله ایراداتی داشته که احتمالا موقع اضافه کردن قسمت های شئ گرایی دچار مشکل شده،
ممنونم از یاد آوری
سلام من میخوام یک برنامه ادیتور عکس بنویسم که بالای صفحه یک button باشه که کاربر وقتی زد روش عکس رو انتخاب کنه و نمیدونم چجوری این کار رو کنم لطفا بگید چجوری این کار رو کنم و اینکه بعدش چجوری میتونم عکس انتخاب شده رو تو یه متغییر بریزم که ادیتش کنم بعد
شما می بایست با استفاده از askopenfile این کار رو انجام بدید برای اینکه با زدن دکمه بتونید ورودی از کاربر حالا هر مدل فایلی که هستش رو بگیرید
به قطعه کده نوشته شده در این صفحه نگاه بندازید:
https://stackoverflow.com/questions/16798937/creating-a-browse-button-with-tkinter