Инфоурок Информатика Другие методич. материалыМетодические рекомендации с примерами программных кодов на языке Python GUI (уроки по Tkinter) для учащихся 8-11 классов (часть1)

Методические рекомендации с примерами программных кодов на языке Python GUI (уроки по Tkinter) для учащихся 8-11 классов (часть1)

Скачать материал

 
Средняя общеобразовательная школа №14        г о Подольск МО

                   




                     Методические рекомендации  с  примерами 
      программных  кодов    на языке 
Python GUI  (уроки по Tkinter)
                               для учащихся 8-11 классов  (часть1)

 

 

Подготовил:
                          Учитель  высшей категории
                              Глушков Николай Васильевич 
                 предмет : информатика
   

 

 

 

 

Г  Подольск
 2020 г

 

                                                      

                           

                                                            С О Д Е Р Ж А Н И Е

 

Введение

Раздел 1. Библиотека Tkinter
Раздел 2. Класс
Tk Создание простых окон Свойства окон
Раздел 3. Общее для всех виджетов. Создание окон  с текстом и кнопками. Функциональные кнопки Примеры.
            3.1   
Методы виджетов. Примеры
Раздел 4.»Системные методы»
Раздел 5
Справка по Основным виджетам с примерами

o     

 

        Введение
Автор Рекомендаций  в свое время на учительском сайте «Инфоурок» подготовил две методические разработки  по объектно-ориентированному программированию используя  модуль tkinter для работы с графической библиотекой Tk, Задача данных рекомендаций познакомить и облегчить  обучающимся  написание основных учебных кодов (скриптов) для математических, физических  и экономических задач в интерактивной оболочке. Для обучающихся в школе эта справочная база примеров поможет более углубленно и наглядно  изучить библиотеку Tkinter  и в дальнейшем самостоятельно использовать данный  материал  в  web-приложениях .

     Раздел 1. Библиотека Tkinter
В этой  разработке показано  как создаются  графические пользовательские интерфейсы, с помощью  некоторых примеров графического интерфейса Python с использованием библиотеки Tkinter.
Tkinter – это кроссплатформенная библиотека для разработки графического интерфейса на языке Python (начиная с Python 3.0 переименована в tkinter). Tkinter расшифровывается как Tk interface, и является интерфейсом к Tcl/Tk. Tkinter входит в стандартный дистрибутив Python
Tkinter (от англ. tk interface) - это графическая библиотека, позволяющая создавать программы с оконным интерфейсом  и может быть использована в большинстве распространённых операционных систем (Windows, Linux, Mac OS X и др.).

Начиная с версии python-3.0 библиотека переименована в соответствии с PEP 8 в tkinter (с маленькой буквы).Импортируется она как и любая другая библиотека:

# для версии python 2.7 и ниже

import Tkinter

 

# для версии python 3.0 и выше

import tkinter


В Tkinter визуальные контроллы называются виджетами (widget, от англ. window gadget) - стандартизированный компонент графического интерфейса, с которым взаимодействует пользователь. К ним относятся:  Button – кнопки с управлением ,  Label - виджет, предназначенный для отображения какой-либо надписи без возможности редактирования пользователем. Имеет те же свойства, что и  кнопки, List, radioButton и т.д.
      Раздел 2.
Класс Tk Создание простых окон Свойства окон

Tk является базовым классом любого Tkinter приложения. При создании объекта этого класса запускается интерпретатор tcl/tk и создаётся базовое окно приложения.

Tkinter является событийно-ориентированной библиотекой. В приложениях такого типа имеется главный цикл обработки событий. В Tkinter такой цикл запускается методом mainloop. Для явного выхода из интерпретатора и завершения цикла обработки событий используется метод quit.

 

Таким образом минимальное приложение на Tkinter будет таким:
 Пример1 Создание окна через
root.mainloop()
from tkinter import *

root = Tk()

root.mainloop()

 

 
Пример 1.1 Свойства окна

from tkinter import *
def window_deleted():
    print ('Окно закрыто')
    root.quit() # явное указание на выход из программы
root=Tk()
root.title('Пример приложения')
root.geometry('500x400+300+200')

# ширина=500, высота=400, x=300, y=200
root.protocol('WM_DELETE_WINDOW', window_deleted)

 # обработчик закрытия окна
root.resizable(True, False) # размер окна может быть изменён только по горизонтали
root.mainloop()

В приложении можно использовать несколько интерпретаторов tcl/tk. Так как после вызова метода mainloop дальнейшие команды python исполняться не будут до выхода из цикла обработки событий, необходимо метод mainloop всех интерпретаторов кроме последнего осуществлять в фоновом режиме.


 Пример 2 Запуск двух интерпретаторов:

 
from tkinter import *

root1 = Tk()

root2 = Tk()
# первый цикл запускаем в фоне

root1.after(500, root1.mainloop)
root2
.mainloop()

 

 

При использовании двух и более интерпретаторов необходимо следить, чтобы объекты, созданные в одном интерпретаторе, использовались только в нём. Например, изображение, созданное в первом интерпретаторе, может быть использовано много раз в этом же интерпретаторе, но не может быть использовано в других интерпретаторах.





Пример  3. Создание окна через
window.mainloop()
from tkinter import *
window = Tk()
window.title("Добро пожаловать
 в приложение
PythonRu")

window.mainloop()

    Раздел 3 . Общее для всех виджетов. Создание окон с текстом и кнопками. Функциональные кнопки Примеры.
Все виджеты в Tkinter обладают некоторыми общими свойствами. Опишем их, перед тем как перейти к рассмотрению конкретных виджетов. Виджеты создаются вызовом конструктора соответствующего класса. Первый аргумент (как правило неименованный, но можно использовать имя master) это родительский виджет, в который будет упакован (помещён) наш виджет. Родительский виджет можно не указывать, в таком случае будет использовано главное окно приложения. Далее следуют именованные аргументы, конфигурирующие виджет. Это может быть используемый шрифт (font=...), цвет виджета (bg=...), команда, выполняющаяся при активации виджета (command=...) и т.д. Полный список всех аргументов можно посмотреть в man options и man-странице соответствующего виджета (например man button, см. разделы "STANDARD OPTIONS" и "WIDGET-SPECIFIC OPTIONS"). Пример кода:
  Пример 4 Создать окно в цвете
через label.mainloop()
 Свойства
Label: текст, цвет фона и шрифта, отступы по x ,y, размер шрифта

 
from tkinter import Label

label = Label(None,text='Hello привет -это окно ',
background="yellow", foreground="blue",
   padx="40", pady="40", font="16")

label.pack()

label.mainloop()

 

 

 
 

 


Задание1 :  Изменить дизайн окна
 через label.mainloop()

 

А вот самая простая кнопка
import Tkinter

Tkinter._test()


После выполнения данного кода должно появиться следующее окно:

https://habrastorage.org/storage1/7d33d1f8/b03c20a8/40a85744/0c73c61c.png

Отлично, теперь можно приступать к написанию нескольких простых программ для демонстрации основных принципов Tkinter.

Hello world
Конечно, куда же без него. Первым делом нам нужно создать главное окно, написав

Пример 4.1 Окно с кнопкой
from Tkinter import *

 
root = Tk()

def Hello(event):

    print "Yet another hello world"

 

btn = Button(root,                  #родительское окно

             text="Click me",       #надпись на кнопке

             width=30,height=5,     #ширина и высота

             bg="white",fg="black") #цвет фона и надписи

btn.bind("<Button-1>", Hello)       #при нажатии ЛКМ на кнопку вызывается функция Hello

btn.pack()                          #расположить кнопку на главном окне

root.mainloop()

 

Всё просто, не так ли? Создаём экземпляр класса Button, указываем родителя и при желании список параметров. Есть еще немало параметров, таких как шрифт, толщина рамки и т.д.
Затем привязываем к нажатию на кнопку событие (можно привязать несколько разных событий в зависимости, например, от того, какой кнопкой мыши был нажат наш btn.
mainloop() запускает цикл обработки событий; пока мы не вызовем эту функцию, наше окно не будет реагировать на внешние раздражители.


Пример 5 Создание окна через  root.mainloop() и кнопки с надписью
которая  через функцию печатает текст

from Tkinter import *

def button_clicked():

 

 
    print (u"Клик!")

root=Tk()

# кнопка по умолчанию

button1 = Button()

button1.pack()

# кнопка с указанием родительского

виджета и несколькими аргументами

button2 = Button(root, bg="red",

 text=u"Кликни меня!", command=button_clicked)

button2.pack()

root.mainloop()

Задание 2 Создать окна c кнопкой  через label.mainloop()и
через window.mainloop

   Пример 6 Создание надписи в окне через window.mainloop() 

Текст надписи через lbl = Label(window, text="Привет", font=("Arial Bold", 50)) 

 
 from tkinter import *  

window = Tk() 

window.title("Добро пожаловать в
 приложение PythonRu") 

lbl = Label(window, text="Привет",
 font=("Arial Bold", 50)) 

lbl.grid(column=0, row=0) 

window.mainloop()

Задание 3 : Сменить дизайн в примере

 
Пример 7. Окно с кнопкой (Описание свойств кнопки)
from tkinter import *

root = Tk()

root.title("GUI на Python")

root.geometry("300x250")

btn = Button(text="Hello",          # текст кнопки

             background="#555",     # фоновый цвет кнопки

             foreground="#ccc",     # цвет текста

             padx="20",             # отступ от границ до содержимого по горизонтали

             pady="8",              # отступ от границ до содержимого по вертикали

             font="16"              # высота шрифта

             )

btn.pack()

root.mainloop()

 

 

 
Пример 7.1. Окно с кнопкой описание
# подключаем модуль tkinter

from tkinter import *

# создаем главное окно

root=Tk()

root.title("Моя первая программа на tk")

root.geometry('300x100')

# функция, выводящая приветствие

def printText(event):

    print('Привет!')

# создаем объект типа кнопка (Button)

button1=Button(root,text='Вывод текста',width=12, height=2)

# связываем нажатие ЛКМ по кнопке с функцией вывода приветствия

button1.bind('<Button-1>',printText)

# отображаем кнопку в главном окне (это самый простой способ)

button1.pack()

# отобразим программу в бесконечном цикле, всегда в конце программы

root.mainloop()

 

 

Пример8 Окно с кнопкой и функцией, выводящей
приветствие


# подключаем модуль tkinter

 
from tkinter import *

# создаем главное окно

root=Tk()

root.title("Моя первая программа на tk")

root.geometry('300x100')

# функция, выводящая приветствие

def printText(event):

    print('Привет!')

# создаем объект типа кнопка (Button)

button1=Button(root, text='Вывод текста',width=12, height=2)

# связываем нажатие ЛКМ по кнопке с функцией вывода приветствия

button1.bind('<Button-1>', printText)

# отображаем кнопку в главном окне (это самый простой способ)

button1.pack()

 

# отобразим программу в бесконечном цикле, всегда в конце программы

 
root.mainloop()

ПримерДве  Кнопки
from tkinter import *

def button_clicked():

    print ("Клик!")

root=Tk()

# кнопка по умолчанию

button1 = Button()

button1.pack()

# кнопка с указанием родительского виджета и
несколькими аргументами

 
button2 = Button(root, bg="red", text="Кликни меня!",
command=button_clicked)

button2.pack()

root.mainloop()


Пример 10. Кнопка с функцией отзыва
from tkinter import *   

def clicked(): 

    lbl.configure(text="Я же просил...") 

window = Tk() 

window.title("Добро пожаловать в приложение PythonRu") 

window.geometry('400x250') 

 
lbl = Label(window, text="Привет", font=("Arial Bold", 50)) 

lbl.grid(column=0, row=0) 

btn = Button(window, text="Не нажимать!", command=clicked) 

btn.grid(column=1, row=0) 

window.mainloop()

 

 

Виджет Checkbutton  - выбор по условию

Пример11     Кнопка выбор - Checkbutton  –логическая функция

 

 
from tkinter import
from tkinter.ttk import Checkbutton
window = Tk()
window.title("Добро пожаловать в
приложение
PythonRu")
window.geometry('400x250')
chk_state = BooleanVar() 
chk_state.set(True)  # задайте проверку состояния
чекбокса 
chk = Checkbutton(window, text='Выбрать', var=chk_state
chk.grid(column=0, row=0) 
window.mainloop()

Пример12 Окно с отзывом после клика
from tkinter import * 
def clicked(): 
    
res = "Привет ника!!".format(txt.get()) 
   
lbl.configure(text=res)
window = Tk() 
window.title("Добро пожаловать в приложение PythonRu") 

 

 
window.geometry('400x250') 
lbl = Label(window, text="Привет") 
lbl.grid(column=0, row=0) 
txt = Entry(window,width=10) 
txt.grid(column=1, row=0) 
btn = Button(window, text="Клик!", command=clicked
btn.grid(column=2, row=0) 

 
window.mainloop()


Пример 13 Выбор позиций
from tkinter import * 
from tkinter.ttk import Combobox  
window = Tk() 
window.title("Добро пожаловать в приложение PythonRu")
window.geometry('400x250') 
combo = Combobox(window)
combo['values'] = (1, 2, 3, 4, 5, "Привет") 
combo.current(1)  # установите вариант по умолчанию
combo.grid(column=0, row=0) 
window.mainloop()


Пример 14. Прокрутка  в окне Виджет
Spinbox
from tkinter import *
window = Tk() 
window.title("Добро пожаловать в приложение PythonRu") 
window.geometry('600x350')
spin = Spinbox(window, from_=0, to=100, width=5)
spin.grid(column=0, row=0) 
window.mainloop()

 

 


Пример 15  Анимация с кнопками
from tkinter import *
from tkinter import messagebox
def b1(event):
    root.title("Python")
def b3(event):
    root.title("JS")
root = Tk()
root.title("GUI
на Python")
root.geometry("300x250")
message = StringVar()
python_lang = IntVar()
python_checkbutton = Checkbutton(text="Python", variable=python_lang,
                                 onvalue=1, offvalue=0, padx=15, pady=10)
python_checkbutton.grid(row=0, column=0, sticky=W)
javascript_lang = IntVar()
javascript_checkbutton = Checkbutton(text="JavaScript", variable=javascript_lang,
                                     onvalue=1, offvalue=0, padx=15, pady=10)
javascript_checkbutton.grid(row=1, column=0, sticky=W)
vares = [[python_lang, 'python'], [javascript_lang, 'javascript']]
text = Text(width=25, height=5, bg="darkgreen", fg='white', wrap=WORD)
text.grid(row=2, column=0, sticky=W)
def b1(event):
    text.delete('1.0', END)
    for ch in vares:
        if ch[0].get():
            text.insert(1.0, ch[1] + '\n')
def b3(event):
    text.delete('1.0', END)
    for ch in vares:
        if not ch[0].get():
            text.insert(1.0, ch[1] + '\n')
root.minsize(width = 500, height=400)
text.bind('<Button-1>',b1)
text.bind('<Button-3>',b3)
root.mainloop()

 

Пример 16 При нажатии на файл выпадает  «Новый»
from tkinter import

 

 
from tkinter import Menu     

window = Tk() 

window.title("Добро пожаловать в приложение PythonRu") 

window.geometry('400x250') 

menu = Menu(window) 

new_item = Menu(menu) 

new_item.add_command(label='Новый') 

menu.add_cascade(label='Файл', menu=new_item) 

window.config(menu=menu) 

window.mainloop()

 
Пример 17 При нажатии на файл выпадает  «Новый»- Изменить

from tkinter import *  

window = Tk() 

window.title("Добро пожаловать в приложение PythonRu") 

window.geometry('400x250') 

menu = Menu(window) 

new_item = Menu(menu) 

new_item.add_command(label='Новый') 

new_item.add_separator() 

new_item.add_command(label='Изменить') 

menu.add_cascade(label='Файл', menu=new_item) 

window.config(menu=menu) 

window.mainloop()

  Пример 18 Окно с вкладками  виджет  tab_control = ttk.Notebook(window 

window = Tk() 

window.title("Добро пожаловать в приложение PythonRu") 

window.geometry('400x250') 

tab_control = ttk.Notebook(window) 

 
tab1 = ttk.Frame(tab_control) 

tab2 = ttk.Frame(tab_control) 

tab_control.add(tab1, text='Первая') 

tab_control.add(tab2, text='Вторая') 

lbl1 = Label(tab1, text='Вкладка 1') 

lbl1.grid(column=0, row=0) 

lbl2 = Label(tab2, text='Вкладка 2') 

lbl2.grid(column=0, row=0) 

tab_control.pack(expand=1, fill='both') 

 
window.mainloop()

Пример 19 матрешка из 3 –х окон
               from tkinter import Label
              label= Label(None,text='1
метка Hello
             
приветсмени окно ')

label.pack()

label.mainloop()

label= Label(None,text='2 метка  Hello привет  смени окно ')

label.pack()

label.mainloop()

label= Label(None,text=' 3  метка привет Закрой меня совсем ')

label.pack()

label.mainloop()

 
  Пример 20  Две  кнопки  - смена цвета кнопки (Матрешка)
from tkinter import *

clicks = 0

def click_button():

    global clicks

    clicks += 1

    root.title("Clicks {}".format(clicks))

root = Tk()

 
root.title(" 1 - кнопка")

root.geometry("300x250")

btn = Button(text="Нажми , нажми и закрой
 -смени цвет ", background="red", foreground="yellow",

             padx="20", pady="8", font="16",
command=click_button)

btn.pack()

root.mainloop()

def click_button():

    global clicks

    clicks += 1

    root.title("Clicks {}".format(clicks))

root = Tk()

root.title(" 2- кнопка")

root.geometry("150x150")

btn = Button(text="Нажми и закрой окно", background="yellow", foreground="blue",

             padx="40", pady="40", font="16", command=click_button)

btn.pack()

root.mainloop()

 
Пример  21 . Обработчик событий
 from tkinter import * 
window 
= Tk() 
window
.title("Мое приложение")
window.geometry('350x200') 
lbl 
= Label(window, text="Метка")
lbl.grid(column=0, row=0)
# текстовое поле
txt = Entry(window,width=10)
txt.grid(column=1, row=0)
def btnClicked():
        lbl.configure(text="Вы нажали на кнопку!!!")
# window - ссылка на окно
# text - текст кнопки
# command - ссылка на обработчик нажатия клавиши      
btn = Button(window, text="Нажмите на кнопку", command=btnClicked)
btn.grid(column=1, row=0) 
window
.mainloop()

 Раздел 4   . Методы виджетов Примеры

configure, config

Виджеты могут быть сконфигурированы во время создания, но иногда необходимо изменить конфигурацию виджета во время исполнения программы. Для этого используется метод configure (или его синоним config). Также можно использовать квадратные скобки (widget['option'] = new_value).
 Пример 22  программа выводит текущее время, после клика по кнопке:

from Tkinter import *

import time

 
def button_clicked():

    # изменяем текст кнопки

    button['text'] = time.strftime('%H:%M:%S')

root=Tk()

# создаём виджет

button = Button(root)

# конфигурируем виджет после создания

button.configure(text=time.strftime('%H:%M:%S'),
 command
=button_clicked)

# также можно использовать квадратные скобки:

# button['text'] = time.strftime('%H:%M:%S')

# button['command'] = button_clicked

button.pack()

root.mainloop()

 

В этом коде функция button_clicked вызывается каждый раз, когда пользователь кликает по кнопке.

cget

Метод cget является обратным к методу configure. Он предназначен для получения информации о конфигурации виджета. Здесь как и в случае с configure можно использовать квадратные скобки (value = widget['option']).
Пример 23 После клика на кнопку программа показывает цвет кнопки и меняет его на другой:

 
from Tkinter import *

from random import random

def button_clicked():

    button['text'] = button['bg'] # показываем
 
предыдущий цвет кнопки

    bg = '#%0x%0x%0x' % (int(random()*16),
 
int(random()*16), int(random()*16))

    button['bg'] = bg

    button['activebackground'] = bg

root=Tk()

button = Button(root, command=button_clicked)

button.pack()
root
.mainloop()

 

destroy

Уничтожение виджета и всех его потомков. Стоит отметить, что если необходимо только на время спрятать какой-либо виджет, то лучше пользоваться упаковщиком grid и методом grid_remove:

Пример 24 При нажатии на кнопку текст прячется пря
from Tkinter import *

 
def hide_show():

    if label.winfo_viewable():

        label.grid_remove()

    else:

        label.grid()

root=Tk()

label = Label(text=u'Я здесь!')

label.grid()

button = Button(command=hide_show,
text
=u"Спрятать/показать")

button.grid()

root.mainloop()

Использование grid_remove позволяет сохранять взаимное расположение виджетов.

grab_Методы семейства grab_ предназначены для управления потоком события. Виджет, захвативший поток, будет получать все события окна или приложения.

Пример25  приложение захватывает глобальный поток и освобождает его через 10 секунд:

from Tkinter import *

root=Tk()

root.after(200, root.grab_set_global)

root.after(10000, root.grab_release)

root.mainloop()

focus

Методы семейства focus_ используются для управления фокусом ввода с клавиатуры. Виджет, имеющий фокус, получает все события с клавиатуры.

Раздел 4"Системные" методы

Эти методы не являются виджет-специфичными, т.е. хотя они являются методами виджетов они влияют на работу интерпретатора tcl/tk.

after, after_idle и after_cancel[3]

Таймеры. С помощью этих методов вы можете отложить выполнение какого-нибудь кода на определённое время.

Пример, 26 часы:



 
from Tkinter import *
import time
def tick():
    label.after(200, tick)
    label['text'] = time.strftime('%H:%M:%S')
root=Tk()
label = Label(font='sans 20')
label.pack()
label.after_idle(tick)

root.mainloop()

update и update_idletasks[4]

Две функции, для работы с очередью задач. Их выполнение вызывает обработку отложенных задач.

update_idletasks выполняет задачи, обычно откладываемые "на потом", когда приложение будет простаивать. Это приводит к прорисовке всех виджетов, расчёту их расположения и т.д. Обычно эта функция используется если были внесены изменения в состояние приложения, и вы хотите, чтобы эти изменения были отображены на экране немедленно, не дожидаясь завершения сценария.

update обрабатывает все задачи, стоящие в очереди. Обычно эта функция используется во время "тяжёлых" расчётов, когда необходимо чтобы приложение оставалось отзывчивым на действия пользователя.

Раздел 5  Справка по Основным виджетам с примерами

Label

Label - это виджет, предназначенный для отображения какой-либо надписи без возможности редактирования пользователем. Имеет те же свойства, что и перечисленные свойства кнопки.

Toplevel

Toplevel[5] - окно верхнего уровня. Обычно используется для создания многооконных программ, а также для диалоговых окон Такие же окна готовятся в Джаваскрипт при вводе данных или выводе

Методы виджета приведены в Курсе по библиотеке Tkinter  языка Python

Эти же методы могут быть использованы для корневого (root) окна.

Пример:
from Tkinter import *

def window_deleted():
    print ('Окно закрыто')
    root.quit() # явное указание на выход из программы
root=Tk()
root.title(u'Пример приложения')
root.geometry('500x400+300+200') # ширина=500, высота=400, x=300, y=200
root.protocol('WM_DELETE_WINDOW', window_deleted) # обработчик закрытия окна
root.resizable(True, False) # размер окна может быть изменён только по горизонтали

 
root.mainloop()
Пример Текст из модального окна
from tkinter import Tk, Toplevel, Button, Label   

def func():

    top = Toplevel(root)

    button_top_level = Button(top, text='Нажми',

 command=lambda: label.config(text='Текст из модального

 окна')).pack() 

  

root = Tk()

label = Label(root, text='Текст')

label.pack()

button = Button(root, text='openModal', command=func).pack()

root.mainloop()

Button

Виджет Button - самая обыкновенная кнопка, которая используется в тысячах программ. Пример кода:

from Tkinter import *
root=Tk()
button1=Button(root,text='ok',width=25,height=5,bg='black',fg='red',font='arial 14')
button1.pack()
root.mainloop()
Разберем этот небольшой код. За создание, собственно, окна, отвечает класс Tk(), и первым делом нужно создать экземпляр этого класса. Этот экземпляр принято называть root, хотя вы можете назвать его как угодно. Далее создаётся кнопка, при этом мы указываем её свойства (начинать нужно с указания окна, в примере - root). Здесь перечислены некоторые из них:
text - какой текст будет отображён на кнопке (в примере - ок)
width,height - соответственно, ширина и длина кнопки.

·         bg - цвет кнопки (сокращенно от background, в примере цвет - чёрный)

·         fg - цвет текста на кнопке (сокращённо от foreground, в примере цвет - красный)

·         font - шрифт и его размер (в примере - arial, размер - 14)

Далее, нашу кнопку необходимо разместить на окне. Для этого, в Tkinter используются специальные упаковщики( pack(), place(), grid() ). Поподробнее об упаковщиках узнаем позже. Пока, чтобы разместить несколько виджетов на окне, будем применять самый простой упаковщик pack(). В конце программы, нужно использовать функцию mainloop (см. пример), иначе окно не будет создано..

Entry

Entry - это виджет, позволяющий пользователю ввести одну строку текста. Имеет дополнительное свойство bd (сокращённо от borderwidth), позволяющее регулировать ширину границы.

·         borderwidth - ширина бордюра элемента

·         bd - сокращение от borderwidth

·         width - задаёт длину элемента в знакоместах.

·         show - задает отображаемый символ.

Text

 
Text - это виджет, который позволяет пользователю ввести любое количество текста. Имеет дополнительное свойство wrap, отвечающее за перенос (чтобы, например, переносить по словам, нужно использовать значение WORD).Например:

from Tkinter import *
root=Tk()
text1=Text(root,height=7,width=7,font='Arial 14',
wrap=WORD)
text1.pack()
root.mainloop()
 

Методы insertdelete и get добавляют, удаляют или извлекают текcт. Первый аргумент - место вставки в виде 'x.y', где x – это строка, а y – столбец. Например:

text1.insert(1.0,'Добавить Текст\n\ в начало первой строки')
text1.delete('1.0', END)   # Удалить все
text1.get('1.0', END)      # Извлечь все

Listbox

Listbox - это виджет, который представляет собой список, из элементов которого пользователь может выбирать один или несколько пунктов. Имеет дополнительное свойство selectmode, которое, при значении SINGLE, позволяет пользователю выбрать только один элемент списка, а при значении EXTENDED - любое количество. Пример:



 
from Tkinter import *
root=Tk()
listbox1=Listbox(root,height=5,width=15,selectmode=EXTENDED)
listbox2=Listbox(root,height=5,width=15,selectmode=SINGLE)
list1=[u"Москва",u"Санкт-Петербург",u"Саратов",u"Омск"]
list2=[u"Канберра",u"Сидней",u"Мельбурн",u"Аделаида"]
for i in list1:
    listbox1.insert(END,i)
for i in list2:
    listbox2.insert(END,i)
listbox1.pack()
listbox2.pack()
root.mainloop()

Стоит заметить, что в этой библиотеке для того, чтобы использовать русские буквы в строках, нужно использовать Unicode-строки. В Python 2.x для этого нужно перед строкой поставить букву u, в Python 3.x этого делать вообще не требуется, т.к. все строки в нем изначально Unicode. Кроме того в первой или второй строке файла необходимо указать кодировку файла (в комментарии): coding: utf-8. Чаще всего используется формат в стиле текстового редактора emacs:

# encoding: utf-8

В Python 3.x кодировку файла можно не указывать, в этом случае по умолчанию предполагается utf-8.

Frame

Виджет Frame (рамка) предназначен для организации виджетов внутри окна. Рассмотрим пример:

from tkinter import *


 
root=Tk()
frame1=Frame(root,bg='green',bd=5)
frame2=Frame(root,bg='red',bd=5)
button1=Button(frame1,text=u'Первая кнопка')
button2=Button(frame2,text=u'Вторая кнопка')
frame1.pack()
frame2.pack()
button1.pack()
button2.pack()
root.mainloop()

 
Свойство bd отвечает за толщину края рамки.

Checkbutton

 

 
Checkbutton - это виджет, который позволяет отметить „галочкой“
 определенный пункт в окне. При использовании нескольких пунктов
 нужно каждому присвоить свою переменную. Разберем пример:

from tkinter import *
root=Tk()
var1=IntVar()
var2=IntVar()
check1=Checkbutton(root,text=u'1 пункт',variable=var1,
onvalue=1,offvalue=0)
check2=Checkbutton(root,text=u'2 пункт',
variable=var2,onvalue=1,offvalue=0)
check1.pack()
check2.pack()
root.mainloop()

IntVar() - специальный класс библиотеки для работы с целыми числами. variable - свойство, отвечающее за прикрепление к виджету переменной. onvalue, offvalue - свойства, которые присваивают прикреплённой к виджету переменной значение, которое зависит от состояния(onvalue - при выбранном пункте, offvalue - при невыбранном пункте).

Radiobutton

Виджет Radiobutton выполняет функцию, схожую с функцией виджета Checkbutton. Разница в том, что в виджете Radiobutton пользователь может выбрать лишь один из пунктов. Реализация этого виджета несколько иная, чем виджета Checkbutton:

В этом виджете используется уже одна переменная. В зависимости от того, какой пункт выбран, она меняет своё значение. Самое интересное, что если присвоить этой переменной какое-либо значение, поменяется и выбранный виджет.
from tkinter import *

 
root=Tk()

var=IntVar()

rbutton1=Radiobutton(root,text='1',variable=var,value=1)

rbutton2=Radiobutton(root,text='2',variable=var,value=2)

rbutton3=Radiobutton(root,text='3',variable=var,value=3)

rbutton1.pack()

rbutton2.pack()

rbutton3.pack()

root.mainloop().

 

 

Scale

Scale (шкала) - это виджет, позволяющий выбрать какое-либо значение из заданного диапазона. Свойства:

·        

 
orient - как расположена шкала на окне. Возможные значения: HORIZONTAL, VERTICAL (горизонтально, вертикально).

·         length - длина шкалы.

·         from_ - с какого значения начинается шкала.

·         to - каким значением заканчивается шкала.

·         tickinterval - интервал, через который отображаются метки шкалы.

·         resolution - шаг передвижения (минимальная длина, на которую можно
 передвинуть движок)

Пример кода:

Здесь используется специальный метод get(), который позволяет снять
 с виджета определенное значение, и используется не только в Scale.

Scrollbar

Этот виджет даёт возможность пользователю "прокрутить" другой виджет (например текстовое поле) и часто бывает полезен. Использование этого виджета достаточно нетривиально. Необходимо сделать две привязки: command полосы прокрутки привязываем к методу xview/yview виджета, а xscrollcommand/yscrollcommand виджета привязываем к методу set полосы прокрутки.

Рассмотрим на примере:



 
from tkinter import *
root = Tk()
text = Text(root, height=3, width=60)
text.pack(side='left')
scrollbar = Scrollbar(root)
scrollbar.pack(side='left')
# первая привязка
scrollbar['command'] = text.yview
# вторая привязка
text['yscrollcommand'] = scrollbar.set
root
.mainloop()
Упаковщики


Функция pack() — это так называемый упаковщик, или менеджер расположения. Он отвечает за то, как виджеты будут располагаться на главном окне. Для каждого виджета нужно вызвать метод упаковщика, иначе он не будет отображён. Всего упаковщиков три:

pack(). Автоматически размещает виджеты в родительском окне. Имеет
параметры side, fill, expand. Пример:
from Tkinter import *
root = Tk()
Button(root, text =
'1').pack(side = 'left')

Button(root, text = '2').pack(side = 'top')
Button(root, text = '3').pack(side = 'right')
Button(root, text = '4').pack(side = 'bottom')
Button(root, text = '5').pack(fill = 'both')
root.mainloop()


https://habrastorage.org/storage1/c52ec1c0/b448866b/5bd42223/94921a18.png

grid(). Размещает виджеты на сетке. Основные параметры: row/column – строка/столбец в сетке, rowspan/columnspan – сколько строк/столбцов занимает виджет. Пример
:


from Tkinter import *
root = Tk()
Button(root, text = '1').grid(row = 1, column = 1)
Button(root, text = '2').grid(row = 1, column = 2)
Button(root, text = '__3__').grid(row = 2, column = 1, columnspan = 2)
root.mainloop()


https://habrastorage.org/storage1/cc90ddaa/62713a1b/881567ed/7c4fce8a.png

place(). Позволяет размещать виджеты в указанных координатах с указанными размерами.
Основные
параметрыx, y, width, height. Пример:

from Tkinter import *
root = Tk()
Button(root, text = '1').place(x = 10, y = 10, width = 30)
Button(root, text = '2').place(x = 45, y = 20, height = 15)
Button(root, text = '__3__').place(x = 20, y = 40)
root.mainloop()


https://habrastorage.org/storage1/c6d29a54/9b41410d/e9efc346/af0531cf.png

Клавиатурные символы

Полный список см. man keysyms.

Примеры

<Button-1> или <1> - нажата левая клавиша мыши.

<Alt-Motion> - движение мышью с нажатой на клавиатуре клавишей Alt.

 
<Key> - нажатие любой клавиши на клавиатуре.

Пример:

from Tkinter import *

root=Tk()

def leftclick(event):

    print u'Вы нажали левую кнопку мыши'

def rightclick(event):

    print u'Вы нажали правую кнопку мыши'

button1=Button(root, text=u'Нажми')

button1.pack()

button1.bind('<Button-1>', leftclick)

button1.bind('<Button-3>', rightclick)

root.mainloop()


Дополнительные методы

·         bind_all - создаёт привязку для всех виджетов приложения. Отличие от привязки к окну верхнего уровня заключается в том, что в случае привязки к окну привязываются все виджеты этого окна, а этот метод привязывает все виджеты приложения (у приложения может быть несколько окон).

·         bind_class - создаёт привязку для всех виджетов данного класса

Пример:

 
from Tkinter import *                                                                           

def callback(e):

    print ('Нажата кнопка', e.widget['text'])

root=Tk()

button1 = Button(root, text='1')

button1.pack()

button2 = Button(root, text='2')

button2.pack()

root.bind_class('Button', '<1>', callback)

root.mainloop()

·         bindtags - позволяет изменить порядок обработки привязок. По умолчанию порядок следующий: виджет, класс, окно, all; где виджет - привязка к виджету (bind), класс - привязка к классу (bind_class), окно - привязка к окну (root.bind), all - привязка всех виджетов (bind_all).

Пример, меняем порядок обработки привязок на обратный:

from Tkinter import *

def callback1(e): print 'callback1'

 
def callback2(e): print 'callback2'

def callback3(e): print 'callback3'

def callback4(e): print 'callback4'

root=Tk()

button = Button(root)

button.pack()

button.bind('<1>', callback1)

root.bind_class('Button', '<1>', callback2)

root.bind('<1>', callback3)

root.bind_all('<1>', callback4)

button.bindtags(('all', root, 'Button', button))

root.mainloop()

·         unbind - отвязать виджет от события. В качестве аргумента принимает идентификатор, полученный от метода bind.

·         unbind_all - то же, что и unbind, только для метода bind_all.

·         unbind_class - то же, что и unbind, только для метода bind_class.

Изображения

Для работы с изображениями в Tkinter имеется два класса BitmapImage и PhotoImage. BitmapImage представляет собой простое двухцветное изображение, PhotoImage - полноцветное изображение.

BitmapImage

Конструктор класса принимает следующие аргументы:

·         background и foreground - цвета фона и переднего плана для изображения. Поскольку изображение двухцветное, то эти параметры определяют соответственно чёрный и белый цвет.

·         file и maskfile - пути к файлу с изображением и к маске (изображению, указывающему какие пиксели будут прозрачными).

·         data и maskdata - вместо пути к файлу можно указать уже загруженные в память данные изображения. Данная возможность удобна для встраивания изображения в программу.

Пример:

from Tkinter import *
data = '''#define image_width 15


 
#define image_height 15
static unsigned char image_bits[] = {
   0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 
0x38, 0x1c, 0x30, 0x0c, 0x60, 0x06,
0x60, 0x06, 0xc0, 0x03, 0xc0, 0x03,
 0x60, 0x06, 0x60, 0x06, 0x30, 0x0c,
   0x38, 0x1c, 0x00, 0x00, 0x00, 0x00 };'''
root=Tk()
image = BitmapImage(data=data,
 background='red', foreground='green')
button=Button(root, image=image)
button.pack()
root.mainloop()

PhotoImage

PhotoImage позволяет использовать полноцветное изображение. Кроме того у этого класса есть несколько (достаточно примитивных) методов для работы с изображениями. PhotoImage гарантированно понимает формат GIF.

Аргументы конструктора:

·         file - путь к файлу с изображением.

·         data - вместо пути к файлу можно указать уже загруженные в память данные изображения. Изображения в формате GIF могут быть закодированы с использованием base64. Данная возможность удобна для встраивания изображения в программу.

·         format - явное указание формата изображения.

·         width, height - ширина и высота изображения.

·         gamma - коррекция гаммы.

·         palette - палитра изображения.

Combobox

Виджет Combobox предназначен для отображения списка значений, их выбора или изменения пользователем. В версии tk ему подобен виджет Listbox. Разница заключается в том, что Combobox имеет возможность сворачиваться подобно свитку, а Listbox будет отображаться всегда открытым. Что бы отобразить Combobox с заранее заданными значениями в форме, достаточно сделать следующее:

import tkinter as tk
import tkinter.ttk as ttk
root = tk.Tk()
frame = tk.Frame(root)
frame.grid()
combobox = ttk.Combobox(frame,values = [u"ОДИН",u"ДВА",u"ТРИ"],height=3)
#frame - задает родительский виджет, на его территории будет располагаться Combobox
#values - задает набор значений, которые будут содержаться в Combobox изначально
#height - задает высоту выпадающего списка. Если число элементов списка меньше 11, то можно не задавать.
#Если не задано при количестве элементов больше 10, то с правой стороны появится полоса прокрутки.
#Если в нашем примере задать значение height меньше трех, то с правой стороны появится полоса прокрутки,
#но она будет недоступна, а все элементы будут отображаться одновременно.
combobox.set(u"ОДИН")#с помощью этой строчки мы установим Combobox в значение ОДИН изначально
combobox.grid(column=0,row=0)#Позиционируем Combobox на форме


 
root.mainloop()
 
 
 
 

Progressbar

Виджет отображает уровень загрузки (анимация)

·         length - длина полосы.

·         start

·         Запускает бесконечный цикл загрузки. Шаг длиною
 1 выполняется один раз в указанное время (в миллисекундах).

·        

 
stop

·         Останавливает цикл загрузки.

·         step

·         Продвигает загрузку на заданное количество шагов.

·         import tkinter as tk

·         import tkinter.ttk as ttk

·         root = tk.Tk()

·         pb = ttk.Progressbar(root, length=100)

·         pb.pack()

·         pb.start(100)

·         root.mainloop()

 

 

                                                 Заключение

В данной  методической разработке (часть 1 ) представлен основной материал по созданию примеров в объектно-ориентированном аспекте  на языке Питон с помощью библиотеки Tkinter. Целью данной работы  является систематизация  теоретического материала для практического  и справочного  его применения.
Начинающий программист найдет  здесь нужный теоретический материал, выберет практические примеры и ссылки на интернет источники. Задачей автора является не только познакомить обучающихся школ с языком программирования Питон,  но и направить их на дальнейшее исследование в программировании. Тем более этот материал  с интерактивными примерами является основой разработки
web-   приложений. В интернет ресурсах имеется богатый теоретический материал для дальнейшего создания движков на языке Питон. Желаю успехов в освоении и изучении языка Питон и его библиотек.

                                           Используемые ссылки:
1 Курс по библиотеке Tkinter языка Python    https://wikiversity.wikia.org/language-wikis
https://ru.wikiversity.org/wiki/Курс_по_библиотеке_Tkinter_языка_Python
2.
Обучение Python GUI (уроки по Tkinter) http://espressocode.top/python-gui-tkinter/
https://pythonru.com/uroki/obuchenie-python-gui-uroki-po-tkinter

3. Введение в Tkinter , Хабр    https://habr.com/ru/post/133337/
4. Форум программистов  https://www.cyberforum.ru/python-graphics/thread2411899.html


















 

 

 



                                   


Просмотрено: 0%
Просмотрено: 0%
Скачать материал
Скачать материал "Методические рекомендации с примерами программных кодов на языке Python GUI (уроки по Tkinter) для учащихся 8-11 классов (часть1)"

Методические разработки к Вашему уроку:

Получите новую специальность за 2 месяца

Директор детского оздоровительного лагеря

Получите профессию

Няня

за 6 месяцев

Пройти курс

Рабочие листы
к вашим урокам

Скачать

Скачать материал

Найдите материал к любому уроку, указав свой предмет (категорию), класс, учебник и тему:

6 672 305 материалов в базе

Материал подходит для УМК

  • «Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.

    «Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.

    Тема

    3.2.1. Основы графических технологий

    Больше материалов по этой теме
Скачать материал

Другие материалы

Практическая работа № 2 Лицензионные и свободно распространяемые программные продукты.
  • Учебник: «Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
  • Тема: 2.6. Программное обеспечение ПК
  • 24.03.2020
  • 2754
  • 12
«Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
Самостоятельная работа по теме: «Определение скорости передачи информации», как дидактическое средство освоения знаний в обобщающей форме
  • Учебник: «Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
  • Тема: 1.5. Информационные процессы
Рейтинг: 5 из 5
  • 20.03.2020
  • 1223
  • 43
«Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
Разработка урока по информатике "Примеры использования компьютерных моделей различных процессов"
  • Учебник: «Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
  • Тема: 1.5.4. Обработка информации
  • 16.03.2020
  • 679
  • 20
«Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
Задания по теме "Решение логических задач табличным способом"
  • Учебник: «Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.
  • Тема: 1.6.4. Методы решения логических задач
Рейтинг: 4 из 5
  • 06.03.2020
  • 56823
  • 2414
«Информатика (углублённый уровень) (в 2 частях)», Семакин И.Г., Шеина Т.Ю., Шестакова Л.В.

Вам будут интересны эти курсы:

Оставьте свой комментарий

Авторизуйтесь, чтобы задавать вопросы.

  • Скачать материал
    • 23.04.2020 2630
    • DOCX 386.4 кбайт
    • 103 скачивания
    • Оцените материал:
  • Настоящий материал опубликован пользователем Глушков Николай Васильевич. Инфоурок является информационным посредником и предоставляет пользователям возможность размещать на сайте методические материалы. Всю ответственность за опубликованные материалы, содержащиеся в них сведения, а также за соблюдение авторских прав несут пользователи, загрузившие материал на сайт

    Если Вы считаете, что материал нарушает авторские права либо по каким-то другим причинам должен быть удален с сайта, Вы можете оставить жалобу на материал.

    Удалить материал
  • Автор материала

    Глушков Николай Васильевич
    Глушков Николай Васильевич
    • На сайте: 8 лет и 11 месяцев
    • Подписчики: 0
    • Всего просмотров: 47001
    • Всего материалов: 22

Ваша скидка на курсы

40%
Скидка для нового слушателя. Войдите на сайт, чтобы применить скидку к любому курсу
Курсы со скидкой

Курс профессиональной переподготовки

Секретарь-администратор

Секретарь-администратор (делопроизводитель)

500/1000 ч.

Подать заявку О курсе

Курс повышения квалификации

Применение компьютерных моделей при обучении математике и информатике в рамках ФГОС ООО

72 ч. — 180 ч.

от 2200 руб. от 1100 руб.
Подать заявку О курсе
  • Сейчас обучается 47 человек из 26 регионов
  • Этот курс уже прошли 181 человек

Курс профессиональной переподготовки

Информатика: теория и методика преподавания в образовательной организации

Учитель информатики

300/600 ч.

от 7900 руб. от 3650 руб.
Подать заявку О курсе
  • Сейчас обучается 495 человек из 73 регионов
  • Этот курс уже прошли 1 533 человека

Курс повышения квалификации

Методика преподавания информатики в начальных классах

72 ч. — 180 ч.

от 2200 руб. от 1100 руб.
Подать заявку О курсе
  • Этот курс уже прошли 67 человек

Мини-курс

Методы решения нестандартных математических задач

3 ч.

780 руб. 390 руб.
Подать заявку О курсе
  • Этот курс уже прошли 12 человек

Мини-курс

Интегрированное управление бизнес-процессами

3 ч.

780 руб. 390 руб.
Подать заявку О курсе

Мини-курс

Путь к осознанным решениям и здоровым отношениям

3 ч.

780 руб. 390 руб.
Подать заявку О курсе
  • Сейчас обучается 104 человека из 40 регионов
  • Этот курс уже прошли 17 человек