استفاده از Entry

  • مدرس: علی بیگدلی
  • تاریخ انتشار: Aug 26, 2020

در این قسمت می خواهیم به بررسی نحوه ساخت باکس هایی که کاربر بتواند ورودی های متنی مورد نظر را در آن قرار دهد را بسازیم، که با نام 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()
 

نمونه خروجی:

 

ثبت دیدگاه
نام *
ایمیل*
دیدگاه *
23دیدگاه
  • ناشناس
    9 months ago

    سلام
    سایت و آموزشات خیلی عالی هست

  • محمد خلیلی
    1 year, 4 months ago

    سلام استاد یه سوال داشتم
    خواستم بدونم چیکار باید بکن که وقتی دکمه سانینگ رو میزتنم وارد یه پنجره دیگه بشه ممنون میشم کدش رو بنویسید
    و چیجوری باید رنگ بکگراند رو عوض کنم ممنون
    اگه میشه این دو تا کد رو بنویسید ممنون

    • علی بیگدلی
      1 year, 4 months ago

      واقعیت نمیشه اینجا کد نوشت ولی می تونم رفرنس بهت بدم برای بخش مربوط به signin می تونی صفحه ایجاد کنی و بعد کلاس رو از بین ببری و یه کلاس دیگه رو برای ایجاد صفحه صدا بزنی یا از toplevel استفاده کنی برای تغییر پس زمینه هم آرگومان های background frame رو تغییر بده

  • علی باقری
    2 years, 1 month ago

    سلام
    یک دکمه درست کردم که وقتی می زنیم داخل یک تکس باکس متنی بصورت پیش فرض بنویسد. برنامه با کلاس نوشته شده است. اما خطای زیر را نمایش میدهد.(در کد بالا که شما نوشتید درست عمل می کند و خطایی ندارد)
    self.cr1_en.insert(0, "Python")
    AttributeError: 'Bill_App' object has no attribute 'cr1_en'

    • علی بیگدلی
      2 years ago

      خطا به وضوح داره میگه که شما دارید به attribute اشتباهی اشاره می کنین

    • علی باقری
      2 years ago

      یه self قبلش باید مینوشتم

    • علی باقری
      2 years ago

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

    • علی بیگدلی
      2 years ago

      دوست عزیز شما توی کدی که به من فرستادی قبلش self نوشتی!
      و اینکه با دادن این یه خط کد خطای نبودن اون attribute رو هم برای من فرستادی
      خوب قطعا اینو به هر کسی بدی جوابی که من دادم رو میگیری
      داده درست خروجی درست هم داره

    • علی باقری
      2 years ago

      درسته، مشکل هم دقیقا همینجاست؛ در برنامه هایی که از کلاس استفاده می کنند در هنگام تعریف اولیه متغیر آن کلاس، اگر بخواهیم در توابع فراخوانی شوند باید از کلمه کلیدی self قبل از آن استفاده شود و در خود تابع هم همینطور. در غیر اینصورت نیازی به نوشتن این کلمه در هنگام تعریف متغیر نیست. متن قبلی هم که در آن کلمه self نوشته شده بود حاصل خطای برنامه است که به نوعی به این نکته اشاره داشت که این self.cr1_en فاقد ویژگیهای کلاس Bill_App هست و برای حل مشکل باید این ویژگیها را با کلمه self برای ارجاع آدرس دهی در توابع آن کلاس به آن متغیر داد.(ضمنا من قصد یادگیری بیشتر از اطلاعات مفید شما را دارم و به نوعی درس پس میدهم)

    • علی بیگدلی
      2 years ago

      متوجه منظورتون هستم، اما مسئله اینه که باید در نظر داشته باشید که برای اینکه بتونید مشکلات رو درست پیدا کنین لازم میشه که طرح مشکل هم درست باشه، اما در مورد شاخص های کلاس باید بگم در صورتی که متغیری که استفاده می کنید داخل کلاس به صورت یک attribute تعریف شده باشه در این صورت در تمام کلاس قابل بازیابی هستش اما در صورتی که اینطور نباشه به عنوان یک متغیر local بهش نگاه میشه و فقط داخل همون تابع قابل دسترسه

  • صالح شفیعی
    2 years, 3 months ago

    سلام برای بستن پنجره باید از چه تدی اتفاده کنیم

    • علی بیگدلی
      2 years, 3 months ago

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

  • taha goodarzi
    2 years, 3 months ago

    سلام برامن رو لیبل ارور میده

    • علی بیگدلی
      2 years, 3 months ago

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

  • امیرعلی
    2 years, 6 months ago

    ببخشید برای گرفتن عدد از کاربر از چه دستوری باید استفاده کرد؟؟

    • علی بیگدلی
      2 years, 6 months ago

      آموزش رو ادامه بدید بخش های مربوط به گرفتن مقادیر عددی هم توضیح داده شده

    • Msh Hh
      2 years, 6 months ago

      بله درسته الان درست است

  • Msh Hh
    2 years, 6 months ago

    سلام ببخشید این ویدیو رو برا من باز نمیکنه نمیدونم چرا لطفا رسیدگی کنین

    • علی بیگدلی
      2 years, 6 months ago

      عزیز احتمالا مشکل از سمت شماس و الا همه می تونن ببینن

  • SEZAR
    2 years, 6 months ago

    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

    • علی بیگدلی
      2 years, 6 months ago

      بله ایراداتی داشته که احتمالا موقع اضافه کردن قسمت های شئ گرایی دچار مشکل شده،
      ممنونم از یاد آوری

  • معراج کاظمی
    2 years, 9 months ago

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

    • علی بیگدلی
      2 years, 9 months ago

      شما می بایست با استفاده از askopenfile این کار رو انجام بدید برای اینکه با زدن دکمه بتونید ورودی از کاربر حالا هر مدل فایلی که هستش رو بگیرید
      به قطعه کده نوشته شده در این صفحه نگاه بندازید:
      https://stackoverflow.com/questions/16798937/creating-a-browse-button-with-tkinter