Есть несколько способов взаимодействия с программой: через командную строку или через графический интерфейс. GUI – это настольное приложение, которое предоставляет пользовательский интерфейс, помогающий визуально взаимодействовать с компьютером или любым электронным устройством с помощью графических значков. Благодаря этому графический интерфейс расширяет круг пользователей нашего программного обеспечения.
Python предоставляет множество пакетов, таких как Kivy, PythonQt, wxPython, Tkinter и т.д. для создания графических интерфейсов. Среди этих популярных пакетов, поддерживаемых Python для создания приложений с графическим интерфейсом, – это Tkinter.
Tkinter в Python – это стандартная встроенная библиотека графического интерфейса пользователя, которая предоставляет пользователям объектно-ориентированный интерфейс для набора инструментов графического интерфейса пользователя Tk. Модуль Tkinter является наиболее предпочтительным интерфейсом для построения графического интерфейса для программистов из-за его простоты использования.
КРАСИВЫЙ ДИЗАЙН PYTHON ПРИЛОЖЕНИЯ при помощи библиотеки CUSTOMTKINTER
Программисты могут быстро создавать приложения с графическим интерфейсом, используя Tkinter. В этом руководстве мы будем использовать Tkinter для создания приложений с графическим интерфейсом.
Создание образца окна
Введение в Tkinter
Tkinter – это кроссплатформенная библиотека для разработки графического интерфейса на языке Python (начиная с Python 3.0 переименована в tkinter). Tkinter расшифровывается как Tk interface, и является интерфейсом к Tcl/Tk.
Tkinter входит в стандартный дистрибутив Python.
Весь код в этой статье написан для Python 2.x.
Чтобы убедиться, что Tkinter установлен и работает, воспользуемся стандартной функцией Tkinter _test():
import Tkinter Tkinter._test()
После выполнения данного кода должно появиться следующее окно:
Отлично, теперь можно приступать к написанию нескольких простых программ для демонстрации основных принципов Tkinter.
Hello world
Конечно, куда же без него. Первым делом нам нужно создать главное окно, написав
from Tkinter import * root = Tk()
Да-да, всего одна строка, это вам не WinAPI (=. Теперь создадим кнопку, при нажатии на которую будет выводиться текст в консоль:
def Hello(event): print «Yet another hello world» btn = Button(root, #родительское окно text=»Click me», #надпись на кнопке width=30,height=5, #ширина и высота bg=»white»,fg=»black») #цвет фона и надписи btn.bind(«», Hello) #при нажатии ЛКМ на кнопку вызывается функция Hello btn.pack() #расположить кнопку на главном окне root.mainloop()
Всё просто, не так ли? Создаём экземпляр класса Button, указываем родителя и при желании список параметров. Есть еще немало параметров, таких как шрифт, толщина рамки и т.д.
#Изи TKINTER за 5 минут
Затем привязываем к нажатию на кнопку событие (можно привязать несколько разных событий в зависимости, например, от того, какой кнопкой мыши был нажат наш btn.
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()
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()
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()
Теперь для демонстрации других возможностей Tkinter, напишем простейший
Текстовый редактор
Без лишних слов приведу код:
from Tkinter import * import tkFileDialog def Quit(ev): global root root.destroy() def LoadFile(ev): fn = tkFileDialog.Open(root, filetypes = [(‘*.txt files’, ‘.txt’)]).show() if fn == »: return textbox.delete(‘1.0’, ‘end’) textbox.insert(‘1.0’, open(fn, ‘rt’).read()) def SaveFile(ev): fn = tkFileDialog.SaveAs(root, filetypes = [(‘*.txt files’, ‘.txt’)]).show() if fn == »: return if not fn.endswith(«.txt»): fn+=».txt» open(fn, ‘wt’).write(textbox.get(‘1.0’, ‘end’)) root = Tk() panelFrame = Frame(root, height = 60, bg = ‘gray’) textFrame = Frame(root, height = 340, width = 600) panelFrame.pack(side = ‘top’, fill = ‘x’) textFrame.pack(side = ‘bottom’, fill = ‘both’, expand = 1) textbox = Text(textFrame, font=’Arial 14′, wrap=’word’) scrollbar = Scrollbar(textFrame) scrollbar[‘command’] = textbox.yview textbox[‘yscrollcommand’] = scrollbar.set textbox.pack(side = ‘left’, fill = ‘both’, expand = 1) scrollbar.pack(side = ‘right’, fill = ‘y’) loadBtn = Button(panelFrame, text = ‘Load’) saveBtn = Button(panelFrame, text = ‘Save’) quitBtn = Button(panelFrame, text = ‘Quit’) loadBtn.bind(«», LoadFile) saveBtn.bind(«», SaveFile) quitBtn.bind(«», Quit) loadBtn.place(x = 10, y = 10, width = 40, height = 40) saveBtn.place(x = 60, y = 10, width = 40, height = 40) quitBtn.place(x = 110, y = 10, width = 40, height = 40) root.mainloop()
Здесь есть несколько новых моментов.
Во-первых, мы подключили модуль tkFileDialog для диалогов открытия/закрытия файла. Использовать их просто: нужно создать объект типа Open или SaveAs, при желании задав параметр filetypes, и вызвать его метод show(). Метод вернёт строку с именем файла или пустую строку, если пользователь просто закрыл диалог.
Во-вторых, мы создали два фрейма. Фрейм предназначен для группировки других виджетов. Один содержит управляющие кнопки, а другой — поле для ввода текста и полосу прокрутки.
Это сделано, чтобы textbox не налезал на кнопки и всегда был максимального размера.
В-третьих, появился виджет Text. Мы его создали с параметром wrap=’word’, чтобы текст переносился по словам. Основные методы Text: get, insert, delete. Get и delete принимают начальный и конечный индексы. Индекс — это строка вида ‘x.y’, где x — номер символа в строке, а y — номер строки, причём символы нумеруются с 1, а строки — с 0. То есть на самое начала текста указывает индекс ‘1.0’.
Для обозначения конца текста есть индекс ‘end’. Также допустимы конструкции вида ‘1.end’.
B в-четвёртых, мы создали полосу прокрутки (Scrollbar). После создания её нужно связать с нужным виджетом, в данном случае, с textbox. Связывание двустороннее:
scrollbar[‘command’] = textbox.yview textbox[‘yscrollcommand’] = scrollbar.set
Вот и всё. Tkinter – это, безусловно, мощная и удобная библиотека. Мы осветили не все её возможности, остальные — тема дальнейших статей.
Источник: habr.com
Учебник по Tkinter в Python – руководство и примеры
Python предоставляет стандартную библиотеку Tkinter для создания графического пользовательского интерфейса для настольных приложений.
Разработка настольных приложений с помощью python Tkinter – не сложная задача. Пустое окно верхнего уровня Tkinter можно создать, выполнив следующие действия:
- Импортировать модуль Tkinter.
- Создайте главное окно приложения.
- Добавьте в окно виджеты, такие как метки, кнопки, рамки и т. д.
- Вызовите основной цикл событий, чтобы действия могли отображаться на экране компьютера пользователя.
# !/usr/bin/python3 from tkinter import * #creating the application main window. top = Tk() #Entering the event main loop top.mainloop()
Виджеты
Существуют различные виджеты, такие как button, canvas, checkbutton, entry и т. д., которые используются для создания приложений с графическим интерфейсом пользователя Python.
1 | Button | Виджет кнопки используется для добавления различных типов кнопок в приложение Python. |
2 | Canvas | Этот виджет используется для рисования на холсте в окне. |
3 | Checkbutton | Используется для отображения кнопки-флажка в окне. |
4 | Entry | Виджет ввода используется для отображения однострочного текстового поля. Обычно он используется для принятия пользовательских значений. |
5 | Frame | Этот виджет можно определить как контейнер, в который можно добавить и организовать другой виджет. |
6 | Label | Метка – это текст, используемый для отображения некоторого сообщения или информации о других виджетах. |
7 | ListBox | Виджет ListBox используется для отображения пользователю списка параметров. |
8 | Menubutton | Menubutton используется для отображения пунктов меню пользователю. |
9 | Menu | Он используется для добавления пользователю пунктов меню. |
10 | Message | Виджет сообщения используется для отображения окна сообщения пользователю. |
11 | Radiobutton | Радиокнопка отличается от кнопки-флажка. Здесь пользователю предоставляются различные варианты, и пользователь может выбрать среди них только один вариант. |
12 | Scale | Используется для предоставления пользователю ползунка. |
13 | Scrollbar | Он предоставляет пользователю полосу прокрутки, чтобы пользователь мог прокручивать окно вверх и вниз. |
14 | Text | Он отличается от Entry, поскольку предоставляет пользователю многострочное текстовое поле, чтобы пользователь мог писать текст и редактировать текст внутри него. |
15 | Toplevel | Используется для создания отдельного оконного контейнера. |
16 | Spinbox | Это виджет ввода, используемый для выбора вариантов значений. |
17 | PanedWindow | Похож на виджет-контейнер, который содержит горизонтальные или вертикальные панели. |
18 | LabelFrame | LabelFrame – это виджет, который действует как контейнер. |
19 | MessageBox | Этот модуль используется для отображения окна сообщения в настольных приложениях. |
Геометрия
Геометрия Tkinter определяет метод, с помощью которого виджеты отображаются на дисплее. Python Tkinter предоставляет следующие геометрические методы.
- Метод pack().
- Метод grid().
- Метод place().
Давайте подробно обсудим каждый из них.
Метод Python Tkinter pack()
Метод pack() используется для организации виджета в блоке. Виджетами позиций, добавленными в приложение Python с помощью метода pack(), можно управлять с помощью различных параметров, указанных в вызове метода.
Однако элементов управления меньше, а виджеты обычно добавляются менее организованно.
Синтаксис использования pack() приведен ниже:
widget.pack(options)
Список возможных параметров, которые можно передать в pack(), приведен ниже.
- expand: если для параметра «expand» задано значение «истина», виджет расширяется, заполняя любое пространство.
- Fill: по умолчанию для заливки установлено значение NONE. Однако мы можем установить для него значение X или Y, чтобы определить, есть ли в виджете лишнее пространство.
- size: представляет сторону родительского элемента, с которой виджет должен быть размещен в окне.
# !/usr/bin/python3 from tkinter import * parent = Tk() redbutton = Button(parent, text = «Red», fg = «red») redbutton.pack( side = LEFT) greenbutton = Button(parent, text = «Black», fg = «black») greenbutton.pack( side = RIGHT ) bluebutton = Button(parent, text = «Blue», fg = «blue») bluebutton.pack( side = TOP ) blackbutton = Button(parent, text = «Green», fg = «red») blackbutton.pack( side = BOTTOM) parent.mainloop()
Метод Python Tkinter grid()
Менеджер геометрии grid() организует виджеты в табличной форме. Мы можем указать строки и столбцы в качестве параметров при вызове метода. Мы также можем указать диапазон столбцов (ширину) или диапазон строк (высоту) виджета.
Это более организованный способ размещения виджетов в приложении Python. Синтаксис использования grid() приведен ниже:
widget.grid(options)
Список возможных параметров, которые можно передать внутри метода grid():
- Column
Номер столбца, в который будет помещен виджет. Крайний левый столбец представлен 0. - Columnspan
Ширина виджета. Он представляет количество столбцов, до которых столбец расширяется. - ipadx, ipadyПредставляет количество пикселей для заполнения виджета внутри границы.
- padx, pady
Представляет количество пикселей для размещения виджета за пределами его границы. - row
Номер строки, в которую должен быть помещен виджет. Самая верхняя строка представлена 0. - rowspan
Высота виджета, то есть номер строки, до которой расширяется виджет. - Sticky
Если ячейка больше, чем виджет, то используется Sticky, чтобы указать положение виджета внутри ячейки. Это может быть соединение букв, представляющих позицию виджета. Это может быть N, E, W, S, NE, NW, NS, EW, ES.
# !/usr/bin/python3 from tkinter import * parent = Tk() name = Label(parent,text = «Name»).grid(row = 0, column = 0) e1 = Entry(parent).grid(row = 0, column = 1) password = Label(parent,text = «Password»).grid(row = 1, column = 0) e2 = Entry(parent).grid(row = 1, column = 1) submit = Button(parent, text = «Submit»).grid(row = 4, column = 0) parent.mainloop()
Метод Python Tkinter place()
Менеджер place() упорядочивает виджеты по определенным координатам x и y.
widget.place(options)
Список возможных вариантов приведен ниже:
- Anchor: он представляет собой точное положение виджета в контейнере. Значение по умолчанию (direction) – NW (левый верхний угол).
- bordermode: значение по умолчанию для типа границы – INSIDE, что означает игнорирование родительского элемента внутри границы. Другой вариант – OUTSIDE.
- height, width: это высота и ширина в пикселях.
- relheight, relwidth: представлен как число с плавающей запятой между 0,0 и 1,0, указывающее долю высоты и ширины родительского элемента.
- relx, rely: представлен в виде числа с плавающей запятой между 0,0 и 1,0, которое представляет собой смещение в горизонтальном и вертикальном направлениях.
- x, y: это относится к горизонтальному и вертикальному смещению в пикселях.
# !/usr/bin/python3 from tkinter import * top = Tk() top.geometry(«400×250») name = Label(top, text = «Name»).place(x = 30,y = 50) email = Label(top, text = «Email»).place(x = 30, y = 90) password = Label(top, text = «Password»).place(x = 30, y = 130) e1 = Entry(top).place(x = 80, y = 50) e2 = Entry(top).place(x = 80, y = 90) e3 = Entry(top).place(x = 95, y = 130) top.mainloop()
Прежде чем изучать Tkinter, вы должны иметь базовые знания Python. Наше руководство по Python Tkinter разработано, чтобы помочь новичкам и профессионалам.
Источник: pythonpip.ru