انواع در tkinter کمی متفاوت از انواع در برنامه نویسی پایتون است .StringVar () یکی از آن انواع در tkinter است.
با استفاده از این انواع ما یاد می گیریم چگونه داده ها را از رابط گرافیکی tkinter گرفته و در متغیرها ذخیره کنیم نا از آن داده ها استفاده کنیم.
در جدول زیر برخی از انواع موجود در tkinter مشاهده میکنید:
بررسی با یک مثال :
وارد محیط شل پایتون شوید و برای ایجاد یک شی یا نمونه از کلاس 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
خیلی مهمه در هنگام نوشتن 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 >>>
from tkinter import * top = Tk() label = Label(top, text='Hello World!') label.pack() mainloop()
from tkinter import * top =Tk() label = Label(top, text='Hello World!') label.pack() label.config(text="Hello Sufra!") mainloop()
from tkinter import * root = Tk() inp = StringVar() inp.set("New Text!") label =Label(root, textvariable = inp).pack() mainloop()
در شل پایتون وضوح تغییر در مقدار متغیر بیشتر است. الان ما بدون استفاده از کلاسهای متغیر مقداری را به برچسب نسبت دادیم و خروجی آن را مشاهده کردیم.
با استفاده از کلاس متغیر رشته یک نمونه ساخته و در متغیر inp قرار دادیم. سپس با استفاده از متد set آن را مقدار دهی کردیم،و در textvariable =inp برچسب قرار دادیم.
ما یه نمونه ی دیگر ساخته و مقدار دهی کردیم
مقادیری که در این شی ها ذخیره کرده بودیم را عوض کردیم همانطور که مشاهده میکنید فورا مقدار آنها عوض شد و قبلی ازمیان رفت.