პროგრამირება პითონზე. ნაწილი V


პროგრამის გრაფიკული ინტერფეისი

პითონის შესავალი კურსი, როგორც წესი სინტაქსის, ობიექტების ძირითადი ტიპების(კლასების), ოპერატორების და სტანდარტული ბიბლიოთეკის ზოგიერთი მოდულის შესწავლას გულისხმობს. პითონის სტანდარტული ბიბლიოთეკის ერთ-ერთი ყველაზე გავრცელებული მოდულია tkinter , რომელიც საშუალებას იძლევა პროგრამას დაემატოს გრაფიკული საშუალებები, რომლებსაც ინფორმაციის შეყვანა და გამოყვანა გრაფიკულ რეჟიმში გადაყავს. გრაფიკული რეჟიმი გაცილებით თვალსაჩინოს ხდის ინფორმაციის გაცვლას პროგრამასთან, რის გამოც თანამედროვე პროგრამების უმრავლესობას ახლავს მომხმარებლის გრაფიკული ინტერფეისი, რომელიც ინგლისური აბრევიატურით GUI არის ცნობილი (Graphical User Interface). ჩვენ უკვე გვქონდა ლაპარაკი GUI-ის შესახებ ამ კურსის დასაწყისში, როდესაც პითონის IDLE განვილეთ. ეს პროგრა, რომლითაც მოსახერხებელია პითონზე პროგრამირების შესწავლა და რომელიც ამ კურსში გამოვიყენეთ tkinter-მოდულის საშუალებით შეიქმნა.

გრაფიკული ინტერფეისის შექმნის ერთ-ერთი ყველაზე გავრცელებულ საშუალებას წარმოადგენს Tk პროგრამული პაკეტი, (Tk GUI toolkit) რომელიც 1990 წლების დასაწყისში შეიქმნა. ეს პაკეტი აერთიანებს გრაფიკულ პროგრამებს, რომლებიც ცნობილია როგორც widget-ები. Tk - სტანდარტული widget-ების საშუალებით გაცილებით იოლია GUI შექმნა. შეიძლება ითქვას, რომ ეს widget-ები Tk კონსტრუქტორის ნაწილებია, რომელთა საშუალებით ხდება GUI-ის "აწყობა". ეს გრაფიკული "კონსტრუქტორი" ისეთი პოპულარული გახდა, რომ პითონში შეიქმნა მოდული, რომელც Tk- გამოყენების საშუალებას იძლევა. მოდულის სახელი tkinter, რომელიც პითონ-3 ში იხმარენა tk interface-ის შემოკლებას წარმოადგენს (პითონ-2 ში მოდულის სახელია Tkinter).

პითონის tkinter-მოდული აერთიანებს კლასებს, რომლებიც დაკავშირებულია გრაფიკულ widget-ებთან და რომლებიც პითონის პროგრამდან GUI-ის აგების საშუალებას იძლევა. გრაფიკული საშულებები შეიძლება გამოყენებული იქნას როგორც ინფორმაციის გამოყვანისთვის კომპუტერის ეკრანზე, ასევე ინფორმაციის შეყვანისთვის. tkinter-ში ჩართულია ასევე გრაგიკის შექმნის საშუალებები და პროგრამასთან ინტერაქტული ურთიერთობის საშუალებები, რაც რთული გრაფიკული პროგრამების (მათ შორის კომპუტერული თამაშების) შექმნის საშულებას იძლევა. კომპუტერული გრაფიკის მნიშვნელოვანი გამოყენება დაკავშირებულია ფიზიკური პროცესების ვიზუალიზაციასთან, რაც ხშირად ანიმაციის გამოყენებას გულისხმობს. პითონის tkinter ასეთი პროგრამების შექმნაც საშუალებასაც იძლევა.

პითონის tkinter-ის ყველა საშუალებების სრული აღწერა პროგრამირების საწყისი კურსის ერთ თავში რა თქმა უნდა შეუძლებელია. ამ ნაწილის ძირითად დანიშნულებას წარმოადგენს tkinter-ის ძირითადი widget-ების გაცნობა და მათი საშუალებით შედარებით მარტივი გრაფიკული ინტერფეისების აგება. ამ თავის ბოლოს ნაწილი ეთმობა Canvas - კლასის აღწერას, რომელიც tkinter-ის გამოყენებით გრაფიკული ობოექტების და გამოსახულებების აგების საშუალებას იძლევა.


პირველი მაგალითი GUI რომელიც კვადრატული განტოლების ამოხსნის პროგრამას დაემატება.
GUI საშუალებით უნდა მოხდეს ინფორმაციის შეყვაბა (განტოლების პარამეტრები) შედეგი უნდა დაიბეჭდოს ასევე გრაფიკულ ფანჯარაში.


ზოგიერთი განმარტება ?

პითონის tkinter-მოდულის განხილვის დაწყებამდე საჭიროა კომპუტერული გრაფიკის რამდენიმე ბაზური ცნებისა და განმარტების შემოყვანა. ამ თავში ვგულისხმობთ, რომ გრაფიკის გამოსახვა კომპუტერის ეკრანზე (მონიტორზე, დისპლეიზე) ხდება, შესაბამისად აუცილებელია დისპლეის პარამეტრების ცოდნა. კომპუტერის მონიტორს, როგორც წესი მართკუთხედის ფორმა აქვს და თამამედროვე კომპუტერებში(2010 წლის შემდგომ), ჰოროზონტალური და ვერტიკალური გვერდების ფარდობა შეადგენს 16:9. (წინა თაობის კომპუტერებში ეს ფარდობა იყო 4:3). კომპუტერის მონიტორის ზომად ხშირად მისი დაგონალის სიდიდე იხმარება, რომლებიც ხშირად მოყვანილია დიუმებში. თანამედროვე პერსონალურ კომპუტერების (ლაპტოპების, Laptop) მონიტორის ზომები 10 დიუმიდან იწყება და შეიძლენა 17 დიუმს აღემატებოდეს.

მონიტორის ერთ-ერთი მთავარი მახასიათებელია მისი გარჩევსუნარიანობა, რომელიც როგორც წესი იზომება პიქსელებში(pixel), რომელიც გრაფიკული გამოსახულების მინიმალურ ელემენტს წარმოადგენს. (სიტყვა pixel - სურათის (picture) და (element) სახელებს აერთიამებს). გრაფიკული ფანჯრების ზომები, რომლებიც tkinter-ის მიიღება , როგორც წესი ამ ერთეულებში იზომება. კომპუტერის მონიტორების გარჩევისუნარიანობა, როგორც წესი მითითებულია პიქსელებში (px). თანამედრონე კომპუტერების(ლაპტოპების) მონიტორის გარევისუნარიანობა შეადგენს 1020 px ან მეტს ჰორიზონრალური მიმართულებით და 768px ან მეტს ვერტიკალური მიმართულებით (1024 x 768). თვითოეულ pixel-თან დაკავშირებულია ასევე ფერი და ინტენსიობა. თუ რამდენი ფერი შეიძლება პქონდეს ერთი პიქსელს, განისაზღვრება მასზე გამოყოფილი ბიტების (ორობითი თანრიგების) რიცხვით bpp( bits per pixel). მაგალითად, თუ ფერზე გამოყოფილია 16 ბიტი, პიქსელის შეილება 216= 65536 ფერი ჰქომდეს, რაც მიიღება სამ ძირითადი ფერის (წითელი, ლურჯი, მწვანე) შერევით. ფერის და მის გამოყენების შესახებ უფრო დაწვრილებით ან თავის სხვა ნაწილში ვისაუბრებთ.


ერთი-ერთი მთავარი ცნება window
რომელსაც ხშირად კონტექსტში სხვადასხვა მნიშვნელობა აქვს, მაგრამ როგორც წესი აღმიშნავს მართკუთხედის ფორმის არეს, კომპუტერის ეკრანზე.

თქვენი top-level window საიდანაც იწყებთ ?
A window that exists independently on your screen. It will be decorated with the standard frame and controls for your system's desktop manager. You can move it around on your desktop. You can generally resize it, although your application can prevent this

coords
ფანჯარასთან დაკავშირებული კოორდინატთა სისტემა.
width x height ეს პარამეტრი განსაზღვრავს ფანჯრის ზონებს. როგორ უნდა გავიგოთ კომპუტერის ფანჯრის ზომები ?

დამატებითი განმარტებები:
frame
In Tkinter, the Frame widget is the basic unit of organization for complex layouts. A frame is a rectangular area that can contain other widgets.
child, parent
When any widget is created, a parent-child relationship is created. For example, if you place a text label inside a frame, the frame is the parent of the lab
Layout management
სად უნდა მითავსდეს ფანჯარა ?
ოთხი მიმართულება: ზევით-ქვევით (N, S), მარჯვნივ-მარცხნივ (E, W)
შესაბამისი კუთხეები: NE, NW, SE, SW
Later we will discuss the widgets, the building blocks of your GUI application. How do widgets get arranged in a window?
coords


Although there are three different “geometry managers” in Tkinter, the author strongly prefers the .grid() geometry manager for pretty much everything. This manager treats every window or frame as a table—a gridwork of rows and columns.

A cell is the area at the intersection of one row and one column.

The width of each column is the width of the widest cell in that column.

The height of each row is the height of the largest cell in that row.

For widgets that do not fill the entire cell, you can specify what happens to the extra space.
You can either leave the extra space outside the widget, or stretch the widget to fit it, in either the horizontal or vertical dimension.

You can combine multiple cells into one larger area, a process called spanning.

When you create a widget, it does not appear until you register it with a geometry manager. Hence, construction and placing of a widget is a two-step process
that goes something like this

5. Standard attributes

Before we look at the widgets, let's take a look at how some of their common attributes—such as

  • sizes,
  • colors
  • fonts

    Each widget has a set of options that affect its appearance and behavior—attributes such as fonts, colors, sizes, text labels, and such.

    You can specify options when calling the widget's constructor using keyword arguments such as text='PANIC!' or height=20.

    After you have created a widget, you can later change any option by using the widget's .config() method. You can retrieve the current setting of any option by
    using the widget's .cget() method. See Section 26, “Universal widget methods” for more on these methods.


    The relief style of a widget refers to certain simulated 3-D effects around the outside of the widget.
    Here is a screen shot of a row of buttons exhibiting all the possible relief styles:
    coords


    Bitmaps რას ნიშნავს ?

    For bitmap options in widgets, these bitmaps are guaranteed to be available:
    coords


    ამ კურსში განხილული widget-ები

    როგორც ავღნიშნეთ, ამ ნაწილის მიზანს პითონის სტანდარტული ბიბლიოთეკის tkinter-მოდულის ძირითადი widget-ების გაცნობა წარმოადგენს. ამ ნაწილში მოკლედ განვიხილავთ ძირითად widget-ებს და მათი გამოყენების მაგალითებს მოვიყვანთ. tkinter მოდულის widget-ების შესწავლას დავიწყებთ ორი კლასის label და message განხილვით, რომელთა ძირითად დანიშნულებას შეადგენს ინფორმაციის გამოყვანა გრაფიკულ ფანჯარაში.

    tkinter-მოდულში არსებობს გრაფიკული ინტერფეისიდან პითონის პროგრამის მართვის საშუალებები. მართვის განხორციელება შეიძლება გრაფიკული ღილაკით, რომელიც სპეციალური widget-ის საშუალებით იქმნება და რომლის სახელია Button (ღილაკი). მასზე ზემოქმედება იწვევს პროგრამის მართვის გადაცემას მომხმარებლის მიერ განსაზღვრულ პითონის ფუნქციაზე. გრაფიკულ ღილაკზე ზემოქმედება გულისხმობს კომპუტერის მაუსის კურსორის ღილაკის(Button) გრაფიკულ ფანჯარაში მოთავსებას და მაუსის დაჭერას. ხშირად ამ widget-თან ერთად განიხილება Checkbutton და Radiobutton კლასები, რომლებიც ინფორმაციის გრაფიკული არჩევის საშუალებას იძლევა.

    პროგრამასთან ინფორმაციის გაცლისთვის საშუალებები tkinter-ში არ ამოიწურება მხოლოდ არჩევით, რომელიც გრაფიკული საშუალებით ხდება და გულისხმობს როგორც ტექსტური ტიპის ცვლადების (სტრინგების) ასევე რიცხვითი ტიპის ობიექტების შეყვანას. tkinter-ში ინფორმაციის გრაფიკული შეყვანისა და გამოყვანის სხვადასხვა საშუალებები არსებობს, რომლებიც დაკავშირებულია entry, listbox, spinbox, optionMenu, scale და text კლასების გამოყენებასთან. ზოგიერთ მათგანთან ხშირად იხმარება scrollbar კლასი, რომელიც გრაფიკულ ფანჯარაში მოძრაობის საშუალებას იძლევა.

    გრაფიკულ ინტერფეისებს შორის ფართოდ არის გავრცელებული მენიუ-ინტერფეისი, რომელთანაც დაკავშირებულია პროგრამის სხვადასხვა ფუნქციები და შესაძლებლობები. სიტყვა მენიუ (menu), რომელიც ფრანგულიდან შემოვიდა და ბევრ ენაში დამკვიდრდა, რესტორნის კერძების ჩამონათვალს ნიშნავს. რესტორნის სტუმარს (მომხმარებელს) მისთვის სასურველ კერძის არჩევა მენიუს საშუალებით შეუძლია. კომპუტერულ პროგრამირებაში მენიუს მსგავსი დანიშნულება აქვს. მასში მითითებულია (ჩამოთვლილია) კომპუტერული პროგრამის ფუნქციები, რომელიც მომხმარებელმა შეიძლება აირჩიოს და გამოყენოს. tkinter-ში არსებობს menu-კლასის widget, რომელიც პროგრამული მენიუს შექმნისთვის იხმარება. როგორც წესი მენიუ რთული და მულტი-ფუნქციური პროგრამის ნაწილია, რომლის შექმნას პროგრამირების მაღალი დონე სჭირდება, რაც აღემატება შესავალ კურსში გათვალისწინებულ დონეს. ამის გამო menu კლასის widget-ს მხოლოდ ძალიან მოკლედ განვიხილავთ.

    ამ ნაწილის ბოლოს განვიხილავთ Canvas-კლასის widget-ს, რომელიც გრაფიკული გამოსახულებების შექმნის საშუალებას იძლევა. ამ widger-ს მულტი-ფუნქციური დანიშნულენა აქვს და მის საფუძველზე შესაძლებელია რთული გრაფიკული პროგამების შექმნა. მოყვანილ მოკლე სკრიპტებში მოცემული იქნება ამ კლასის გამოყენების მარტივი მაგალითები, მათ შორის ფიზიკურ პროცესების ანიმაციის მარტივი პროგრამები.

    პითონის tkinter-ის widget-ებით შექმნილ გრაფიკული ობიექტებს იერარქიული სტრუქტურა აქვთ, რაც გულისხმობს, რომ ზედა დონის (მშობელი) გრაფიკულ გამოსახულებებთან დაკავშირებულია ქვედა დონის (შვილობილ) გრაფიკულ ობიექტები. შვილობილი widget-ების მშობელ widget-ში განლაგება ხორცილედება tkinter-ის მეთოდებით, რომლებსაც ხშირად გეომეტრიულ მენეჯერებს უწოდებენ. ქვევით მოყვანილ მაგალითებში გამოყენებულია ორ მეთოდი grid და pack, რომლებსაც მოკლედ განვიხილავთ.


    ზოგიერთი დამხმარე კლასის და binding-ების აღწერა ?


    ინფორმაციის გამოყვანა: Label, Message

    გრაფიკული widget-ების განხილვას დავიწყებთ, tkinter-ის ორი კლასით Label და Message, რომელთა დანიშნულებას წარმოადგენს ინფორმაციის გამოყვანა გრაფიკულ ფანჯარაში. ამ widget-ებს ანალოგიური დანიშნულება აქვთ, ამიტომ მათი გამოყენებაც დიდად არ განსხვავდება ერთმანეთისაგან. რადგან პროგრამირების შესწავლა თითქმის ყოველთვის იწყება Hello World ! მოკლე ფრაზის დაბეჭდვით, ამ ტრადიციის შესაბამისად tkinter-ის widget-ების შესწავლას ამ ფრაზის გრაფიკულ განჯარაში გამოყვანით დავიწყებთ. შესაბამის პითონის სკრიპტი მოყვანილია ქვევით:


    from tkinter import *
    w1=Tk()
    L1= Label(w1, text=" Hellow World! ", font=("Sylfaen", 50), bg='white', fg='red', padx=50, pady=20 )
    L1.pack()
    mainloop()

    მოყვანილი მაგალითის პირველ ხაზზე ხდება პითონის სტანდარტული ბიბლიოთეკის tkinter-მოდულის ჩართვა (იმპორტირება) პროგრამაში. შემდეგ ხაზზე იქმნება ახალი ობიექტი (w1), რომელიც tkinter.Tk კლასის ობიექტია და მოყვანილი მაგალითში ძირითად (მშობელ, ძირეულ) გრაფიკულ ობიექტს წარმოადგენს. tkinter-ზე არსებულ ლიტერატურაში ამ ობიექტს ხშირად აღნიშნავენ როგორც root ან master, ჩვენ კი გამოვიყენებთ აღნიშვნას w1, რაც მიუთითებს რომ მას პირველი გრაფიკული ფანჯარა (w1) შეესაბამება. მომდევნო ხაზზე იქმნება Label კლასის ობიექტი L1, რომლის ინიციალიზაციის (განსაზღვრის) დროს შესაძლებელია 20-ზე მეტი პარამეტრის გამოყენება. მოყვანილ მაგალითში, L1-ობიექტის ინიციალიზაცია ხდება 7 პარამეტრით, ხოლო დანარჩენი პარამეტრები საწყის (default) მნიშვნელობებს ინარჩუნებენ. ჩვენ მაგალითში პირველი პარამეტრი(w1) აღნიშნავს ძირეულ გრაფიკულ ობიექტს, რომლის მიმართ L1-შვილობილ ობიექტს წარმოადგენს. შემდეგი პარამეტრი (text) არის ტექსტური ცვლადი (სტრინგი) რომელიც ამ widget-ის გრაფიკულ ფანჯარაში იქნება გამოსახული. მომდევნო პარამეტრი(font) წარმოაგენს პითონის ტუპლის ტიპის ობიეტს, რომელიც განსაზღვრავს ამ widget-ში გამოყენებულ ფონტს, მის ზომას და სტილს. მაგალიტშო გამოყენებულია Sylfaen ფონტი, ზომით 50. მესამე ობიექტი ფონტის განმსაზღვრავ ტუპლში მითითებული არ არის, რაც ნიშნავს, რომ მისი საწყისი მნიშნელობა იქნება გამოყენებული. ყურადღება მიაქციეთ, რომ, ფონტების სია სხვადასხვა კომპუტერისთვის განსახვავებული შეიძლება იყოს, თუმცა tkinter-ში განსაზღვული რამდენიმე ფონტი, რომელთა გამოყენება კომპუტერში არსებულ (ინსტალირეულ) ფონტებზე დამოკიდებული არ არის. (ეს ფონტებია ). ორი შემდეგი პარამეტრი bg და fg დაკავშირებული L1 გრაფიკული ობიექტის ფერთან. პირველი (bg) განსაზღვრავს L1-გრაფიკული ფანჯრის ფონის ფერს, რაც ჩვენ მაგალითში განსაზღვრულია როგორც თეთრი(white), ხოლო პარამეტრი fg განსაზღვრავს განთავსებული ტექსტის ფერს, ჩვენ შემთხვევაში წითელს(red). პარამეტრები padx და pady განსაზღვრავენ ტექტის განლაგებას L1-ფანჯარაში. პირველი მიუთითებს ტექსტის დაშორებაზე ფანჯრის კიდეებიდან პორიზონტალური მიმართულებით, ხოლო მეორე ვერტიკალური მიმართულებით. Label კლასის პარამეტრების სრული სია ამ პარაგრაფის ბოლოს არის მოყვანილი.

    L1 - ობიექტის განთავსებას მშობელ გრაფიკულ გამოსახულებაში (ამ შემთხვევაში w1-ში) განსაზღვრავს მეთოდი pack, რომელსაც, როგორც უკვე ავღნიშნეთ ხშირად გეომეტრიულ მენეჯერს უწოდებენ. მოყვანილ პროგრამაში (სკრიპტში) ეს მეთოდი გამოყენებულია პარამეტრების მითირების გარეშე, რაც ნიშნავს, რომ მეთოდი პარემეტერების საწყისი (default) მნიშვნელობებს გამოიყენებს. პროგრამის ბოლო ხაზზე ხდება tkinter-ის ფუნქციის (მეთოდის ?) mainloop გამოყენება. ამ ფუნქციის საშუალებით სრულდება პროგრამული ციკლი, რომელსაც გრაფიკული widget-ები გადაყავს რეჟიმში, როდესაც tkinter-პროგრამა მხოლოდ გარკვეულ შემთხვევზე (event) რეაგირებს. tkinter-ის ეს საშუალებები შემდგომში იქნება აღწრერილი. ჩვენ პირველ მაგალითში ასეთი რეაგირება გათვალისწინებული არ არის და მოყვანილი პროგრამიდან გამოსვლა (პროგრამის დასრეულება) შესაძლებელია მხოლოს გრაფუკული ფანჯრის დახურვით. პითონის სკრიპტის შესრულების შედეგად მიღებულ გრაფიკული ფანჯარა მოყვანილია შემდეგ სურათზე.

    messsage_1
    სურათი ??

    Label-კლასის widget-ებში შესაძლებელია ასევე გრაფიკული გამოსახულების(გრაფიკული ფაილის) ჩართვა, თუ მისი ფორმატია GIF. გრაფიკული ობიექტის და ტექსტის განლაგება Label-ტიპის ერთ ობიექტში არ შეიძლება, ამიტომ ამ ტიპის widget-ებით გამოსახულების და ტექსტის ერთ-ფანჯარაში განლაგება გულისხმობს ორი სხვადასვა ობიექტის შექმნას და შემდეგ მათ განლაგებას ერთსა და იმავე მშობელ გრაფიკულ ობიექტში. ქვემოთ მოყვანილი მაგალითში განსაზღვრულია Label-კლასის ორი ობიქტი L1 და L2. პირველი ობიექტი პირველი სკრიპტის შესაბამისი ობიექტის ანალოგიურია, ხოლო მეორე L2-ობიექტში ხდება გრაგიკული გამოსახულების ჩასმა პარამეტრ image-ის საშუალებით. ეს გრაფიკული გამოსახულება განსაზღვრულია tkinter-ის კლასის PhotoImage საშუალებით. რომლის პარამეტრია GIF-ფორმატის მქონე გრაფიკული ფაილი. L1 და L2 ობიექტის მშობელ(ძირეულ) ფანჯარაში განლაგება ხდება pack-მეთოდით. ამჯერად ამ მეთოდის პარამეტრი side მიუთითებს, რომ L1 და L2 ობიექტები მშობელი გრაფიკული ფანჯრის მარჯვენა(right) და მარცხენა(left) ნაწილებს დაიკავებენ. სკრიპტის შესრულების შედეგად მიღებული ფანჯარა ნაჩვენებია მომდევნო სურათზე.


    from tkinter import *
    w1=Tk()
    Photo1=PhotoImage(file="C:\\Users\\Rezo\\Desktop\\IOM_2\\IOM_Book\\web\\py5\\image\\World_100px.gif")
    L1= Label(w1, text=" Hellow World! ", font=("Sylfaen", 50), bg='white', fg='red', padx=50, pady=20 )
    L2 = Label(w1, image=Photo1, bg='white', height=130, padx=50, pady=20 )
    L1.pack(side="right")
    L2.pack(side="left")
    mainloop()

    messsage_1
    სურათი ??

    ტექსტური შეტყობინების რაფიკულ ფანჯარაში გამოყვანა შესაძლებელია ასევე Message კლასის საშუალებით. ამ widget-ის გამოყენებისთვის საკმარია პირველ სკრიპტსი L1 ობიქტი Message კლასის ობიექტად განვსაზრვროთ, როგორც ეს ქვევით არის ნაჩვენები:


    L1 = Message(w1, aspect=500, text="gamarjoba msoflio!", font=("LitNusx", 50), bg='white', fg='red', padx=50, pady=20 )

    Message ტიპის widget-ის ინიციალიზაცია იმავე პარამეტრებით ხდება, განსხვავებას წარმოადგენს მხოლოდ პარამეტრი aspect, რომელიც Label-კლასში არ არის განსაზღვრული. მისი მნიშვნელობა მოუთითებს გრაფიკული ფანჯრის სიგრძისა და სიმაღლის ფარდობას პროცენტებში. ჩვენ შემხვევაში მნიშვნელობა 500 მიუთითებს, რომ სიგრძე 5-ჯერ აღემატებს სიმაღლეს. ამ პარამეტრის საწყისი მნიშვნელობაა 150, რაც ვერ უზრუნველყოფს გრაფიკულ ფანჯარაში მითითებული ტექსტის ერთ ხაზზე გამოყვანას. ამ პარამეტრის არსებობა მიანიშნებს, რომ Message-ტიპის ობიექტში მართკუთხა ფანჯარაში მხოლოდ სიგრძისა(width) მითითება შეიძლება, ხოლი სიმაღლე (height), სიგრძისა და ფარდობის(aspect) პარამეტრით განისაზღვრება. ამ ობიექტში გამოყებულია ქართული ფონტი LitNusx. განსხვავება Label და Message კლასების widget-ს შორის ამით არ ამოიწურება. მაგალითად, გრაფიკული გამოსახულების ჩასმა შესაძლებლია, მხოლოდ Label- კლასში. ქვევით მოყვანილი სურათზე გამოსახული ფანჯარა Message-ტიპის L1 ობიექტს შეესაბამება.

    messsage_2
    სურათი ???

    widget-ების პარამეტრები

    tkinter-ის პროგრამაში, როგორც მოყვანილ მაგალითებში ვნახეთ, widget-ების განსაზღვრა პარამეტრების საშუალებით ხდება. widget-ის დანიშნულებიდან გამომდინარე პარამეტრების რიცხვი და მნიშვნელობა შეიძლება სხვადა იყოს, თუმცა გარკვეული ტიპის პარამეტრები საერთოა. მაგალითად Message-ტიპის ობიექტების განსაზღვრა(ინიციალიზაცია) 21 პარამეტრით შეიძლება, ხოლო Label-ტიპის ობიექტების 30 პარამეტრით. ამ პარამეტრებში 20 საეროა. ქვევი მოყვანილია საერთო პარამეტერები:

    widget-ების პარამეტრები

    ['anchor', 'background', 'bd', 'bg', 'borderwidth', 'cursor', 'fg', 'font', 'foreground', 'highlightbackground', 'highlightcolor', 'highlightthickness', 'justify', 'padx', 'pady', 'relief', 'takefocus', 'text', 'textvariable', 'width]
  • anchor - განსაზღვრავს ტექსტის განლაგებას widget-ის შესაბანის გრაფიკული ფანჯარაში. ტექსტი შეიძლება განლაგდეს 9 ადგილზე (3 ჰორიზონტალური და 3 ვერტიკალური პოზიცია). ცენტრალური პოზიცია რომელიც საწყის (default) პოზიციას წარმოდგენს აღინიშნება როგორც CENTER, დანარჩენი 8 პოზოცია აღიმიშნემა როგორც N(ჩრდილოეთი), NE(ჩრდილო-აღმოსავლეთი), E(აღმოსავლეთი), SE(სამხრეთ-აღმოსავლეთი) S(სამხრეთი), SW(სამხრეთ-დასავლეთი), W (დასავლეთი), NW(ჩრდილო-დასავლეთი).
  • background (bg)
    განსაზღვრავს widget-ის შესაბანის გრაფიკული ფანჯრის ფონის ფერს.
  • bd - იგივეა რაც პარამეტრი borderwidth. წარმოადგენს მის შემოკლებულ ჩაწერას.
  • bg - იგივეა რაც პარამეტრი background. წარმოადგენს მის შემოკლებულ ჩაწერას.
  • borderwidth
  • cursor
  • fg - იგივეა რაც პარამეტრი background. წარმოადგენს მის შემოკლებულ ჩაწერას.
  • font
    ამ პარამეტრით ხდება ფონტის მითითება, რომელიც გამოყენებული იქნება გრაგიკულ ფანჯარაში.
  • foreground - განსაზღვრავს widget-ის შესაბანის გრაფიკული ფანჯრის ფონის ფერს.
  • highlightbackground - გაუგებარია
  • highlightcolor
  • highlightthickness
  • justify Defines how to align multiple lines of text. Use LEFT, RIGHT, or CENTER. Note that to position the text inside the widget, use the anchor option. Default is LEFT. (justify/Justify)
  • padx - განსაზღვრავს ტექსტის დაშორებას widet-ის გრაფიკული ფანჯრის კიდეებიდან პორიზონტალური მიმართულებით
  • pady - განსაზღვრავს ტექსტის დაშორებას widet-ის გრაფიკული ფანჯრის კიდეებიდან ვერტიკალური მიმართულებით
  • relief Border decoration. The default is FLAT. Other possible values are SUNKEN, RAISED, GROOVE, and RIDGE.
  • takefocus
  • text - განსაზღვრავს ტექსტს, რომელიც widet-ის გრაფიკული ფანჯარაში დაიბეჭდება.
  • textvariable Associates a Tkinter variable (usually a StringVar) with the message. If the variable is changed, the message text is updated. (textVariable/Variable)
  • width - განსაზღვრავს widet-ის გრაფიკული ფანჯრის სიგრძეს.


  • activebackground
  • activeforeground
  • bitmap
  • compound
  • disabledforeground
  • height
  • image
  • state
  • underline
  • wraplength

    tkinter-ის გეომეტრიული მენეჯერები

    გრაფიკული ინტერფეისის(გარემოს) შექმნა tkiner-ის საშუალებით რამდენიმე ნაბიჯისგან შედგება. პირველი ნაბიჯი ძირითად(ძირეულ, მშობელ) გრაფიკული ობიექტს განსაზღვრავს. ასეთი ობიექტის როლს ჩვენ პროგრამებში ასრულებს w1, რომელიც ძირითად გრაფიკულ ფანჯარას ქმნის. ამ ობიექტის(w1) თვისებები, მაგალითად გრაფიკული ფანჯრის ფონური ფერი, შესაძლებელია შეიცვალოს config მეთოდის გამოყენებით. მეორე ნაბიჯი გულისხმობს შესაბამისი widget-ების არჩევას და მათი საშუალებით გარკვეული თვისებების მქონე გრაფიკული ობიექტების შექმნას. გრაფიკული ობიექტების თვისებები (მაგალითად ზომა, ფერი, გამოყენებული ფონტი) განისაზღვრება პარამეტრების საშუალებით, თუმცა აქაც შესაძლებელია config-მეთოდის გამოყენება. ეს გრაფიკული ობიქტები, როფორც წესი შვილობილ ობიექტებს წარმოადგენენ. მესამე ნაბიჯი შვილობილი გრაფიკული ობიექტები ძირითად(მშობელ) გრაფიკული ობიექტზე განლაგებას გულისხმობს. თუ შვილობილი გრაფიკული ობიექტების რიცხვი ერთზე მეტია, ბუნებრივია საჭირო განისაზღვროს მათი განლაგება. გრაფიკული ობიექტების მშობელ ობიქტში განლაგებებისთვის tkinter-ის პროგრემში ძირითადათ ორი მეთოდი grid და pack გამოიყენება.

    პირველ tkinter-სკრიპტში, რომელიც ამ ნაწილში განვიხილეთ, საჭირო იყო მხოლოდ ერთი გრაფიკული ობიექტის განთავსება. ამისათვის გამოვიყენეთ pack-მეთოდი პარამეტრების გარეშე, ე.ი. პარამეტრების საწყისი(default) მნიშვნელობები გამოვიყენეთ. მომდევნო პროგრამაში ორი გრაფიკული ობიექტი განლაგება ასევე pack-მეთოდი მეთოდით მოხდა, მაგრამ ამჯერად ობიექტების მდებარეობს side-პარამეტრის საშულებით განისაზღვრა. პირველი ობიექტი ამ პარამეტრის საშუალებით მარჯვნივ(RIGHT) განთავსდა, მეორე ობიექტი კი მარცხნივ(LEFT). side-პარამეტრს 4 მნიშვნელობის მიღება შეუძლია, აღნიშნული მნიშვნელობების გარდა ეს მნიშვნელობება TOP (ზევით) და BOTTOM (ქვევით). ყურადღება მიაქციეთ, რომ ობიექტები BOTTOM, LEFT, RIGHT და TOP წარმოადგენენ trkinter-ში განსაზღვრულ სტრინგის ტიპის ცვლადებს, რომელთა მნიშნელობები შესაბამისად არის "bottom", "left", "right" და "top". პარამეტრის განსაზღვრისას შესაძლებელია ორივე ( მაგალითად BOTTOM ან "bottom" ) მნიშვნელობის ხმარება.
    განვიხილოთ მაგალითი, როდესაც შვილობილი Label-ტიპის გრაფიკული ობიექტების რიცხვი არის 4 . პითონის შესაბამისი სკრიპტი ქვევით არის მოყვანილი.


    from tkinter import *
    w1=Tk()
    w1.config(bg="white")

    BD, PX, PY =6, 5, 5
    R=[FLAT, SUNKEN, RAISED, GROOVE, RIDGE]
    L0=Label(w1, text=" obieqti 1 ", font=("LitNusx", 16, "bold"), relief=R[1], bd=BD, padx=PX, pady=PY , bg="Red", fg="Yellow")
    L1=Label(w1, text=" obieqti 2 ", font=("LitNusx", 20, "bold"), relief=R[2], bd=BD, padx=PX, pady=PY, bg="Yellow", fg="Red")
    L2=Label(w1, text=" obieqti 3 ", font=("LitNusx", 40, "bold"), relief=R[3], bd=BD, padx=PX, pady=PY, bg="Green", fg="White" )
    L3=Label(w1, text=" obieqti 4 ", font=("LitNusx", 24, "bold"), relief=R[4], bd=BD, padx=PX, pady=PY, bg="Blue", fg="white" )
    L0.pack()
    L1.pack()
    L2.pack()
    L3.pack()
    mainloop()

    მაგალითის შესაბამისი გრაფიკული გამოსახულება მოყვანილია სურათზე , საიდანაც სჩანს, რომ pack-მეთოდის გამოყენება პარამეტრების გარეშე იწვევს გრაფიკული ობიექტების ვერტიკალურ განლაგებას, მიმათულებით ზევიდან(TOP) ქვევით(BOTTOM). მოყვანილი გრაფიკული ობიექტები, ერთმანეთისგან ფერით, ფანჯრის რელიეფით (იხილე პარამეტრი relief) და ფონტის სიდიდით განსხვავდებიან. მიღებული გრაფიკული გამოსახულების პორიზონტალური ზომაა განისაზღვრები ყველაზე დიდი ობიექტის ზომით. მომდევნო სურათზე იმავე ობიექტებს ჰორიზომტალური განლაგება უკავიათ. ამ განლაგების მისაღებად ყოველი ობიექტის pack-მეთოდს დაემატა პარამეტრი side=LEFT.

    pack 1
    სურათი ???
    pack 2
    სურათი ???
    გრაფიკული ობიექტების განლაგების შეცვლა pack-მეთოდის პარამეტრებით შეიძლება. მომდევნო ორ სურათეზე ამის მაგალითია მოყვანილი. სურათი -ზე შენარუნებულია ვერტიკალური განლაგება, თუმცა პარამეტრ side-ის მნიშვნელობა BOTTOM მიანიშნებს, რომ ობიექტების განლაგება დაიწყება ქვევიდან (განლაგების მიმართულება იქმება ქვევიდან ზევით). პარამეტრი fill=X მიანიშნებს, რომ ობიექტი ჰორიზონტალური მიმართულებით(X) სივრცეს მთლიანად შეავსებს. ამ პარამეტრს შეუძლია ასევე მიიღოს მნიშვნელობა Y (სივრცის შევსება ვერტიკალური მიმართულებით) და BOTH (სივრცის შევსება ორივე მიმართულებით). ქვევით მოყვანილ მაგალითში ასევე გამოყენებულია პარამეტრები padx და pady - რაც მიანიშნებს იბიექტის დაშორებაზე მოსაზღვრე ან მშობელი გრაფიკული ობიექტიდან ჰორიზონტალური და ვერტიკალური მიმართულებით. პარამეტრი anchor - განსაზღვრავს მდებარეობას მშობელ ობიქტში (ობიექტის ნაწილში). ამ პარამეტრი შესაძლო მნიშვნელობები widget-ში არსებული anchor პარამეტრის მნიშვნელობების ანალოგიურია. პითონის სკრიპტის ნაწილი, რომლის მეშვეობით მიღებულია სურათი ?? მოყვანილია ქვევით.


    L0.pack(side=BOTTOM, fill=X)
    L1.pack(side=BOTTOM, fill=BOTH, padx=5)
    L2.pack(side=BOTTOM, pady=5)
    L3.pack(side=BOTTOM, anchor=W, padx=5, pady=5)

    შემდეგი სურათის მისაღებად პითონის სკრიპტის ქვევით მოყვანილი ნაწილი გამოვიყენეთ. ობიექტების პორიზონტალური განლაგება უზრუნველყოფილია pack-მეთოდის side-პარამეტრის მნიშვნელობით RIGHT, რაც ნიანიშნებს გრაფიკული ობიექტების განლაგების მიმართულებას მარჯვნიდან მარცხნისკენ.


    L0.pack(side=RIGHT, anchor=S, padx=5, pady=5)
    L1.pack(side=RIGHT, fill=BOTH, padx=5)
    L2.pack(side=RIGHT, pady=5)
    L3.pack(side=LEFT, anchor=N, padx=5, pady=5)

    pack-მეთოდის პარამეტრების რიცხვი მოყვანილი მაგალირებით არ ამოიწურება. პარამეტრების სრული სიის ნახვა შესაძლებელია ამ ნაწილის ბოლოს მოყვანილ tkinter-ის რესურსების გვერდებზე.

    pack 1 (b)
    სურათი ???
    pack 2 (b)
    სურათი ???

    გრაფიკული ობიექტების გეომეტრიული განლაგების განსაზღვრის მეორე მეთოდს წარმოადგენს grid-მეთოდი. როდესაც გრაფიკულ ფანჯარაში საჭიროა მრავალი ობიექტის განლაგება, უპირატესობას ამ მეთოდს ანიჭებენ. უნდა ავღნიშნოთ, რომ პითონის სკრიპტში არ შეიძლება pack და grid მეთოდების არევა ე.ი. tkinter-ის ერთ პროგრამაში დაშვებულია მხოლოდ ერთ-ერთი მათგანის გამოყენება. რა განსხვავებაა ამ მეთოდებს შორის ? grid-მეთოდი, როგორც სახელი მიუთითებს, ქმნის ორ-განზომილებიან (2D) მესერს, რომლის თვითოეული უჯრა განისაზღვრება პარამეტრებით column და row. პარამეტრების მნიშვნელობები მთელი დადებითი რიცხვებია. საწისი(default) მნიშვნელობები (b>colum=0,. row=0) შეესაბამება მარცხენა ზედა კუთხეში მდებარე უჯრას. აღსანიშნავია, რომ გრაფიკულ ობიექტს შეუძლია მესერის რამდენიმე უჯრის დაკავება. ეს ნიშნვს რომ grid-მეთოდით შესაძლებელია მესრის უჯრის შექმნა, რომელიც რამდენიმე "ერთეულოვან" უჯრას გააერთიანებს. ჰორიზონტალური მიმართულებით უჯრების გაერთიაება შესაძლებელია პარამეტრით columnspan, ხოლო ვერტიკალური მომართულებით rowspan. ამ პარამეტრების საწყისი(default) მნიშვნელობებია (columnspan=1, rowspan=1) მესრის ერთეულოვან უჯრას შეესაბამება. grid-უჯრის შიგნით გრაფიჯული ობიექტის განლაგება განისაზღვრება stick-პარამეტრით. აქ ვგულისხმობთ, რომ grid-მესრის გრაფიკული უჯრის ზომები აღებატება ობიექტის ზომებს. grid-ის გრაფიკული უჯრის ზომა თავის განისაზღვრება ყველაზე დიდი ზომის გრაფიკული ობიექტით. grid მეთოდის stick პატამეტრი pack-მეთოდის anchor-პარამეტრის ანალოგიურია და იგივე მნიშვნელობების მიღება შეუძლია. ქვევით მოყვანილია grid-მეთოდით გრაფიკული ობიექტების განლაგების ორი მაგალითი.


    L0.grid(padx=5, pady=5, sticky=W)
    L1.grid(column=1, row=0, padx=5, pady=5)
    L2.grid(column=0, row=1, padx=5, pady=5)
    L3.grid(column=1, row=1, padx=5, pady=5)

    პირველ მაგალიში 4 გრაფიკული ობიექტების განლაგენა ხდება რეგულარულ მესერზე, რომელიც grid-მეთოდი არის განსაზღვრული და შედგება ერთეულოვანი სიდიდის მქონე 2 უჯრისგან როგორც ჰორიზონტალური ასევე ვერტიკალური მიმართულებით. მეორე მაგალითში, რომელიც ქვევით არის მოყვანილი, მესერის პირველი უჯრის ზომა, რომელშიც ყველაზე დიდი ზომის გრაფიკული ობიექტის მოთავსებული, როგორც ჰორიზონტალური ასევე ვერტიკალური მიმართულებით შეადგენს 2-ერთეულს. მომდევნო სამი გრაფიკული ობიექტი, განლაგებულია ვერტიკალურად, რაც მესერის 2 უჯრას ( column=0, row=2) და (column=1, row=2) ცარიელს ტოვემს. მოყვანილ მაგალითებში გამოყებებულია padx და pady პარამეტრები, რომლებსაც grid-მეთოდში იგივე დანიშნულება აქვს, როგორც pack-მეთოდში.


    L2.grid(column=0. row=0, columnspan=2, rowspan=2, padx=5, pady=5, sticky=N)
    L0.grid(column=2, row=0, padx=5, pady=5, sticky=W)
    L1.grid(column=2. row=1, padx=5, pady=5, sticky=E)
    L3.grid(cplumn=2, row=2, padx=5, pady=5)

    მოყვანილი მაგლითების შესაბამისი გრაფიკული გამოსახულებები მოყვანილია სურათებზე

    gris 1
    სურათი ???
    grid 2
    სურათი ???

    Frame, LabelFrame

    პითონის tkinter-მოდულის widget-ის განხილვას ორი მსგავსი კლასის Frame და LabelFrame აღწერით გავაგრძელებთ. მათი საშუალებით ხდება გრაფიკული ობიექტის(ფანჯრის) შექმნა, რომელიც სხვა widget-თვის მშობელ გრაფიკულ გამოსახულებას წარმოადგენს. ამ ორ widget-ს მსგავსი პარამტრები აქვთ, რადგანავ განსხვავებას Frame და LabelFrame კლასებს შორის დიდი არ არის. LabelFrame - ტიპის ობიეტს Frame-ისგან განასხვავებს სახელი, რომელიც Frame-ტიპის ობიექტებში განსაზღვრული არ არის. ამ widget-ების განსაზღვრა შესაძლებელია შესაბამისად 18(Frame) და 24(Labelframe) პარამეტრით, რომელთა შორის დიდი ნაწილი უკვე განხილულ პარამეტრებს წარმოადგენს. ქვევით მოყვანილია LabelFrame-ის გამოყენების მაგალითი.

    .
    from tkinter import *
    w1=Tl()
    W,H, BColor = 600, 400, 'yellow'
    F = Frame(w1, width=W, height=H, bg=BColor)
    F.pack()
    BC, FC ="white", "red"
    BC1, FC1 = "white", "Blue"

    Lf1= LabelFrame(text=" LabelFrame 1 ", font=("Sylfaen",18), bg=BC, fg=FC, padx=5, pady=5)
    Lf1.pack(padx=10, pady=10)

    img1=PhotoImage(file="C:\\Users\\Rezo\\Desktop\\IOM_2\\IOM_Book\\web\\py5\\image\\Python_LOGO_200px.gif")
    L0=Label(Lf1, image=img1, bg=BC)
    L1=Label(Lf1, text=" programireba piTonze \n sawyisi kursi ", font=("LitNusx",22, "bold"), bg=BC, fg="Blue")
    L2=Label(Lf1, text=" მოდული tkinter ", font=("Sylfaen",18), bg=BC, fg="Blue")

    R1=400
    Wgs=[ "Button ", "Checkbutton", "ListBox ", "Frame ", "Entry ",
    "Label ", "LabelFrame ", "Menu ", "Message ", "Canvas ",
    "Radiobutton ", "OptionMenu ", "Scaler ", "Scrollbar ", "SpinBox ",
    "text " ]
    Wgs.sort()
    FS1=("Sylfaen",16)
    M1 = Message(Lf1, text=Wgs[0], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M2 = Message(Lf1, text=Wgs[1], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M3 = Message(Lf1, text=Wgs[2], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M4 = Message(Lf1, text=Wgs[3], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M5 = Message(Lf1, text=Wgs[4], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M6 = Message(Lf1, text=Wgs[5], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M7 = Message(Lf1, text=Wgs[6], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M8 = Message(Lf1, text=Wgs[7], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M9 = Message(Lf1, text=Wgs[8], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M10=Message(Lf1, text=Wgs[9], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M11=Message(Lf1, text=Wgs[10], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M12=Message(Lf1, text=Wgs[11], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M13=Message(Lf1, text=Wgs[12], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M14=Message(Lf1, text=Wgs[13], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M15=Message(Lf1, text=Wgs[14], aspect=R1, font=FS1, bg=BC1, fg=FC)
    M16=Message(Lf1, text=Wgs[15], aspect=R1, font=FS1, bg=BC1, fg=FC)

    L0.grid(row=0, column=0, rowspan=3, columnspan=2, ipadx=5, ipady=5)
    L1.grid(row=0, column=2, columnspan=2, padx=5, pady=5)
    L2.grid(row=1, column=2, columnspan=2, padx=5, pady=5)

    M1.grid(row=3, column=0, padx=5, pady=5)
    M2.grid(row=3, column=1, padx=5, pady=5)
    M3.grid(row=3, column=2, padx=5, pady=5)
    M4.grid(row=3, column=3, padx=5, pady=5)
    M5.grid(row=4, column=0, padx=5, pady=5)
    M6.grid(row=4, column=1, padx=5, pady=5)
    M7.grid(row=4, column=2, padx=5, pady=5)
    M8.grid(row=4, column=3, padx=5, pady=5)
    M9.grid( row=5, column=0, padx=5, pady=5)
    M10.grid(row=5, column=1, padx=5, pady=5)
    M11.grid(row=5, column=2, padx=5, pady=5)
    M12.grid(row=5, column=3, padx=5, pady=5)
    M13.grid(row=6, column=0, padx=5, pady=5)
    M14.grid(row=6, column=1, padx=5, pady=5)
    M15.grid(row=6, column=2, padx=5, pady=5)
    M16.grid(row=6, column=3, padx=5, pady=5)

    მოყვანილ მაგალითში LabelFrame ტიპის ობიექტი მშობელი ობიექტის როლს ასრულებს შვილობილი Label და Message ტიპის ობიექტებისთვის. შვილობილი Label-ტიპის ობიექტებიდან ერთი გამოსახულებას შეიცავს, ხოლო Message-ტიპის ობიექტებს tkinter-მოდულის widget-ების სახელები გრაფიკულ ფანჯარაში გამოყავს, სადაც მათი გეომეტრიული განლაგება განისაზღვება grid-მეთოდით. მიღებული გრაფიკული გამოსახულება მოყვანილია შემდეგ სურათზე.

    Frame_1
    სურათი ???


    Button

    აქამდე განხილული widget-ები ინფორმაციის გამოყვანასთან იყო დაკავშირებული. მათ არ გააჩნიათ თვისებები, რომ რეაგირება მოახდინონ რაიმე შემთხვევაზე. შემთხვევის (event) ქვეშ იგულისხმება რაიმე მოქმედება, მაგალითად კომპუტერის მაუსის მოძრაობა, მაუსის ღილაკის დაჭერას ან კლავიატურიდან გარკვეული სიმბოლოს შეყვანა. პითონის tkinter-ში შესაძლებელია ასეთი შემთხვევების განსაზღვრა და მათი დაკავშირება პროგრამის განსაზღვრულ ფუნქციასთან. შემთხვევის განხორციელება იწვევს mainloop ციკლში მართვის გადაცემას ამ ფუნქციაზე. შემთხვევებზე რეაგირება ინტერაქტული პროგრამების შექმნის (მაგალითად კომპუტერული თააშების) საშუალებას იძლევა.

    პითონის tkinter მოდულში ჩართულია Button კლასის widget, რომელიც გრაფიკული ღილაკის დაპროგრამების საშუალებას იძლევა. კომპუტერის მაუსის კურსორის გრაფიკული ღილაკის ფანჯარაში განლაგება და მაუსზე დაჭერა იწვევს მართვის გადაცემას წინასწარ განსაზღვრულ პითონის ფუნქციაზე. რომლის მითითება command პარამეტრის საშუალებით ხდება. Button კლასი შეიძლება განვიხილოთ როგორც Label-ის ანალოგიური კლასი, რომელსაც დამატებული აქვს შემთხვევაზე (მაუსის კლავიატურაზე დაჭერა) რეაგირების ფუნცია და რამდენიმე დამატებითი პარამეტრი. ქვემოთ მოყვანილია Button-ის გამოყენების მარტივი მაგალითი:


    from tkinter import *

    w1=Tk()
    w1.config(bg="LightYellow")

    ic=0
    ivar, tvar =IntVar(), StringVar()
    tvar.set(str(ic))
    ivar.set(ic)

    def callback():
            ic=ivar.get()
            ic +=1
            ivar.set(ic)
            s = str(ic)
            tvar.set(s)

    wl1=Label(w1, text=" Button widget ",
            font=("Sylfaen",20,"bold"), bd=1, bg='lightyellow', fg='red',relief='flat', padx=30, pady=5)
    wl2=Label(w1, text=" iTvlis mausze daWerebis ricxvs ",
            font=("LitNusx",20,"bold"), bd=1, bg='lightyellow', fg='black',relief='flat', padx=30, pady=5)
    wl3=Label(w1, textvariable=tvar,
            font=("LitNusx",20,"bold"), bd=4, bg='white', fg='red',relief='ridge', padx=30, pady=5, width=20)
    wb= Button(w1, text="Enter", font=("Sylfaen",12, "bold"), bd=10, bg='darkblue', fg='white',
            relief='groove', overrelief="sunken", padx=5, pady=5,command=callback)

    wl1.grid(padx=5, pady=5)
    wl2.grid(column=1, row=0, padx=5, pady=5)
    wl3.grid(column=1, row=1, padx=5, pady=5)
    wb.grid(column=0, row=1, padx=10, pady=5 )
    mainloop()

    პირველ ინტერაქტულ მაგალითში, რომელსაც მოყვანილი პროგრამას წარმოადგენს, გამოყენებულია ოთხი widget, რომელთგანაც სამი Label-ტიპის ობიექტია, ხოლო ერთი Button-ტიპის ობიექტი. ამ პროგრამაში გამოყენებულია tkinter-კლასები IntVar და StringVar, რომელთა საშუალებით ხდება იმ ცვლადების განსაზღვრა, რომლებიც widget-თან არის დაკავშირებული და mainloop-ციკლში იცვლებიან. მ მათი საშუალებით ხდება გრაფიკული ობიექტების მოდიფიკაცია. მათ შესახებ შემდეგ პარაგრაფში ვისაუბრებთ. მოყვანილ მაგალითში wl3-გრაფიკული ობიექტის განსაზღვრაში გამოვიყენებულია პარამეტრი textvariable, რომელიც განვსაზრცრეთ როგორც StringVar-ტიპის ობიექტი(tvar). მისი ცვლილება იწვევე wl3-გრაფიკული ობიექტის ავტომატურ განახლებას. განახლება ხდება Button-ტიპის ობიექტთან დაკავშირებული შემთხვევის საშუალებით. გრაფიკულ ღილაკზე ზემოქმედება (ე.ი. კომპუტერის მაუსის მის ფანჯარაში მოთავსება და მისი კლავიშის დაჭერა) იწვევს მართვის გადაცემას პითონის callback-ფუნქციაზე, რომელიც ჩვენს მიერ არის განსაზღვრული. ფუნქციას პითონის სინტაქსით დაშვებული ნებისმიერი სახელი შეიძლება ჰქონდეს. ჩვენ მაგალითში IntVar-ტიპის ობიექტი, რომელიც ამ ფუნქციაში ცვლადია, გამოყენებულია როგორც მთვლელი. მისი მნიშვნელობა tvar საშუალებით გადაევება Label ტიპის ობიექტს. გრაფიკულ ღილაკზე ყოველი ზემოქმედება, ცვლის მთვლელის მნიშვნელობას, რომელიც თავის მხრივ wl3-გრაფიკული ობიექტის გამოყვანილი სიდიდის ცვლილებას იწვევს. მომდევნო სურათზე მოყვანილი ორი გრაფიკული გამოსახულება, რომელიც ამ პროგრამასთან არის დაკავშირებული. მარცხენა გამოსახულებაში მაუსის კურსორი გრაფიკულ ღილაკის ფანჯარაშია მოთავსებული (ყურადღება მიაქვიეთ ამ გრაფიკული ობიექტი რელიეფის ცვლილებას, რომელიც განისაზღვრება პარამეტრით overrelief), ხოლო მეორე, მარჯვენა სურათზე, იგივე ფრაფიკული ობიექტი მაუსის კლავისაშე დაჭერის შემდეგ არის ნაჩვენები. გრაფიკულ ღილაკზე ყოველი ყოველი დაჭერის შემდეგ wl3 ობიექტში მოთაცსებული მთვლელის მნიშვნელობა ერთით იზრდება.

    button 1
    სურათი ???
    button 2
    სურათი ???

    საჭიროა ორი მაგალითის მოყვანა ? სკრიპტის მოყბანა


    tkinter-ის ცვლადების კლასები

    პითონის tkinter-მოდულში განსაზღვრულია კლასები BooleanVar, DoubleVar, IntVar და StringVar. როგორც წინა მაგალითში ვნახეთ, ამ ტიპის ობიექტების საშუალებით ხდება widget-ის გამახლება გარკვეული შემთვევების დროს. tkinter-მოდულში ეს კლასები გამოიყენება შესაბამისად ბულის, მცოცავი ფორმატის მქონე რიცხვის, მთელი რიცხვის და სტრინგის ტიპის ცვლადებთან სამუშაოდ. ამ ტიპის ობიექტებისთვის მნიშვნელობის განსაზღვრა ხდება set-მეთოდით, ხოლო get - მეთოდითც შესაძლებელია ამ მნიშვნელობის მიღება. ქვემოთ მოვანილია BooleanVar ტიპის ობიექტის განსაზთვრის მაგალითი. ყურადღება მიაქციეთ, რომ ამ ტიპის ობიექტების განსაზღვრა და მათთან მუშაობას შესაძლებელია tkinter-ის ძიროთადი Tk-კლასის ობიექტის განსაზღვრის შემდეგ.


    >>>from tkinter import *
    >>>w1=Tk()
    >>>xb=BooleanVar()
    >>>type(xb)
    < class 'tkinter.BooleanVar' >
    >>>print("xb value(default)=", xb.get())
    xb value(default)= 0
    >>>xb.set(True)
    >>>print("xb new value =", xb.get())
    xb new value = 1
           

    ანალოგიურად ხდება DoubleVar() DoubleVar(), IntVar(), StringVar() კლასების გამოიყენება. შემდეგ მაგალითში ნაჩვებებია ამ კლასის ობიექტების საწყისი მნიშვბელობები და ცვლადების ტიპები, რომელსაც get-მეთოდი აბრუნებს.


    >>>from tkinter import *
    >>>w1=Tk()
    >>> xd, xi, xs = DoubleVar(), IntVar(), StringVar()
    >>>print( type(xd), type(xi), type(xs))
    < class 'tkinter.DoubleVar' > < class 'tkinter.IntVar' > < class 'tkinter.StringVar' >
    >>>print("default values: xd={0:}, xi={1:}, xs={2:}".format(xd.get(), xi.get(), xs.get()))
    default values: xd=0.0, xi=0, xs=
    >>>print(" type(xd.get())={0:}, type(xi.get())={1:}, type(xs.get())={2:}".format(type(xd.get()), type(xi.get()), type(xs.get())))
    type(xd.get())= < class 'float' >, type(xi.get())= < class 'int' >, type(xs.get())= &kt class 'str' >

    Checkbutton, Radiobutton

    კომპუტერულ პროგრამებში ხშირად არის საჭირო გარკვეული სიმრავლიდან (მაგალითად მონაცემთა ბაზიდან) ინფორმაციის არჩევა. პითონის tkinter-პროგრამებში ინფორმაციის არჩევასთანთან რამდენიმე widget დაკავშირებული, მათ შორის Checkbutton და Radiobutton.

    Radiobutton ტიპის ობიექტის იმ შემთხვევაში გამოიყენება, როდესაც რამდენიმე შესაძლებლობიდან ასარჩევია მხოლოდ ერთი მნიშვნელობა. ამ ტიპის ობიექტის განსაზღვრისთვის გამოყენებული პარამეტრები ძირითადათ Button-კლასში არსებული პარამეტრების ანალოგიურია. ახალი პარამეტრებს შორის, რომლებიც Radiobutton-კლასში გამოიყენება, არის პარამეტრები value და variable. ერთ ჯგუფში გაერთიანებულ Radiobutton-ტიპის ობიექტებს variable-პარამეტრს იგივე მნიშვნელობა უნდა უნდა ჰქონდეს (ეს პარამეტრი განსაზღვრავს ჯგუფს), ხოლო value-პარამეტრი თვითოეული ობიექტისვის განსახვავებული (უნიკალური) უნდა იყოს. ქვევით მოყვანილია Radiobutton-ის გამონების მარტივი მაგალითი.


    from tkinter import *

    w1=Tk()
    Q = ["if a==b c=20.0", "def MyFunction:", "for i in range(10): ", "MyDict={'a'=1.2, 'b'=2.5, 'c'=4.9}" ]

    def sel():
            pass

    def ButtonFunction():
            w1.quit()

    v, v1, v2, v3, v4 = IntVar(), IntVar(), IntVar(), IntVar(), IntVar()
    f1=("LitNusx", 20)
    f2=("Sylfaen", 20)
    LText=" airCieT swori sintaqsuri Canaweri:"
    L0 = Label(w1, anchor=W, text=LText, font=f1, bg='white', width=40)
    BCol="LightYellow"
    WR, PX = 35, 2
    R1 = Radiobutton(w1, anchor=W, bg=BCol, text=Q[0], width=WR, variable=v, value=1, font=f2, padx=PX, command=sel)
    R2 = Radiobutton(w1, anchor=W, bg=BCol, text=Q[1], width=WR, variable=v, value=2, font=f2, padx=PX, command=sel)
    R3 = Radiobutton(w1, anchor=W, bg=BCol, text=Q[2], width=WR, variable=v, value=3, font=f2, padx=PX, command=sel)
    R4 = Radiobutton(w1, anchor=W, bg=BCol, text=Q[3], width=WR, variable=v, value=4, font=f2, padx=PX, command=sel)
    B0 = Button(w1, anchor=W, bg="PaleGreen", text="Enter", width=6, font=f2, padx=PX, command=ButtonFunction)
    L0.pack(anchor = W)
    R1.pack(anchor = W)
    R2.pack(anchor = W)
    R3.pack(anchor = W)
    R4.pack(anchor = W)
    B0.pack(anchor = W)
    w1.mainloop()

    w2=Tk()
    A=v.get()
    RR=3
    LText1=" \n Tqveni arCevani: {} \n".format(A)
    LText2=" \n swori debuleba: {} \n ".format(RR)
    L1 = Label(w2, anchor=W, text=LText1, font=f1, bg='white', width=40)
    L2 = Label(w2, anchor=W, text=LText2, font=f1, bg='white', width=40)
    L2.pack()
    L1.pack()

    მოყვანილი მაგალითი, როგორც მისი გრაფიკული გამოსახულებიდან სჩანს (იხილე მომდევნო სურათი) წარმოადგენს მარტივ ტესტ-პროგრამას, სადაც Radiobutton- ობიქტების საშუალებით წარმოდგენილია პითონის ოთხი დებულება, რომელთაგან შეირჩეს ერთი სწორი სინტაქსურ ჩანაწერი. არჩევა ხდება გრაფიკულ ობიექტთან დაკავშირებული წრიული არის მონიშვნით კომპუტერის მაუსის საშუალებით. ყურადღება მიაქციეთ, რომ ამ widget-ით მხოლოდ ერთი დებულების მონიშვნა შეიძლება. შერჩევის წინ ერთი ჯგუფში გაერთიანებული Radiobutton-ის ტიპის ობიექტების მნიშვნელობა (ჯგუფის მნიშვნელობა) განსაზღვრულია ერთიანდებიან variable-პარამეტრის მნიშვნელობით, IntVar-ტიპის v-ცვლადია. დებულების არჩევის შემდეგ v-ცვლადი იღებს შერეული გრაფიკული ობიექტის value-პარამეტრით განსაზღვრულ მნიშვნელობას. მოყვანილ მაგალითში არჩევა გულისხმობს შესაბამისი Radiobutton ობიექტის მონიშვნას და შემდეგ Button-ით შეყვანას (ეს ობიექტი აღნიშნულია სახელით Enter).

    RadioButton RadioButton
    სურათი სურათი

    მომდევნო სურათი ?? მიღებულია მსგავსი სკრიპტის შესრულების შედეგად. წინა მაგალითისგან განსხვავევით აქ დამატებულია ერთი Label-კლასის ობიექტი, რომელშიც ჩასმულია პითონის გრაფიკული ლოგო. კიდევ ერთ განსხვავება დაკავშირებულია grid - გეომეტრიული მენეჯერების გამოყენებასთან. მოყვანილ მაგალითებზე დაყრდნიბით ამ გამოსახულების შესაბამის სკრიპტის შედგენა რთულუ არ უნდა იყოს და კარგ სავარჯიშოს წარმოადგენს.

    Radiobutton-ის ტიპის ობიექტებში ტექსტის ნაცვლად შესაძლებელია ასევე გრაფიკული გამოსახულების ჩასმა. გრაფიკის ხმარება აქაც სხვა widget-ების ანალოგიურად ხდება (იხილე მაგალირად Label). სურათების ხმარება ხშირად უფრო თვალსაჩინოს ხდის ტესტებს, რომელთა შესადგენად Radiobutton-ტიპის ობიექტები ხშირად გამოიტენება. ქვემოთ მოყვანილ 2 სურათში, მოყვანილია ცნობილი ფიზიკური ფორმულა და ოთხი ფიზიკოსის სურათი, რომელთაგანაც ერთ-ერთმა ის ფიზიკური კანონი დაადგინა, რომელიც მოცემული ფორმულით აღიწერება. ყურადღება მიაქვიეთ, რომ ამ მაგალითში Radiobutton-ტიპის ობიექტები ჰორიზინტალურად არის განლაგებული.

    RadioButton RadioButton
    სურათი სურათი

    ამ პარაგრაფის მეორე, Checkbutton კლასის widget-ს ასევე ინფორმაციის შერჩევისთვის გამოიყენება. Radiobutton-ისგან განსხვავებით, სადაც ჯგუფიდან ხდება ერთი ობიექტის არჩევა, Checkbutton-ტიპის ობიექტები არ ერთიანდებია ჯგუფში და მათ ორი შესაძლო მნიშვნელობიდან (0 და 1) ერთ-ერთის მიღება შეუძლიათ. checkbuton-თან დაკავშირებული გრაფიკული უჯრის მონიშვნის შემთხვევაში, ამ ობიექტთან დაკავშირებული ცვლადის მნიშვმელობა ხდება 1, წინაამდეგ შემთხვევაში კი ეს მნიშვნელობა არის 0.

    offvalue
    The value corresponding to a non-checked button. The default is 0. (offValue/Value)
    onvalue
    The value corresponding to a checked button. The default is 1. (onValue/Value)

    ქვევით მოყვანილია Checkbutton ტიპის ობიექტების გამოყენების მაგალითი. ამ მაგალითში თოთიოეულ ობიექტთან დაკავშირებულია პროგრამირების ენა. რადგან ეს ობიექტები Checkbutton-ტიპის ობიექტებს მიეკუთვნებიან, შესაძლებელია ნებისმიერი რაოდენობის ობიექტი მოინიშნოს, მათ შორის არც-ერთი ან ყველა.


    from tkinter import *

    w1=Tk()

    cv1, cv2, cv3, cv4, cv5 = IntVar(), IntVar(), IntVar(), IntVar(), IntVar()
    CP=["C++", "Fortran", "Java", "PHP", "Python"]

    def ButtonFunction():
            Bset=(cv1.get(), cv2.get(), cv3.get(), cv4.get(), cv5.get())
            w1.quit()
            return Bset

    f1=("LitNusx", 20)
    f2=("Sylfaen", 20)
    LText=" komputeruli programirebis ena:"
    L0 = Label(w1, anchor=W, text=LText, font=f1, bg='white', width=40)
    BCol="LightYellow"
    WR, PX = 35, 2
    CB1 = Checkbutton(w1, anchor=W, bg=BCol, text=CP[0], width=WR, variable=cv1, font=f2, padx=PX )
    CB2 = Checkbutton(w1, anchor=W, bg=BCol, text=CP[1], width=WR, variable=cv2, font=f2, padx=PX )
    CB3 = Checkbutton(w1, anchor=W, bg=BCol, text=CP[2], width=WR, variable=cv3, font=f2, padx=PX )
    CB4 = Checkbutton(w1, anchor=W, bg=BCol, text=CP[3], width=WR, variable=cv4, font=f2, padx=PX )
    CB5 = Checkbutton(w1, anchor=W, bg=BCol, text=CP[4], width=WR, variable=cv5, font=f2, padx=PX )
    B0 = Button(w1, anchor=W, bg="PaleGreen", text="Enter", width=6, font=f2, padx=PX, command=ButtonFunction)
    L0.pack(anchor = W)
    CB1.pack(anchor = W)
    CB2.pack(anchor = W)
    CB3.pack(anchor = W)
    CB4.pack(anchor = W)
    CB5.pack(anchor = W)
    B0.pack(anchor = W)
    w1.mainloop()

    print(" Selected values=", ButtonFunction())

    გრაფიკული ფანჯარა, რომელიც ზემოთ მოყვანილი სკრიპტით შეიქმნა, ნაჩვენებია შემდეგ სურათზე:

    CheckButton CheckButton
    სურათი სურათი

    ქვევით მოყვანილია მაგალითში Checkbutton-ტიპის ობიექტები ჰორიზონტალურად არიან განლაგებული. ამ გრაფიკული გამოსახულების მიღება, ისევე როგორც Radiobutton-ის შემთვევაში შეიძლება განვიხილოთ როგორც სავარჯიშო.


    OptionMenu

    მნიშვნელობის შერჩევა წინასწარ განსაზღვრული სიიდან შესაძლებელია ასევე OptionMenu-ს ტიპის ობიექტების საშუალებით. მსგავსი ტიპის widget ხშირად გამოიყენება ინტერნეტის პროგრამებში, მნიშვნელობის შერჩევა სიიდან. ასეთი სია შეიძლება იყოს ქვეყნების ჩამონათვალი, რიცხვითი მნიშვნელობები და ა.შ. მოყვანილია მაგალითში, სია წარმოადგენს სადაც ხდება დაბადების წლის შერჩევა სკოლის მოსწავლეებისათვის.


    from tkinter import *

    w1= Tk()
    w1.config(bg="LightYellow")

    Stext = StringVar()
    Stext.set(" ")

    def ScFunction1(x) :
            Stext.set(str(x))
            return x

    Stitle = " Scale-ტიპის გრაფიკული ობიექტის გამოყენების მაგალითი"

    L0 = Label(w1,font=("Sylfaen",18), bg="LightYellow", text=Stitle)

    S1 = Scale(w1, from_=0, to=255, orient=HORIZONTAL, resolution=0.5, length=800, width=15,
            bg="white", bd=3, font=("Sylfaen",10), tickinterval=15, command=ScFunction1)

    L1 = Label(w1,font=("Sylfaen",18), bg="White", width=6, relief = SUNKEN, bd=4, textvariable=Stext)

    L0.grid(row=0,column=0, columnspan=2, stick=N, padx=10, pady=10)
    S1.grid(row=1,column=0, stick=W,padx=5,pady=5)
    L1.grid(row=1,column=1, stick=E,padx=10)

    mainloop()

    სურათის აღწერა ?

    Option menu 1 Option menu 2
    სურათი სურათი

    მოყვანილი მაგალითის მოკლე აღწერა.


    Scale

    პითონის tkiner-ში არსებობს კიდევ ერთი widget-ი, რომელიც ინფორმაციის გრაფიკული შეყვანისთვის გამოიყენება და რომელიც Scale ტიპის ობიექტით განისაზვრება. ამ widget-ს შეესაბამება გრაფიკული სკალა, რომლის მნიშვნელობები განსაზღვრულია წინასწარ შერჩეულ ინტერვალში, მინიმალურიდან(from_) მაქსიმალურ (to მნიშვნელობამდე. სკალის ორ მომდევნო მნიშვნელობა ერთმანეთისგან განსხვავდება სიდიდით, რომელსაც სკალის გარჩევისუნარიანობა ეწოდება. სკალის გარჩევისუნარიანობა განასაზღვრება პარამეტრებით resolution. ობიექტის სკალაზე დანაყოფების ინტერვალი განისაზღვრება პარამეტრით tickinterval. ამ ობიექტთან command პარამეტრის საშუალებით დაკავშირებულია პითმის ფუნქცია, რომლის პარამეტრია შკალის მიმდეინარე მნიშვნელობის შესაბამისი ტექსტური ცვლადი. მიმდინარე მნიშვნელობა (რიცხვი) სკალაზე შეირჩევა კურსორის შესაბამის პოზიცია მოთავსებით. სკალის განლაგება (ორიენტაცია) განისაზღვრება პარამეტრი orient, რომელსაც ორი მნიშვნელობა (ჰორიზონტალური ან ვერტიკალური) შეიძლება ჰქონდეს. საწყის (default) განლაგებას წარმოადგენს ვერტიკალური განლაგება. ქვემოთ ნაჩვენებია ამ Scale-ტიპის ობიექტის გამოყენების მაგალითი.


    from tkinter import *

    w1= Tk()
    w1.config(bg="LightYellow")

    Stext = StringVar()
    Stext.set(" ")

    def ScFunction1(x) :
            Stext.set(str(x))

    Stitle = " Scale-ტიპის გრაფიკული ობიექტის გამოყენების მაგალითი"

    L0 = Label(w1,font=("Sylfaen",18), bg="LightYellow", text=Stitle)

    S1 = Scale(w1, from_=0, to=255, orient=HORIZONTAL, resolution=0.5, length=800, width=15,
            bg="white", bd=3, font=("Sylfaen",10), tickinterval=15, command=ScFunction1)

    L1 = Label(w1,font=("Sylfaen",18), bg="White", width=6, relief = SUNKEN, bd=4, textvariable=Stext)

    L0.grid(row=0,column=0, columnspan=2, stick=N, padx=10, pady=10)
    S1.grid(row=1,column=0, stick=W,padx=5,pady=5)
    L1.grid(row=1,column=1, stick=E,padx=10)

    mainloop()


    მოყვნილ სკრიპტს შეესაბამება გამოსახულება, რომელიც მოცემულია მომდევნო სურათზე.

    OptionMenu


    როგორც სურათიდან სჩანს, scale ობიექტის გრაფიკული სკალა განსაზღვრულია 0 და 255-მდე ინტერვალში. იმ შემთხვევაში, როდესაც სკალის ინტერვალი მითითებული არ არის, გამოიყენება საწყისი მნიშვნელობები რომლებიც 0-100 ინტერვალს შეესაბამება. მოცემული სკალის გარჩევისუბარიანობის მნიშვნელობაა 0.5, რაც ნიშნავს, რომ შესაძლებელია რიცხვების შერჩევა 0.5 ბიჯით, ე.ი, 0.0, 0.5, 1.0, 1.5 და ა.შ. 255.0 -მდე. ობიექტის მიმდინარე მნიშვნელობა, რომელიც შეესაბამება სკალაზე კურსორის პოზიციას, გრაფიკულ გამოსახულებაზე გამოყვანილია Label-ტიპის ობიექტის საშუალებით. მაგალითში სკალის ორიენტაცია განსაზღვრულია, როგორც ჰორიზონტალური.


    ინფორმაციის შეყვანა: Entry, Spinbox

    პითონის tkinter-მოდულის გრაფიკული widget-ები Radiobutton, Checkbutton და Scale, რომლებიც წინა პარაგრაფებში განვიხილეთ, ინფორმაციის შერჩევის საშუალებას იძლევა წინასაწარ განსაზღვრული სიიდან ან რიცხვითი ინტერვალიდან. პითონის პროგრამაში ინფორმაციის შეყვანა, რა თქმა უნდა, არ ამოიწურება მხოლოდ შერჩევით და ახალი ობიექტების შეყვანასაც გულისხმობს. Entry კლასის widget სწორედ ამისთვის არი განკუთვნილი და პროგრამაში ტექსტური ინფორმაციის (სტრინგის) შეყვანის საშუალებას გვაძლევს. ახალი ტექსტური ობიექტის შეყვანა კომპუტერის კლავიატურიდან ხდება. Entry-ტიპის გრაფიკული ობიექტები, როგორც წესი, გამოიყენება დიალოგურ რეჟიმში, როდესაც საჭიროა გარკვეული ტიპის ინფორმაციის შეყვანა. ხშირად დიალოგური პროგრამები გამოიყენება პერსონალური ინფორმაციის შესაყვანად. ასეთი პროგრამის მარტივი მაგალითა წარმაოდეგენს ქვევით მოყვანილი პროგრამა.


    from tkinter import *

    w1=Tk()
    w1.config(bg="LightGray") # Gray")

    v1, v2, v3 = StringVar(), StringVar(), StringVar()
    vr = StringVar()

    def Do1():
            v123=" " + v1.get()+" "+v2.get()
            vr.set(v123)
            v1.set("")
            v2.set("")
            v3.set("")

    fsize1, fsize2=18, 16
    LW, LW1, EW2 = 40, 12, 30

    gText1 = " Tqveni monacemebi"

    L0=Label(w1,text=gText1, bg="white", font=("LitNusx", fsize1), widt=LW, pady=1)
    L1=Label(w1, text=" saxeli: ", anchor="w", font=("LitNusx", fsize2), bg="white", width=LW1, padx=5 )
    L2=Label(w1, text=" gvari: ", anchor="w", font=("LitNusx", fsize2), bg="white", width=LW1, padx=5 )
    L3=Label(w1, text=" el. fosta: ", anchor="w", font=("LitNusx", fsize2), bg="white", width=LW1, padx=5 )
    L3=Label(w1, text=" el. fosta: ", anchor="w", font=("LitNusx", fsize2), bg="white", width=LW1, padx=5 )
    L4=Label(w1, textvariable=vr, anchor="w", font=("Litnusx", (fsize2-2)), bg="white", width=LW, padx=1 )

    E1 = Entry(w1, font=("Sylfaen", fsize2), width=EW2, textvariable=v1 )
    E2 = Entry(w1, font=("Sylfaen", fsize2), width=EW2, textvariable=v2 )
    E3 = Entry(w1, font=("Sylfaen", fsize2), width=EW2, show="*", textvariable=v3 )
    B1 = Button(w1, bg="DarkBlue", text="Enter", bd=6, relief=RAISED, font=("Sylfaen", 10), fg="white", command=Do1)

    L0.grid(row=0, column=0, columnspan=3,padx=2)
    L1.grid(row=1, column=0, columnspan=2, sticky="w" )
    L2.grid(row=2, column=0, columnspan=2, sticky="w" )
    L3.grid(row=3, column=0, columnspan=2, sticky="w" )
    E1.grid(row=1, column=2, sticky="e", padx=5, pady=2 )
    E2.grid(row=2, column=2, sticky="e", padx=5, pady=2 )
    E3.grid(row=3, column=2, sticky="e", padx=5, pady=2 )
    B1.grid(row=4, sticky="w", padx=2, pady=2)
    L4.grid(row=4, column=1, columnspan=2, padx=2)

    mainloop()

    მოყვანილ პროგრამაში Entry-ობიეტი ქმნის გრაფიკულ არეს, რომელშიც შეგვიძლია ავკრიბოთ ტექსტი კლავიატურიდან. ამ არეს წინ უძღვის ინფორმაცია, თუ რა სახის ინფორმაცია უნდა ჩაიწერის მასში. ამ ინფორმაციის გამოყვანა Label ტიპის ობიექტის საშულებით ხდება. პროგრამაშის 3 არეა, რომელიც Entry-ის საშუალებით შეიქმნა, შესაბამისად მათ წინ 3 Label-ობიქტია განლაგებული. ამ პროგრამის შესრულების შედეგები ნაჩვენებია მომდევნო სურათზე. მარცხენა სურათზე მოცემულიგრაფიკული გამოსახულენა შეესაბამება Button-ღილაკის დაჭერამდე შექვანილ ინფორმაციას. ყურადღება მიაქციეთ, რომ ელექტრონული ფოსტის სახელი ფიფქისსიმბოლობით(*) არის დაფარული. ამის საშუალებას იძლევა show პარამეტრში. ამ პარამეტრის საშუალებით შესაძლენელია კლავიატურიდან შეყვანილი სიმბილოების დაფარვა.

    მარჯვნივ მოყვანილი სურათი, შეესაბამება Button-ღილაკის დაჭერის შემდეგ მიღებულ გამოსახელებას. ღილაკის დაჭერის შემდეგ ხდება Entry-ობიქტებში არსებული ტექსტის გადაწერა და შესაბამის ტექსტური ცვლადების საწყის მდგომრეობაში დაბრუნება. შეყვანილი სახელი და გვარი იბეჭდება გრაფიკულ არეშიმ რომელიც Label-ტიპის ობიექტს წარმოადგენს. მოცენული მდგომარეობიდან შესაძლებელია პროგრამაში ახალი მონაცემების შეყვანა. Entry და Label ობიექტებს შორის კავშირი ხორციელდება StringVar - ტიპის ობიექტების საშუალებით, რომლებიც tkintet-ში ტექსტური ცვლადებთან (სტრინგებთან) სამუშაოდ გამოიყენება.

    Frame_2 Frame_2

    ინფორმაციის შეყვანის დროს, როგორც უკვე ავღნიშნეთ, შეიძლება სხვა widget-ების, მაგალითად OptionMenu-ტიპის ობიქტის გამოყენება. როგორც ვნახეთ, ეს გრაფიკული ობიექტი დაკაშირებულია პითონის list ან tuple-ის ტიპის ცვლადთან და საშუალებას იძლევა სიმრავლიდან ერთი ელემენტი შეირჩეს. ინფორმაციის შერჩევითი შეყვანა შეილება ასევე spinbox-ტიპის ობიექტით ანუ widget-ით. ამ ტიპის ობიექტისთვისაც წინასწარ უნდა განისაზღვროს list ან tuple ტიპის ცვლადი, რომელიც widget-ს პარამეტრ values საშულებით უკავშირდება. spinbox-ის ტიპის ობიექტის გრაფიკული ფანჯარა Entry-ის ანალოგიურია, იმ განსახვავებით რომ მასში უკვე მოთავსებულია სიმრავლის ერთი ელემენტი. სხვა ელემეტის არჩევა ხდება spinbox-გრაფიკულ ფანჯარასთან დაკავშირებული ისრებით, რომლებიც მიმდევრობის ელემენტის არჩების საშუალებას იძლევა. ქვევით მოყვანილია ამ ობიექტის ხმარების მაგალითი:


    from Tkinter import *
    w1=Tk()
    month=["იანვარი", "თებერვალი", "მარტი", "აპრილი", "მაისი", "ივნისი", "ივლისი", "აგვისტო", "სექტემბერი", "ოქტომბერი", "ნოემბერი", "დეკემბერი"]
    year=list(range(1900,2015))
    day=list(range(1,31))

    SBD1=Spinbox(w1, values=day, font=("Sylfaen", 12), width= 3)
    SBD2=Spinbox(w1, values=month, font=("Sylfaen", 12), width=12)
    SBD3=Spinbox(w1, values=year, font=("Sylfaen", 12), width= 4)

    მოყვანილი ფრაგნენტი გამოყენებულია პროგრამაში, რომის შესაბამისი გრაფიკული გამოსახულება მოყვანილია სურათზე. პროგრამის დანიშნულებას ანკეტური მონაცემემების შეყვანა წარმოადგენს.

    Frame_2
    სურათი ???

    პითონის tkinter მოდულში ინფორმაციის შეყვანის განხილულ საშუალებებთან ერთად არსებობს კიდევ ერთი, კეროდ Listbox-კლასი, რომელიც ინფორმაციის შერჩევისთვის გამოიყენება. ამ ტიპის გრაფიკული ობიექტის ფუნქციები გარკეულად წილად OptionMenu და Spinbox ფუნქციების ანალოგიურია, რის გამოც ამ widget-ის აღწერაზე აღარ შევჩერდებით.


    Scrollbar

    ამ widget-ის შესახებ, რომელიც გამოიყენება სხვა გრაფიკილ კლასებში და ფანჯარაში ინფორმაციის დინამიური განთავსების საშუალებას იძლევა. გამიყენება:

  • listbox
  • entry
  • canvas
  • text


    საჭიროამაგალითის მოყვანა?

    text და scrollbar

    ამ ნაწილში განვიხილავთ text-კლასის widget, რომელიც , როგორც სახელი მიუთითებს, ძირითადათ ტექსტებთან სამუშაოდ გამოიყენება. ამ გრაფიკულ ობიექტში შეიძლენა გამოყენებული იყოს სხვადასხვა ფონტები. გრძელ ტექტების გამოყვანის დროს, მასთან ერთად ხშირად იხმარება Scrollbar-ტიპის ობიექტი, რომელიც გრაფიკულ ფანჯარაში ვერტიკალურად და ჰორიზონტალურად მოძრაობის საშუალებას იძლევა. ამ widget-ში დასაშვებია ასევევ გრაფიკული გამოსახულების ჩასმა. ქვემოთ მოყვანილია მისი გამოყენების მარტივი მაგალითი, სადაც ამ ობიექტში ჩასმულია როგორც გრაფიკული გამოსახულება ასევე ტექსტი.


    from tkinter import *

    w1 = Tk()
    f1=open("TSU_1.txt", encoding="utf8")
    img="TSU_image_1.gif"

    txt1=f1.read()
    text1 = Text(w1, height=20, width=30)
    photo=PhotoImage(file=img)
    text1.insert(END,'\n')
    text1.image_create(END, image=photo)
    text1.pack(side=LEFT)

    S = Scrollbar(w1)
    T = Text(w1, height=4, width=70)
    S.pack(side=RIGHT, fill=Y)
    T.pack(side=LEFT, fill=Y)

    S.config(command=T.yview)
    T.config(font=("Sylfaen", 14))
    T.config(yscrollcommand=S.set)

    T.insert(END, txt1)

    mainloop()

    მოყვანილ მაგალიში, ივანე ჯავახიშვილის სახელობის თბილისის უნივეტსიტეტის გრაგიკული გამოსახლება და ტექსტი (ეს ტექსტი აღებულია უნივესიტეტის ვებ-გვერდიდან) text-ის საშუალებით გამოყვანილია გრაგიკულ ფანჯარაში. ფანჯრა შემდებ სურათშია მოცემული. როგორც სურთიდან სჩანს, ფანჯარაში ტექსტი სრულად არ ეტავა, მაგრამ მასში გადაადგილება შეიძლება Scollbar-ის საშუალებით. უნდა ავღნიშნოთ, რომ Scollbar გრაფიკული ობიექტის გამოყენება tkinter მოდულის ზოგიერთ სხვა widget-შიც შეიძლება.

    Text

    ინტერაქტული პროგრამირების საძუალებები: Events and Binds

    დღევანდელი კომპუტერული პროგრამული უზრუნველყოფის დიდ ნაწილს ინტერაქტული პროგრამები შეადგენენ. ასეთი პროგრამები გარკვეულ შემთხვევეზე (event) რეაგირების საშუალებას იძლევიან. მათ საუკეთესო მაგალითს ალბათ კომპუტერული თამაშები წარმოადგენენ. რა იგულისხმება შემთხვევის ქვეშ ? როგორც წესი, შემთხვევა დაკავშირებულია კომპუტერის გარე მოწყობილობებზე (მაგალითად მაუსი ან კლავიატურა) ზემოქმედებასთან. გარკვეული ტიპის ზემოქმედება შეიძლება დავაკავშიროთ პროგრამასთან და განვსაზღვროთ თუ პროგრამის რომელ ნაწილს გადაეცემა მართვა ასეთი შემთხვევის განხორციელებისას. შემთვევის პროგრასთან დაკავშირება ( binding) ინტერაქტული პროგრამირების საფუძველა წარმოადგენს. ქვევით მოყვანილია ონტერაქტული პროგრამის მარტივი მაგალითი.


    from tkinter import *

    w1=Tk()
    vtext = StringVar()
    vtext.set( " interaqtuli programirebis magaliTi ")
    iv = IntVar()
    iv.set(1)

    def hello(event):
            nc = iv.get()
            txt=" mausis erTi daWera ({0:})".format(nc)
            vtext.set(txt)
            iv.set((nc+1))

    def quit(event):
            txt=" mausis ori daWera \n Tqven gadixarT programidan 30 wamSi ! "
            vtext.set(txt)
            # vtext.set(" naxvamdis ! ")
            # import sys; sys.exit()
            # w1.destroy()
            w1.quit()

    L=Label(w1, bg="LightYellow", textvariable=vtext, font=("LitNusx", 18), fg="red", width=45, heigh=5)
    B = Button(w1, text='Mouse Clicks', font=("Sylfaen", 14) , bg="LightGreen")
    B.bind('', hello)
    B.bind('', quit)
    L.grid()
    w1.mainloop()

    მოყვანილი მაგალითის განხილვა.

    Event აღწერა
    < Button-1 > ეს შემთხვევა დაკავშირებულია კომპუტერის მაუსთან. შემთხვევის აქტივირება ხდება მაშინ, როდესაც მაუსის კურსორი მოთავსებულია გრაფიკულ ობიექტში, რომელიც შეთხვევასთან დაკავშირებულია მეთოდით bind

    < Button-1 >
    < Button-2 >
    < Button-3 >
    < Button-4 >
    < Motion > აღწერა
    < ButtonRelease > აღწერა
    < Double-Button > აღწერა
    < Enter > მაუსის კურსორი შევიდა გრაფიკულ widget -ში. ეს შემთხევა არ გუსისმობსა შეყვანის კლავიშაზე ზემოქმედებას, რომელლას იმავე სახელი ჰქვია. ეს ცალკე შემხვევას წარმოადგენს და მოყვანილია ქვევით. (იხილე < Return > )
    < Leave > მაუსის კურსორი გავიდა გრაფიკულ widget -იდან.
    < FocusIn > აღწერა
    < FocusOut > აღწერა
    < Return > აღწერა
    < Key > The user pressed any key. The key is provided in the char member of the event object passed to the callback (this is an empty string for special keys). აღწერა
    a აღწერა
    < Shift-Up > აღწერა
    < Configure > აღწერა

    საჭიროა ცხრილი ?


    პითონის tkinter მოდულის canvas კლასი

    გრაფიკულ widget-ს, რომლებიც აქამდე განვიხილეთ ტექსტური ინფორმაციის და გრაფიკული გამოსახულების კომპუტერის ეკრანზე გამოყვანის და ინფორმაციის შერჩევისა და შეყვანის ფუნქციები ჰქონდეთ. tkinter- მოდულში დამატებით არსებობს Canvas-კლასი (widget), რომლის დანიშნულებას გრაფიკული ობიექტების მანიპულირება წარმოადგენს, რაც გულისხმობს ასეთი ობიექტების შექმნას და მათი ოპერირებას, ანიმიაციის ჩათვლით. თვითონ Canvas - წარმოადგენს 2-განზომილებიან ობიექტს, რომელზეც სხვასხვა მეთოდის საშუალებით გრაფიკის აგება ხდება. ამ ობიექტის კარგი ანალოგია სახაზავი დაფა ან უბრალოდ დაფა, რომელსაც მართკუთხედის ფორმა აქვს და რომელზეც განსაზღვრულია კოორდინატთა სისტემა, ისე რომ დაფის ყველა წერტილს გარკვეული და განსხვავებული კოორდინატები გააჩნია. დაფის კოორდინატები იზომება პიქსელებში (უჯრებში) და მთელ რიცხვებს წარმოადგენს. მართკუთხა დაფის კოორდინათა სისტემის სათავე მოთავსებულია მარცხენა ზედა კუთხეში, მისი კოორდინატებია (0,0). პირველი, ჰორიზონტალური xკოორდინატი იზრდება მარჯვნივ გადაადგილებით და მისი მაქსიმალური მნიშვნელობა დაფის სიგრძეს(width) არ აღემატება (0 &le x &le xmax). ვერტიკალურ y კოორდინატი იზრდება დაფაზე ზევიდან ქვევით გადაადგილების შემეთხვევაში, 0-დან ymax-მდე, სადაც ymax დაფის სიმაღლის (height) ტოლია. დაფის ქვედა მარჯვება კუთხის ხოორდინატებია (xmax, ymax)= (width, height).

    Canvas ტიპის ობიექტის განსაზღვრა 29 პარამეტრით ხდება, რომელთაგან შორის არის განხილული width და height პარამეტრები. სხვა widget-ის მსგავსად, აქაც ხდება დაფის ფონური ფერის (background ან bg) და დადის შემომსაზღვრავი კანტის ზომის ( borderwidth ან bd ) განსაზღვრა. სხვა პარამეტრებს საჭიროების შემხვევაში გავეცნობით.
    Canvas - შესაძლებლობები, რაში გამოიყენება.
    მეთოდები, რომელთა საშუალებით ხდება გრაფიკული გამოსახულების მიღება. პრონციპულას საკნარია ერთი მეთოდი, რომელიც დაფის ორ წერტილს აერთებს წრფის მონაკვეთის საშუალებით. ეს მეთოდია create_line( x1, y1, x2, y2) , რომელიც დაფის წერტილებს (x1, y1) და (x2, y2) აერთებს.
    შეიძლება წერტილები გადაეცეს როგორც ტუპლი ?
    მაგალითები ?
    create_line-ით შექმნილი(დახაზული) მონაკვეთის თვისებები, მაგალიტად მისი ფერი, სისქე, მონაკვეთის სტილის და ბოლოებში არსებული გამოსახულება განისაზღვრები ამ მეთოდის შესაბამის პარამეტრებით. ქვევით მოყვანილია მარტივი მაგალითი, რომელშიც ხდება გრაფიკულ დაფაზე წრფის მონაკვეთების დახაზვა.


    from tkinter import *

    w1=Tk()
    W = 800
    H = int(9*W/16)
    c=Canvas(w1, width=W, height=H, bg="white")
    c.pack()
    x1,y1,x2,y2=0,0,W,H
    Line1=c.create_line(x1,y1,x2,y2, width=1, fill="red")
    xc1, xc2 = (W, 0), (0,H)
    Line2=c.create_line(xc1,xc2, width=2, dash=(10,4), fill="blue")
    xc3, xc4 = (0, H/2), (W, H/2)
    xcc1=(xc3, xc4)
    Line3=c.create_line(xcc1, width=3, dash=(30,20,5,20), fill="green" )
    xcc2=[W/2, 0, W/2, H]
    Line4=c.create_line(xcc2, width=4, fill="magenta" )
    mainloop()

    მოყვანილ მაგალითში იხაზება წრფის 4 მონაკვეთი, Line1, Line2, Line3 და Line4. პირველი მონაკვეთის შექმნისას create_lines მეთოდს გადაეცა 4 რიცხვი, რომლებიც სიბრტყეზე ორ წერტილს შეესაბამენა. მონაკვეღის ხაზის ზომა განისაზღცრა პარამეტრით width, ხოლო ფერი პარამეტრით fill. შემდეგ მაგალითებში პარამეტრები შეცვლია. მეორე მონაკვეთის განსაზრვრისას მეთოდს ორი 2-განზომილებიანი ტუპლი გადაეცემა, რომლებშიც მონაკვეთის ბოლო წერტილების კოორდინატების ჩაწერილი. ამ მონაკვეთის პარამეტრებს ადლაცს dash, პარამეტრი, რომელიც 4 რიცვისაგან შემდგარ ტუპს წარმოადგენს. ეს პარამეტრი და მისი შესაბამის ტუპლი განსაზღცრავენ ტეხილი ხაზს, რომლირაც მონაკვეთი იხაზება. ტუპლში რიცხვი ტეხილი ხაზის სტრუქტრურას აღნიშნავს, პირველი რიცვი პირველი ხაზი სიგრძეა ტეხილში, მას მოსდევს ცარიელი ინტერვალის სიგძე ორ გაზს შორის, შემდეგ ისევ ტეხილი ხაზისა და ცარიელი ინტერვალის სიგტძეა. ჩვენ შემთცევეაში ტეხილი ხაზი ამ ელემემტებით განისაზღვრება, რომლების ოერიოდულად პრორდება მონაკვეთის დახაზვის დროს. Line3-ს კოორდინატული ინფორმაცია ერთი ტუპლით გადაეცება, რომელიც 2 ტუპლს შეიცავს. 2-განზომილებიანი ტუპლების რიცხბი შეიძლება იყოს N, მაშიმ ეს მეთოდი მიმდებრობიღ, N-1 მონაკვეთით შეაერთენს ტუპლით მოცემულ წერტილებს. გრაფიკული გამოსახულება ქვევით არის მოცემული:

    წრფის მონაკვეთის გრაფიკული გამოსახვის მეთოდი ნებისმიერი გეომეტრილი ფიგურის დახაზვის საშუალებას იძლევა, თუმცა canvas-კლასში არსებობენ მეთოდები, რომლების სტანდარტული გეომეტრიული ფიგურების ასაგებად გამოიყენება. გეომეტრიული ფიგურების და შესაბამისი მეთოდების სია ასეთია:

  • მართკუთხედები (create_rectangle )
  • ოვალები (create_oval )
  • მრავალკუთხედები (create_polygone(create_rectangle )
  • არკები (create_arc )
    ამ მეთოდებთან ერთად ხშირად იმხმატება ტექსტის განთავსების მეთოდი:
  • არკები c(create_text )
    ამ მეთოდების პარამეტერები, რომელთა საშუალებით ამ ფიგურების მონაკვეთები იხაზება create_line მეთოდის ანალოგოურია. მართკუთხედის შემთხვევაში, მისი დასახაზად საკმარის ორი წერტილის, მაგალიტად მარჯვენა ზედა წერტილის და მარხენა ქვედა წერტილის ცოდნა. ოვალის დახაზვაც მართკუთხედის საშუალებით ხდება, მართკუთხედში შესაძლებელი ელისის ჩახახვა, ხოლო თუ მართკუღხელი კვადრატს წარმოადგენს, მაშინ ელიფსი წრეში გადავა. მრავალკუთხედების დახაზბის დროს აუცილებელია მეთოდა სამი ან მეტი წერტილის კოორდინატები გადაევეს.
    მაგალითები ქვევით არის მოქვანილი ?


    from tkinter import *

    tk=Tk()
    W, H = 800, 600
    canvas = Canvas(tk, width = W, height= H, bg="white")
    canvas.pack()

    xx=20
    x0, y0 = xx, (H-xx)
    x1, y1 = (W-xx), y0
    x2, y2 = (W/2), xx

    canvas.create_line(x0, y0, x1, y1)
    canvas.create_line(x1, y1, x2, y2, fill ='red', width = 3)
    Color=colorchooser.askcolor()
    print("Color=", Color)
    canvas.create_line(x2, y2, x0, y0, arrow= 'last', fill = Color[1], width = 5 )

    messsage_1
    კლასის იერარქია. ეკუთვნის კლასი გარკვეულ მოდულს ?

    კლასის დებუებების ბლოკი პითონის სინტაქსის საფუძველზე იწერება, ე.ი. ინდენტავიით წარმოქმნილი ბლოკია. წრფის მონაკვეთი


    import random
    from tkinter import *

    tk=Tk()
    CW, CH = 800, 600
    canvas = Canvas( tk, width = CW, height= CH, bg="white")
    canvas.pack()

    # text
    tx1, ty1 = 50, 20
    tx2= tx1
    ty2 = ty1 + 30

    LineText="canvas.create_line( x1, y1, x2, y2, arrow=Ar, fill=Color, width=1 ) "
    canvas.create_text(tx1, ty1, anchor = "w", text="wrfis monakveTi ", font=("Litnusx", 20), fill="red", justify="left", tags="text")
    canvas.create_text(tx1, ty2, anchor="w", text=LineText, font=( "times", 16), fill="blue", justify="left" )

    Arrow=["none", "first", "last", "both"]
    Colors=["black", "red", "green", "blue", "magenta", "yellow"]

    xw1, xw2 =50, 750
    yw1, yw2 =100, 550
    NL = 150
    canvas.create_rectangle(xw1, yw1, xw2, yw2 )
    for i in range(NL):
            kc = random.randint(0, (len(Colors)-1))
            x1 = random.randint(xw1, xw2)
            x2 = random.randint(xw1, xw2)
            y1 = random.randint(yw1, yw2)
            y2 = random.randint(yw1, yw2)
            anvas.create_line(x1, y1, x2, y2, arrow= 'last', fill = Colors[kc], width = 2 )

    აქ საჭირო იქნება გრაფიკის მოყვანა

    messsage_1

    კიდევ რა უნდა განვიხილით ამ ნაწილში ?


    ფერის ხმარების შესახებ


    ფერის ხმარება გრაფიკაში.
    ძირითადი ფერები და მათი შერევით მიღებული ახალი ფერი.
    ფერები და მათი შერევა.
    არსებონს სამი ბაზური ფერი:
    R (red) - წითელი
    G (green) - მწვანე
    B (blue) - ლურჯი
    ყველა სხვა ფერი მიიღება ამ სამი ფერის სხვადასხვა ინტენსიობით შერევით. თვითოეული ფერის ინტენსიობა 256 (28), ე.ი. ფერების პალიტრას შეიძლება ჰქონდეს (224 = 16M ) სხვადასხვა კომბინაცია.
    (R, G, B) გავრცელებული 16-ჩაწერა #000000 -დან #FFFFFF მდე.
    მაგალითი, რომელიც აჩვენებს ფერის გამოყენებას.
    ფერით კოდირება. მეთოდი, რომელიც გავრცელებული ერგანზომილებიანი მიმდევრობების კოდირებისათვის.
    დიფუზიის მაგალითი ? შერევა, ფერების შერევა
    კოდირება ორი ფერის გამოყენებით.

    Color=colorchooser.askcolor() ეს დებულება ფერის არჩევის საშუალებას იძლევა:

    Colorchooser

    რა ვისწავლეთ ან ნაწილში

  • პითონის მოდული tkinter

    დამატებითი რესურსები

  • python-cource tkinter (პითონის 2 ვერსია)
    ეს რესურსო პითონის ინტერნეტ-კურსის ცაკლე ნაწილს შეადგენს და 15 თავისგან შედგება.

    ვებ-აღწერა
    კარგი მაგალითი

    მაგალითები და სავარჯიშოები

    .
    D    r   a   f   t    !