Что такое extended listbox

ListBox и ComboBox

Класс ListBox

Класс ListBox представляет распространенный компонент среды Windows — списки переменной длины, которые позволяют пользователю выбрать один из элементов.

Разные элементы управления обрабатывают вложенное в них содержимое по-разному. Объект ListBox хранит все вложенные объекты в своей коллекции Items.

ListBox является довольно гибким элементом управления. Он может хранить не только объекты ListBoxItem, но и любые произвольные элементы. Ведь класс ListBoxItem является наследником класса ContentControl, который позволяет хранить фрагменты вложенного содержимого. Если такой фрагмент является классом, порожденным от UIElement, то он будет отображен в элементе ListBox. Если же это другой тип объекта, ListBox вызовет метод ToString() и выведет полученный текст. Например:

Что такое extended listbox. Смотреть фото Что такое extended listbox. Смотреть картинку Что такое extended listbox. Картинка про Что такое extended listbox. Фото Что такое extended listbox

Из примера видно, что объекты ListBox способны неявно создавать необходимые им объекты ListBoxItem. Это означает, что объекты можете помещать прямо внутрь элемента ListBox.

Возможность заносить в списки произвольные элементы позволяет создавать различные основанные на списке элементы управления, не используя при этом другие классы. Например, в Windows Forms имеется специальный класс CheckedListBox, отображаемый как список с флажками около каждого элемента. В WPF для этого не нужен никакой специальный класс, поскольку его можно быстро создать с помощью стандартного объекта ListBox.

При использовании списка, содержащего разные элементы, имейте в виду, что при считывании значения SelectedItem (а также коллекций SelectedItems и Items) вы не увидите объекты ListBoxItem — вместо них вы увидите те объекты, которые занесены в список. В примере с элементом CheckedListBox это означает, что SelectedItem предоставляет объект CheckBox.

Если нужно найти выделенный в данный момент элемент, его можно прочитать непосредственно из свойства SelectedItem или SelectedItems. Если нужно определить, с какого элемента был снят выбор (если такое вообще было), можно воспользоваться свойством RemovedItems объекта SelectionChangedEventArgs.

Аналогично, свойство AddedItems сообщает, какие элементы были добавлены в число выбранных. В режиме выбора одного элемента при изменении выбора всегда может быть добавлен лишь один элемент, и удален тоже только один элемент. В режиме множественного выбора или в расширенном режиме так бывает не всегда.

В классе ListBoxItem имеется небольшая дополнительная возможность: в нем определено свойство IsSelected, значение которого можно считывать (или устанавливать), и события Selected и Unselected, которые сообщают о выделении данного элемента. Однако похожие возможности можно получить с помощью членов класса ListBox — свойства SelectedItem (или SelectedItems) и события SelectionChanged.

Класс ComboBox

Элемент ComboBox похож на элемент ListBox. Он хранит коллекцию объектов ComboBoxItem, которые создаются явным или неявным образом. Как и ListBoxItem, ComboBoxItem является элементом управления содержимым, который может хранить любой вложенный элемент.

Основным различием классов ComboBox и ListBox является способ их отображения в окне. Элемент ComboBox использует раскрывающийся список, а это значит, что за один раз можно выбрать только один элемент.

Если нужно сделать так, чтобы пользователь мог выбрать элемент в ComboBox, введя текст в текстовом поле, необходимо присвоить свойству IsEditable значение true. Кроме того, нужно сохранять только обычные текстовые объекты ComboBoxItem или объекты с осмысленным представлением ToString(). Например, если заполнить редактируемый раскрывающийся список объектами Image, то текст, который появится в верхней части, будет полностью определен именем класса Image, а это вряд ли то, что надо.

Одним из ограничений элемента ComboBox является способ подгонки при автоматическом выборе размера. ComboBox выбирает такую ширину, чтобы вместить свое содержимое, т.е. изменяет размер при переходе от одного элемента к другому. К сожалению, нет легкого способа указать ComboBox принять размер наибольшего элемента. Вместо этого приходится указывать жестко закодированное значение свойства Width, что очень неудобно.

Источник

Python Tkinter Listbox – How to Use

In this Python tutorial, we will learn about Python Tkinter Listbox with a few examples and also we will cover these topics

If you are new to Python Tkinter or Python GUI programming, the check out Python GUI Programming (Python Tkinter).

Python Tkinter Listbox

Syntax:

Python tkinter listbox get selected item

Code:

In this code, we have created a list, and the item of Listbox can be fetched by clicking on the button.

Output:

In this output, there are four options available. User can click on any of the item and then click on the button to print the selected item.

Python tkinter listbox curselection

Code:

In this code, we have printed the selected item name when clicked on the button.

Output:

In this output, we have displayed names of country. User will click on given country name and when clicked on button it will display the selected country name.

Python Tkinter Listbox get all items

Code:

In this code, we have created a list of countries. Now user can select the countries he has visited so far, User can select multiple countries, and when he/she will click on the show selected button. Then selected countries name will be displayed.

Output:

In this output, three countries are selected and same three countries are displayed below when showSelected button is clicked.

Python Tkinter Listbox with checkboxes

Python tkinter listbox scrollbar

Let us check how to implement scrollbar in Python Tkinter Listbox.

Code:

In this code, both vertical & horizontal scrollbars are projected.
Vertical Scrollbar Source Code

Horizontal Scrollbar Source Code

Output:

In these outputs, first image is of vertical scrollbar & second one is for horizontal scrollbar.

Vertical Scrollbar Output

Horizontal Scrollbar Output

Python Tkinter Listbox size

Code:

In this code, we have created a program in of listbox having 4 items. We have used Size method to calculate the number of lines.

Output:

In this output, implementation of size method is projected. Seize method is use to calculate the lines in Listbox. So in this case, there were 4 items in 4 lines. So the output appeared is 4.

Python Tkinter Listbox multiple selection

Code:

Output:

Python Tkinter Listbox set selected item

Code:

In this code, ‘Yellow’, that is on index 2 is selected as a default selection. Changing the index number in select_set will change the default item preference.

Output:

In this output, yellow is selected by-default immediately after running the program.

Python Tkinter Listbox bind

Code:

In this code, is used to bind the event with callback function. This code returns the index number of the selected Listbox item(s).

Output:

In this output, below label shows the index number(s) of selected item(s) in Listbox.

You may like the following Python tutorials:

In this tutorial we have learned about Python Tkinter listbox also we have covered these topics:

Что такое extended listbox. Смотреть фото Что такое extended listbox. Смотреть картинку Что такое extended listbox. Картинка про Что такое extended listbox. Фото Что такое extended listbox

Entrepreneur, Founder, Author, Blogger, Trainer, and more. Check out my profile.

Источник

Tkinter Listbox

Summary: in this tutorial, you’ll learn how to use the Tkinter Listbox widget to display a list of items.

Introduction to the Tkinter Listbox

A Listbox widget displays a list of single-line text items. A Listbox allows you to browse through the items and select one or multiple items at once.

To create a listbox, you use the tk.Listbox class like this:

Managing list items

To populate items to a Listbox, you first create a StringVar object that is initialized with a list of items. And then you assign this StringVar object to the listvariable option as follows:

To add, remove, or rearrange items in the Listbox, you just need to modify the list_items variable.

Selecting list items

The selectmode option determines whether you can select a single item or multiple items at a time.

Binding the selected event

To execute a function when the selected items changes, you bind that function to the event:

Tkinter Listbox widget example

The following program displays a Listbox that contains a list of programming languages.

When you select one or more item, the program displays the selected ones on a message box:

Что такое extended listbox. Смотреть фото Что такое extended listbox. Смотреть картинку Что такое extended listbox. Картинка про Что такое extended listbox. Фото Что такое extended listbox

First, create a StringVar that holds a list of programming languages:

Second, create a new Listbox widget and assign the StringVar object to the listvariable :

The height shows six programming languages without scrolling. The selectmode=’extended’ allows multiple selections.

Third, define a function that will be invoked when one or more items are selected. The items_selected() function shows a list of currently selected list items:

Finally, bind the items_selected function with the ‘ ‘ event:

Adding a scrollbar to the Listbox

The following program illustrates how to add a scrollbar to a listbox:

Что такое extended listbox. Смотреть фото Что такое extended listbox. Смотреть картинку Что такое extended listbox. Картинка про Что такое extended listbox. Фото Что такое extended listbox

For more information on how to link a scrollbar to a scrollable widget, check out the scrollbar widget tutorial.

Источник

Курс по библиотеке Tkinter языка Python

Содержание

Введение

Этой библиотеке посвящено мало внимания, и найти в рунете курс, книгу или FAQ по ней довольно-таки сложно. Стоит отметить, что здесь отражены только основы этой библиотеки, и надеюсь, что более опытные люди дополнят эту статью.

Что такое Tkinter?

Так как Tkinter является достаточно прозрачным интерфейсом к tcl/tk, то основным источником информации для неё являются man-страницы tcl/tk. Эти страницы имеются в любой Unix-системе (в разделе n или 3tk). Также они доступны онлайн на сайте http://tcl.tk. Основные:

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

Импортируется она как и любая другая библиотека:

Класс Tk

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

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

Таким образом минимальное приложение на Tkinter будет таким:

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

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

Общее для всех виджетов

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

Памятуя о Zen Python (явное лучше неявного) указываю: данный код написан и работает для Python v 2. В случае использования Python v 3 код немного изменится. 1. tkinter с маленькой буквы. 2. print в круглых скобках () и без u.

Методы виджетов

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

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

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

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

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

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

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

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

«Системные» методы

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

after, after_idle и after_cancel [3]

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

update и update_idletasks [4]

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

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

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

eval и evalfile

Основные виджеты

Toplevel

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

Таким способом можно предотвратить закрытие окна (например, если закрытие окна приведёт к потере введённых пользователем данных).

Button

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

Label

Entry

Listbox

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

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

Frame

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

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

Checkbutton

Radiobutton

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

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

Scale

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

Scrollbar

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

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

Упаковщики

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

Разберем каждый из них по порядку:

pack() [6]

Упаковщик pack() является самым интеллектуальным (и самым непредсказуемым). При использовании этого упаковщика с помощью свойства side нужно указать к какой стороне родительского виджета он должен примыкать. Как правило этот упаковщик используют для размещения виджетов друг за другом (слева направо или сверху вниз). Пример:

Что такое extended listbox. Смотреть фото Что такое extended listbox. Смотреть картинку Что такое extended listbox. Картинка про Что такое extended listbox. Фото Что такое extended listbox

Результат работы можно увидеть на скриншоте справа.

Для создания сложной структуры с использованием этого упаковщика обычно используют Frame, вложенные друг в друга.

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

Кроме основной функции у виджетов есть дополнительные методы для работы с упаковщиками.

grid() [8]

Этот упаковщик представляет собой таблицу с ячейками, в которые помещаются виджеты.

Для каждого виджета указываем, в какой он находится строке, и в каком столбце. Если нужно, указываем, сколько ячеек он занимает (если, например, нам нужно разместить три виджета под одним, необходимо «растянуть» верхний на три ячейки). Пример:

Пример, текстовый виджет с двумя полосами прокрутки:

place() [10]

place представляет собой простой упаковщик, позволяющий размещать виджет в фиксированном месте с фиксированным размером. Также он позволяет указывать координаты размещения в относительных единицах для реализации «резинового» размещения. При использовании этого упаковщика, нам необходимо указывать координаты каждого виджета. Например:

Этот упаковщик, хоть и кажется неудобным, предоставляет полную свободу в размещении виджетов на окне.

Привязка событий

command

Для большинства виджетов, реагирующих на действие пользователя, активацию виджета (например нажатие кнопки) можно привязать с использованием опции command. К таким виджетам относятся: Button, Checkbutton, Radiobutton, Spinbox, Scrollbar, Scale. Выше мы уже неоднократно пользовались этим способом:

Такой способ является предпочтительным и наиболее удобным способом привязки.

Метод bind[1] привязывает событие к какому-либо действию (нажатие кнопки мыши, нажатие клавиши на клавиатуре и т.д.). bind принимает три аргумента:

Метод bind возвращает идентификатор привязки, который может быть использован в функции unbind.

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

Функция, которая вызывается при наступлении события, должна принимать один аргумент. Это объект класса Event, в котором описано наступившее событие. Объект класса Event имеет следующие атрибуты (в скобках указаны события, для которых этот атрибут установлен):

Есть три формы названия событий. Самый простой случай это символ ASCII. Так описываются события нажатия клавиш на клавиатуре:

callback вызывается каждый раз, когда будет нажата клавиша «z».

Второй способ длиннее, но позволяет описать больше событий. Он имеет следующий синтаксис:

Название события заключено в угловые скобки. Внутри имеются ноль или более модификаторов, тип события и дополнительная информация (номер нажатой клавиши мыши или символ клавиатуры) Поля разделяются дефисом или пробелом. Пример (привязываем одновременное нажатие Ctrl+Shift+q):

(в данном примере KeyPress можно убрать).

Здесь перечислены все возможные типы событий, для самых часто используемых дано описание. Более подробно см. man bind.

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

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

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

Изображения

BitmapImage

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

PhotoImage

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

ttk (themed tk) это расширение tcl/tk с новым набором виджетов. В ttk используется новый движок для создания виджетов. Этот движок обладает поддержкой тем и стилей оформления. Благодаря этому виджеты ttk выглядят более естественно в различных операционных системах.

Начиная с версий python 2.7 и 3.1.2 в Tkinter включён модуль для работы с ttk.

Что такое extended listbox. Смотреть фото Что такое extended listbox. Смотреть картинку Что такое extended listbox. Картинка про Что такое extended listbox. Фото Что такое extended listbox

В ttk включены следующие виджеты, которые можно использовать вместо соответствующих виджетов tk: Button, Checkbutton, Entry, Frame, Label, LabelFrame, Menubutton, PanedWindow, Radiobutton, Scale и Scrollbar. Кроме того имеется несколько новых виджетов: Combobox, Notebook, Progressbar, Separator, Sizegrip и Treeview.

С точки зрения программиста главное отличие новых виджетов от старых заключается в том, что у виджетов ttk отсутствуют опции для конфигурирования его внешнего вида. Сравните, например, количество STANDARD OPTIONS для старого и нового виджета button. Конфигурация внешнего вида виджетов ttk осуществляется через темы и стили. В остальном использование виджетов ttk аналогично соответствующим виджетам tk.

Style

Style это класс для работы со стилями и темами. Именно этот класс надо использовать для конфигурирования внешнего вида виджетов. Основные методы класса:

Конфигурирование внешнего вида виджетов. В качестве аргументов принимает название стиля виджета (например "TButton") и список опций конфигурирования. Пример:

Конфигурирование внешнего вида виджетов в зависимости от их состояний (active, pressed, disabled и т.д.). В качестве аргументов принимает название стиля виджета и список опций конфигурирования, где опции представлены в виде списка. Пример:

Возвращает соответствующую опцию конфигурирования. Пример:

Изменяет layout (схему) виджета. Виджеты ttk состоят из отдельных элементов, опций конфигурирования и других вложенных layouts. Следующий пример иллюстрирует применение метода layout:

Создаёт новый элемент темы.

Возвращает список элементов текущей темы.

Возвращает список опций (конфигурацию), указанного в аргументе элемента.

Создаёт новую тему. Аргументы те же, что и в theme_settings.

Возвращает список доступных тем.

Изменяет текущую тему на указанную в аргументе.

Combobox

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

Progressbar

Виджет отображает уровень загрузки.

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

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

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

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *