بسته tkinter ("Interface Tk") رابط استاندارد پایتون برای جعبه ابزار Tcl/Tk GUI است. هر دو Tk و tkinter در اکثر سیستم عامل های یونیکس، از جمله macOS، و همچنین در سیستم های ویندوز در دسترس هستند.
اجرای pytho n-m tkinter از خط فرمان باید پنجره ای را باز کند که یک رابط ساده Tk را نشان می دهد و به شما اطلاع می دهد که tkinter به درستی روی سیستم شما نصب شده است و همچنین نشان می دهد که چه نسخه ای از Tcl/Tk نصب شده است، بنابراین می توانید Tcl/ را بخوانید. اسناد Tk مخصوص آن نسخه.
Tkinter طیف وسیعی از نسخه های Tcl/Tk را پشتیبانی می کند که با یا بدون پشتیبانی از رشته ساخته شده اند. بسته های رسمی انتشار باینری پایتون Tcl/Tk 8. 6 رشته ای. برای اطلاعات بیشتر در مورد نسخه های پشتیبانی شده، کد منبع ماژول _tkinter را ببینید.
Tkinter یک لفاف نازک نیست، اما مقدار مناسبی از منطق خود را اضافه می کند تا تجربه را pythonic تر کند. این مستندات بر روی این اضافات و تغییرات متمرکز است و برای جزئیات بدون تغییر به اسناد رسمی Tcl/Tk مراجعه می کند.
Tcl/Tk 8. 5 (2007) مجموعه ای مدرن از اجزای رابط کاربری با موضوع را به همراه یک API جدید برای استفاده از آنها معرفی کرد. API های قدیمی و جدید هنوز در دسترس هستند. اکثر اسنادی که به صورت آنلاین پیدا می کنید هنوز از API قدیمی استفاده می کنند و می توانند به طرز غم انگیزی قدیمی باشند.
- TkDocs آموزش جامع ایجاد رابط کاربری با Tkinter. مفاهیم کلیدی را توضیح می دهد و رویکردهای توصیه شده را با استفاده از API مدرن نشان می دهد.
- مرجع Tkinter 8. 5: یک رابط کاربری گرافیکی برای مستندات مرجع پایتون برای Tkinter 8. 5 که کلاس ها، روش ها و گزینه های موجود را شرح می دهد.
- دستورات Tk ارجاع جامع به هر یک از دستورات زیربنایی Tcl/Tk که توسط Tkinter استفاده می شود.
- صفحه اصلی Tcl/Tk اسناد اضافی و پیوندهایی به توسعه هسته Tcl/Tk.
- Tkinter مدرن برای توسعه دهندگان پرمشغله پایتون اثر مارک روزمن.(ISBN 978-1999149567)
- برنامه نویسی پایتون و Tkinter توسط آلن مور.(ISBN 978-1788835886)
- برنامه نویسی پایتون توسط مارک لوتز; پوشش عالی Tkinter را دارد.(ISBN 978-0596158101)
- Tcl and the Tk Toolkit (ویرایش دوم) توسط جان اوسترهات، مخترع Tcl/Tk، و کن جونز. Tkinter را پوشش نمی دهد.(ISBN 978-0321336330)
معماری¶
Tcl/Tk یک کتابخانه واحد نیست، بلکه از چند ماژول مجزا تشکیل شده است که هر کدام دارای عملکرد جداگانه و مستندات رسمی خود هستند. نسخه های باینری پایتون همچنین یک ماژول الحاقی را همراه با آن ارسال می کند.
Tcl یک زبان برنامه نویسی تفسیری پویا است، درست مانند پایتون. اگرچه می تواند به تنهایی به عنوان یک زبان برنامه نویسی همه منظوره مورد استفاده قرار گیرد، اما معمولاً در برنامه های C به عنوان یک موتور برنامه نویسی یا یک رابط برای جعبه ابزار Tk تعبیه می شود. کتابخانه Tcl دارای یک رابط C برای ایجاد و مدیریت یک یا چند نمونه از مفسر Tcl، اجرای دستورات و اسکریپت های Tcl در آن نمونه ها و اضافه کردن دستورات سفارشی پیاده سازی شده در Tcl یا C است. هر مفسر دارای یک صف رویداد است. امکاناتی برای ارسال رویدادها به آن و پردازش آنها. برخلاف پایتون، مدل اجرای Tcl حول محور چندوظیفه ای مشترک طراحی شده است و Tkinter این تفاوت را برطرف می کند (برای جزئیات به مدل Threading مراجعه کنید).
Tk یک بسته Tcl است که در C پیاده سازی شده است که دستورات سفارشی را برای ایجاد و دستکاری ویجت های رابط کاربری گرافیکی اضافه می کند. هر شی Tk نمونه مفسر Tcl خود را با Tk بارگذاری شده در آن جاسازی می کند. ویجت های Tk بسیار قابل تنظیم هستند، هرچند به قیمت ظاهری قدیمی. Tk از صف رویداد Tcl برای تولید و پردازش رویدادهای رابط کاربری گرافیکی استفاده می کند.
Themed Tk (Ttk) یک خانواده جدیدتر از ویجت های Tk است که ظاهر بسیار بهتری را در پلتفرم های مختلف نسبت به بسیاری از ویجت های کلاسیک Tk ارائه می دهد. Ttk به عنوان بخشی از Tk توزیع می شود که با نسخه 8. 5 Tk شروع می شود. اتصالات پایتون در یک ماژول جداگانه، tkinter. ttk ارائه شده است.
در داخل، Tk و Ttk از امکانات سیستم عامل اصلی استفاده می کنند، یعنی Xlib در Unix/X11، Cocoa در macOS، GDI در ویندوز.
هنگامی که برنامه پایتون شما از یک کلاس در Tkinter استفاده می کند، به عنوان مثال، برای ایجاد یک ویجت، ماژول tkinter ابتدا یک رشته دستور Tcl/Tk را جمع آوری می کند. این رشته دستور Tcl را به یک ماژول باینری _tkinter داخلی می فرستد، که سپس مفسر Tcl را برای ارزیابی آن فراخوانی می کند. سپس مفسر Tcl بسته های Tk و/یا Ttk را فراخوانی می کند که به نوبه خود با Xlib، Cocoa یا GDI تماس می گیرد.
ماژول های Tkinter¶
پشتیبانی از Tkinter در چندین ماژول پخش شده است. اکثر برنامه ها به ماژول اصلی tkinter و همچنین ماژول tkinter. ttk نیاز دارند که مجموعه ویجت با موضوع مدرن و API را ارائه می دهد:
از جانب tkinter وارد كردن * از جانب tkinter وارد كردن ttk
کلاس tkinter. Tk (screenName = هیچ، baseName = هیچ، className = 'Tk'، useTk = درست، همگام سازی = نادرست، استفاده = هیچکدام) ¶
یک ویجت Tk سطح بالا که معمولاً پنجره اصلی برنامه است بسازید و یک مفسر Tcl را برای این ویجت مقداردهی کنید. هر نمونه دارای مفسر Tcl مربوط به خود است.
کلاس TK به طور معمول با استفاده از تمام مقادیر پیش فرض فوری می شود. با این حال ، آرگومان های کلمات کلیدی زیر در حال حاضر شناخته شده اند:
هنگامی که (به عنوان یک رشته) داده می شود ، متغیر محیط نمایش را تنظیم می کند.(فقط x11)
نام پرونده نمایه. به طور پیش فرض ، نام اصلی از نام برنامه (sys. argv [0]) گرفته شده است.
نام کلاس ویجت. به عنوان یک فایل پروفایل و همچنین به عنوان نامی که از آن استفاده می شود (ARGV0 در اینترپ) استفاده می شود.
اگر درست است ، زیر سیستم TK را اولیه کنید. تابع tkinter. tcl () این را به False تنظیم می کند.
اگر درست است ، تمام دستورات سرور X را همزمان اجرا کنید ، به طوری که خطاها بلافاصله گزارش می شوند. برای اشکال زدایی قابل استفاده است.(فقط x11)
شناسه پنجره ای را که در آن می تواند برنامه را تعبیه کند ، به جای اینکه به عنوان یک پنجره مستقل Toplevel ایجاد شود ، مشخص می کند. شناسه باید به همان روشی مشخص شود که مقدار گزین ه-استفاده از ویجت های Toplevel (یعنی شکلی مانند آن توسط WinFO_ID () برگشته است).
توجه داشته باشید که در بعضی از سیستم عامل ها این کار فقط به درستی کار خواهد کرد اگر شناسه به یک قاب TK یا Toplevel اشاره کند که گزین ه-container خود را فعال کرده است.
TK پرونده های پروفایل را خوانده و تفسیر می کند ، نامگذاری شده است. نام کلاس . tcl و. نام اصلی . tcl ، به مترجم TCL و تماس با محتویات را فراخوانی می کند. نام کلاس . py و. نام اصلی . py. مسیر پرونده های پروفایل متغیر محیط خانه است یا اگر تعریف نشده باشد ، پس از آن. curdir.
شیء برنامه TK ایجاد شده با فوری Tk. این دسترسی به مترجم TCL را فراهم می کند. هر ویجت که به همان نمونه TK وصل شده است ، برای ویژگی TK خود یکسان است.
شی ویجت که حاوی این ویجت است. برای TK ، استاد هیچکدام نیست زیرا پنجره اصلی است. اصطلاحات استاد و والدین مشابه هستند و گاهی اوقات به صورت متناوب به عنوان نام استدلال استفاده می شوند. با این حال ، تماس با winfo_parent () رشته ای از نام ویجت را برمی گرداند در حالی که استاد شیء را برمی گرداند. والدین / کودک رابطه درخت مانند را منعکس می کند در حالی که استاد / برده منعکس کننده ساختار کانتینر است.
فرزندان فوری این ویجت به عنوان یک دیکته با نام ویجت کودک به عنوان کلیدها و نمونه کودک به عنوان مقادیر اشیاء می کنند.
tkinterTCL (نام صفحه = هیچ ، نام اصلی = هیچ ، classname = 'tk' ، usetk = false)
تابع TCL () یک تابع کارخانه است که یک شیء را مانند آن ایجاد می کند که توسط کلاس TK ایجاد شده است ، به جز اینکه زیر سیستم TK را اولیه نمی کند. این اغلب هنگام رانندگی مترجم TCL در محیطی مفید است که کسی نمی خواهد ویندوزهای Toplevel را ایجاد کند ، یا جایی که نمی توان (مانند سیستم های UNIX/Linux بدون سرور X). یک شیء ایجاد شده توسط شی Tcl () می تواند یک پنجره Toplevel ایجاد کند (و زیر سیستم TK اولیه) با استفاده از روش LoadTK () آن.
ماژول هایی که پشتیبانی TK را ارائه می دهند عبارتند از:
ماژول اصلی tkinter.
گفتگو برای اجازه دادن به کاربر رنگ را انتخاب می کند.
کلاس پایه برای گفتگوهای تعریف شده در سایر ماژول های ذکر شده در اینجا.
گفتگوی های متداول برای اینکه کاربر بتواند فایل را برای باز یا ذخیره مشخص کند.
آب و برق برای کمک به کار با قلم.
دسترسی به کادرهای گفتگوی استاندارد TK.
ویجت متن با نوار پیمایش عمودی ساخته شده در آن.
گفتگوی های اساسی و عملکردهای راحتی.
مجموعه ویجت مضمون معرفی شده در TK 8. 5 ، و گزینه های مدرن را برای بسیاری از ابزارک های کلاسیک در ماژول اصلی Tkinter ارائه می دهد.
یک ماژول باینری که حاوی رابط سطح پایین به TCL/TK است. به طور خودکار توسط ماژول اصلی Tkinter وارد می شود و هرگز نباید مستقیماً توسط برنامه نویسان برنامه استفاده شود. این یک کتابخانه مشترک (یا DLL) است ، اما ممکن است در بعضی موارد با مترجم پایتون به صورت آماری ارتباط داشته باشد.
محیط توسعه و یادگیری یکپارچه پایتون (IDLE). بر اساس tkinter.
ثابت های نمادین که هنگام انتقال پارامترهای مختلف به تماس های Tkinter می توانند به جای رشته ها مورد استفاده قرار گیرند. به طور خودکار توسط ماژول اصلی tkinter وارد می شود.
(آزمایشی) پشتیبانی از کشیدن و رها کردن برای tkinter. این کار وقتی با TK DND جایگزین می شود ، کاهش می یابد.
(مستهلک) یک بسته TCL/TK شخص ثالث قدیمی که چندین ابزارک جدید را اضافه می کند. گزینه های بهتر برای اکثر موارد را می توان در tkinter. ttk یافت.
گرافیک لاک پشت در یک پنجره TK.
Tkinter Life Preserver¶
این بخش به گونه ای طراحی نشده است که یک آموزش جامع در TK یا Tkinter باشد. برای این کار ، به یکی از منابع خارجی که قبلاً ذکر شد مراجعه کنید. در عوض ، این بخش جهت گیری بسیار سریع به آنچه یک برنامه TKINTER به نظر می رسد ، ارائه می دهد ، مفاهیم بنیادی TK را مشخص می کند و توضیح می دهد که چگونه بسته بندی Tkinter ساختار یافته است.
بخش باقیمانده این بخش به شما کمک می کند تا کلاس ها ، روش ها و گزینه های مورد نیاز خود را در برنامه TKINTER خود شناسایی کنید ، و از کجا می توانید مستندات دقیق تری در مورد آنها پیدا کنید ، از جمله در دفترچه راهنمای رسمی TCL/TK.
یک برنامه سلام جهانی
ما با راه رفتن در یک برنامه "سلام جهان" در Tkinter شروع خواهیم کرد. این کوچکترین موردی نیست که می توانیم بنویسیم ، اما به اندازه کافی برای نشان دادن مفاهیم کلیدی که باید بدانید.
از جانب tkinter وارد كردن * از جانب tkinter وارد كردن ttk ریشه = Tk() فاش کردن = ttk.قاب(ریشه, لایه گذاری=10) فاش کردن.توری() ttk.برچسب(فاش کردن, متن="سلام دنیا!").توری(ستون=0, ردیف=0) ttk.دکمه(فاش کردن, متن="ترک", فرمان=ریشه.از بین رفتن).توری(ستون=1, ردیف=0) ریشه.لاله()
پس از واردات ، خط بعدی نمونه ای از کلاس TK را ایجاد می کند ، که TK را اولیه می کند و مترجم TCL مرتبط خود را ایجاد می کند. همچنین یک پنجره Toplevel ، معروف به پنجره ریشه ، ایجاد می کند که به عنوان پنجره اصلی برنامه عمل می کند.
خط زیر یک ویجت فریم ایجاد می کند که در این حالت شامل یک برچسب و دکمه ای است که در مرحله بعدی ایجاد خواهیم کرد. قاب در داخل پنجره ریشه قرار دارد.
خط بعدی یک ویجت برچسب ایجاد می کند که دارای یک رشته متن استاتیک است. از روش Grid () برای مشخص کردن طرح نسبی (موقعیت) برچسب در ویجت قاب حاوی آن استفاده می شود ، مشابه نحوه کار جداول در HTML.
سپس ویجت دکمه ای ایجاد می شود و در سمت راست برچسب قرار می گیرد. هنگام فشار دادن ، روش Destroy () پنجره ریشه را صدا می کند.
سرانجام ، روش اصلی () همه چیز را در صفحه نمایش قرار می دهد و تا زمان خاتمه برنامه به ورودی کاربر پاسخ می دهد.
مفاهیم مهم TK چگونه
حتی این برنامه ساده مفاهیم کلیدی زیر TK را نشان می دهد:
رابط کاربری Tkinter از ابزارک های فردی تشکیل شده است. هر ویجت به عنوان یک شی پایتون نشان داده می شود ، که از کلاس هایی مانند ttk. frame ، ttk. label و ttk. button فوری می شود.
ابزارک ها در یک سلسله مراتب ترتیب داده می شوند. برچسب و دکمه در یک قاب موجود بود که به نوبه خود در پنجره ریشه قرار داشت. هنگام ایجاد هر ویجت کودک ، ویجت والدین آن به عنوان اولین استدلال برای سازنده ویجت منتقل می شود.
ویجت ها دارای گزینه های پیکربندی هستند که ظاهر و رفتار آنها را تغییر می دهد ، مانند متن برای نمایش در یک برچسب یا دکمه. کلاسهای مختلف ابزارک مجموعه های مختلفی از گزینه ها دارند.
ویجت ها هنگام ایجاد به طور خودکار به رابط کاربری اضافه نمی شوند. یک مدیر هندسه مانند کنترل شبکه که در رابط کاربری قرار می گیرند.
Tkinter به ورودی کاربر ، تغییر از برنامه شما واکنش نشان می دهد و حتی هنگام اجرای یک حلقه رویداد ، نمایشگر را نیز تازه می کند. اگر برنامه شما حلقه رویداد را اجرا نمی کند ، رابط کاربری شما به روز نمی شود.
درک چگونگی بسته بندی tkinter tcl/tk¶
وقتی برنامه شما از کلاس ها و متدهای Tkinter استفاده می کند، Tkinter به صورت داخلی رشته هایی را که دستورات Tcl/Tk را نشان می دهند مونتاژ می کند و آن دستورات را در مفسر Tcl متصل به نمونه Tk اپلیکیشن شما اجرا می کند.
خواه تلاش برای پیمایش اسناد مرجع، تلاش برای یافتن روش یا گزینه مناسب، تطبیق برخی از کدهای موجود، یا اشکال زدایی برنامه Tkinter شما، در مواقعی مفید خواهد بود که بفهمید دستورات زیربنایی Tcl/Tk چگونه هستند.
برای نشان دادن، در اینجا معادل Tcl/Tk قسمت اصلی اسکریپت Tkinter در بالا آمده است.
ttk::قاب .فاش کردن -لایه گذاری 10 توری .فاش کردن توری [ttk::برچسب .فاش کردن.lbl -متن "سلام دنیا!"] -ستون 0 -ردیف 0 توری [ttk::دکمه .فاش کردن.btn -متن "ترک" -فرمان "از بین رفتن ."] -ستون 1 -ردیف 0
نحو Tcl شبیه به بسیاری از زبان های پوسته است، جایی که اولین کلمه فرمانی است که باید اجرا شود، با آرگومان هایی برای آن دستور به دنبال آن، که با فاصله از هم جدا شده اند. بدون وارد شدن به جزئیات زیاد، به موارد زیر توجه کنید:
- دستورات مورد استفاده برای ایجاد ویجت ها (مانند ttk::frame) با کلاس های ویجت در Tkinter مطابقت دارد.
- گزینه های ویجت Tcl (مانن د-text) با آرگومان های کلیدواژه در Tkinter مطابقت دارد.
- ابزارک ها با یک نام مسیر در Tcl (مانند . frm. btn) ارجاع داده می شوند، در حالی که Tkinter از نام ها استفاده نمی کند بلکه از ارجاعات شی استفاده می کند.
- مکان یک ویجت در سلسله مراتب ویجت در نام مسیر (سلسله مراتبی) آن کدگذاری می شود که از یک .(نقطه) به عنوان جداکننده مسیر. نام مسیر برای پنجره ریشه فقط است.(نقطه). در Tkinter، سلسله مراتب نه با نام مسیر، بلکه با تعیین ویجت والد هنگام ایجاد هر ویجت فرزند تعریف می شود.
- عملیاتی که به عنوان دستورات جداگانه در Tcl اجرا می شوند (مانند شبکه یا تخریب) به عنوان متدهایی در اشیاء ویجت Tkinter نشان داده می شوند. همانطور که به زودی خواهید دید، در مواقع دیگر Tcl از فراخوانی هایی که به نظر می رسد روشی بر روی اشیاء ویجت است استفاده می کند، که با دقت بیشتری آنچه را که در Tkinter استفاده می شود منعکس می کند.
چطور می تونم…؟چه گزینه ای…؟
اگر مطمئن نیستید که چگونه کاری را در Tkinter انجام دهید، و نمی توانید بلافاصله آن را در مستندات آموزشی یا مرجعی که استفاده می کنید بیابید، چند استراتژی وجود دارد که می تواند مفید باشد.
ابتدا، به یاد داشته باشید که جزئیات نحوه عملکرد ویجت های فردی ممکن است در نسخه های مختلف Tkinter و Tcl/Tk متفاوت باشد. اگر در حال جستجوی اسناد هستید، مطمئن شوید که با نسخه های پایتون و Tcl/Tk نصب شده بر روی سیستم شما مطابقت دارد.
هنگام جستجوی نحوه استفاده از یک API، دانستن نام دقیق کلاس، گزینه یا روشی که استفاده می کنید کمک می کند. درون نگری، چه در یک پوسته پایتون تعاملی یا با print() می تواند به شما در شناسایی آنچه نیاز دارید کمک کند.
برای یافتن گزینه های پیکربندی موجود در هر ویجت، متد configure() آن را فراخوانی کنید، که یک فرهنگ لغت حاوی اطلاعات مختلفی درباره هر شی، از جمله مقادیر پیش فرض و فعلی آن را برمی گرداند. از keys() برای دریافت فقط نام هر گزینه استفاده کنید.
btn = ttk.دکمه(فاش کردن, . ) چاپ(btn.پیکربندی کنید().کلیدها())
از آنجایی که اکثر ویجت ها گزینه های پیکربندی مشترک زیادی دارند، می توان فهمید که کدام یک از کلاس های ویجت خاص هستند. مقایسه لیست گزینه ها با یک ویجت ساده تر، مانند یک قاب، یکی از راه های انجام این کار است.
چاپ(تنظیم(btn.پیکربندی کنید().کلیدها()) - تنظیم(فاش کردن.پیکربندی کنید().کلیدها()))
به طور مشابه، می توانید روش های موجود برای یک شی ویجت را با استفاده از تابع dir() استاندارد بیابید. اگر آن را امتحان کنید، خواهید دید که بیش از 200 روش متداول ویجت وجود دارد، بنابراین دوباره شناسایی آنهایی که مختص یک کلاس ویجت هستند مفید است.
چاپ(کارگردان(btn)) چاپ(تنظیم(کارگردان(btn)) - تنظیم(کارگردان(فاش کردن)))
پیمایش در راهنمای مرجع Tcl/Tk¶
همانطور که اشاره شد، کتابچه راهنمای رسمی مرجع دستورات Tk (صفحات مرد) اغلب دقیق ترین توصیف از کارهایی است که عملیات خاص روی ویجت ها انجام می شود. حتی زمانی که نام گزینه یا روش مورد نیاز خود را می دانید، ممکن است هنوز چند مکان برای جستجو داشته باشید.
در حالی که تمام عملیات در Tkinter به عنوان فراخوانی متد بر روی اشیاء ویجت اجرا می شوند، مشاهده کرده اید که بسیاری از عملیات Tcl/Tk به عنوان دستوراتی ظاهر می شوند که نام مسیر ویجت را به عنوان پارامتر اول خود می گیرند و به دنبال آن پارامترهای اختیاری، به عنوان مثال.
از بین رفتن . توری .فاش کردن.btn -ستون 0 -ردیف 0
با این حال، برخی دیگر بیشتر شبیه به روش هایی هستند که روی یک شی ویجت خوانده می شوند (در واقع، وقتی یک ویجت را در Tcl/Tk ایجاد می کنید، یک دستور Tcl با نام مسیر ویجت ایجاد می کند که اولین پارامتر آن فرمان نام است. روشی برای فراخوانی).
.فاش کردن.btn استناد کردن .فاش کردن.lbl پیکربندی کنید -متن "خداحافظ"
در مستندات مرجع رسمی Tcl/Tk، بیشتر عملیاتی را خواهید یافت که شبیه فراخوانی متد در صفحه man برای یک ویجت خاص هستند (به عنوان مثال، متد invoke() را در صفحه مرد ttk::button پیدا خواهید کرد. در حالی که توابعی که یک ویجت را به عنوان پارامتر در نظر می گیرند، اغلب صفحه شخصی خود را دارند (به عنوان مثال، شبکه).
گزینه ها و روش های متداول زیادی را در گزینه ها یا ttk::widget man pages پیدا خواهید کرد، در حالی که بقیه در صفحه man برای یک کلاس ویجت خاص یافت می شوند.
همچنین خواهید فهمید که بسیاری از روش های tkinter دارای نام های ترکیبی هستند ، به عنوان مثال ، winfo_x () ، winfo_height () ، winfo_viewable (). برای همه این موارد در صفحه Winfo Man مستنداتی پیدا کرده اید.
تا حدودی گیج کننده ، در تمام ویجت های Tkinter نیز روش هایی وجود دارد که در واقع روی ویجت کار نمی کنند ، اما مستقل از هر ویجت در یک محدوده جهانی فعالیت می کنند. نمونه ها روش هایی برای دسترسی به کلیپ بورد یا زنگ سیستم هستند.(اتفاق می افتد که آنها به عنوان روش هایی در کلاس ویجت پایه اجرا می شوند که همه ویجت های tkinter از آن به ارث می برند).
مدل موضوعی
Python و TCL/TK مدل های نخ بسیار متفاوتی دارند که Tkinter سعی در پل دارد. اگر از موضوعات استفاده می کنید ، ممکن است لازم باشد از این امر آگاه باشید.
یک مترجم پایتون ممکن است موضوعات زیادی در ارتباط با آن داشته باشد. در TCL می توان چندین موضوع را ایجاد کرد ، اما هر موضوع دارای یک نمونه مترجم TCL جداگانه در ارتباط با آن است. موضوعات همچنین می توانند بیش از یک نمونه مترجم ایجاد کنند ، اگرچه هر نمونه مترجم فقط توسط یک موضوع که آن را ایجاد کرده است می تواند استفاده شود.
هر شی TK ایجاد شده توسط Tkinter حاوی یک مترجم TCL است. همچنین پیگیری می کند که کدام موضوع آن مترجم را ایجاد کرده است. تماس با Tkinter را می توان از هر موضوع پایتون انجام داد. در داخل ، اگر یک تماس از نخ به غیر از موردی که شیء TK را ایجاد کرده است ، یک رویداد برای صف رویداد مترجم ارسال شود و هنگام اعدام ، نتیجه به موضوع Python فراخوانی بازگردانده می شود.
برنامه های TCL/TK به طور معمول رویداد محور هستند ، به این معنی که پس از اولیه سازی ، مترجم یک حلقه رویداد (یعنی tk. mainloop ()) را اجرا می کند و به وقایع پاسخ می دهد. از آنجا که تک رشته ای است ، دستگیرندگان رویداد باید به سرعت پاسخ دهند ، در غیر این صورت آنها وقایع دیگر را از پردازش مسدود می کنند. برای جلوگیری از این امر ، هر محاسبات طولانی مدت نباید در یک کنترل کننده رویداد اجرا شود ، بلکه با استفاده از تایمرها به قطعات کوچکتر شکسته می شود ، یا در یک موضوع دیگر اجرا می شود. این متفاوت از بسیاری از ابزارهای GUI است که در آن GUI در یک موضوع کاملاً جداگانه از کلیه کد برنامه ها از جمله گیرنده های رویداد اجرا می شود.
اگر مترجم TCL حلقه رویداد و رویدادهای پردازش را اجرا نکند ، هرگونه تماس tkinter از موضوعات دیگری غیر از آنچه که مترجم TCL را اجرا می کند ، شکست خواهد خورد.
تعدادی از موارد خاص وجود دارد:
- کتابخانه های TCL/TK می توانند ساخته شوند تا آنها آگاه نباشند. در این حالت ، Tkinter کتابخانه را از موضوع منشاء پایتون فراخوانی می کند ، حتی اگر این متفاوت از موضوعی باشد که مترجم TCL را ایجاد کرده است. یک قفل جهانی تضمین می کند که فقط یک تماس در یک زمان رخ می دهد.
- در حالی که Tkinter به شما امکان می دهد بیش از یک نمونه از یک شی TK (با مترجم خاص خود) ایجاد کنید ، تمام مترجمان که بخشی از یک موضوع هستند ، یک صف رویداد مشترک را به اشتراک می گذارند ، که سریع زشت می شود. در عمل ، بیش از یک نمونه از TK در یک زمان ایجاد نکنید. در غیر این صورت ، بهتر است آنها را در موضوعات جداگانه ایجاد کرده و اطمینان حاصل کنید که یک ساخت TCL/TK آگاه از موضوع را اجرا می کنید.
- مسدود کردن دستگیران رویداد تنها راه جلوگیری از بازگرداندن مفسر TCL از حلقه رویداد نیستند. حتی می توان چندین حلقه رویداد تو در تو را اجرا کرد یا حلقه رویداد را به طور کامل رها کرد. اگر در مورد رویدادها یا موضوعات کار سختی انجام می دهید ، از این امکانات آگاه باشید.
- چند توابع TKINTER را انتخاب می کند که در حال حاضر فقط در صورت فراخوانی از نخ که ایجاد مفسر TCL را ایجاد می کند ، کار می کنند.
مرجع مفید
تنظیم گزینه ها
گزینه ها مواردی مانند رنگ و عرض مرزی یک ویجت را کنترل می کنند. گزینه ها را می توان به سه روش تنظیم کرد:
در زمان ایجاد شی ، با استفاده از آرگومان های کلیدی
فرد = دکمه(خود, fg="قرمز", bg="آبی")
فارکس وکسب درامد...
ما را در سایت فارکس وکسب درامد دنبال می کنید
برچسب :
نویسنده : آرش اصل زاد
بازدید : <-PostHit->
تاريخ : دوشنبه
16 مرداد
1402 ساعت: 13:20