- Передача индексов списков в Label
Для начала создадим простое окно приложения с помощью Tkinter:
import tkinter as tk
root = tk.Tk()
root.title("Пример программы")
root.geometry("400x300") # задаем размер окна
root.mainloop()
Теперь добавим список и виджет Label:
import tkinter as tk
root = tk.Tk()
root.title("Пример программы")
root.geometry("400x300")
my_list = ["элемент1", "элемент2", "элемент3"] # создаем список
for index, item in enumerate(my_list):
label = tk.Label(root, text=item)
label.pack()
root.mainloop()
В этом примере мы используем функцию enumerate для перебора элементов списка. Функция enumerate возвращает кортеж, содержащий индекс и значение элемента списка. Затем мы создаем виджет Label для каждого элемента списка и передаем значение элемента в качестве текста виджета.
Теперь, когда мы знаем, как передавать значения элементов списка в Label, давайте рассмотрим, как передать индексы элементов списка.
import tkinter as tk
root = tk.Tk()
root.title("Пример программы")
root.geometry("400x300")
my_list = ["элемент1", "элемент2", "элемент3"]
for index, item in enumerate(my_list):
label = tk.Label(root, text=f"{index}: {item}")
label.pack()
root.mainloop()
В этом примере мы используем f-строки для формирования текста виджета Label. Мы передаем индекс и значение элемента в текст виджета, разделенные двоеточием.
Теперь, когда мы запустили наше приложение, мы увидим, что каждая метка содержит индекс и значение элемента списка:
0: элемент1
1: элемент2
2: элемент3
Как мы видим, мы успешно передали индексы элементов списка в виджет Label. Это может быть полезно, если нам нужно отобразить номер каждого элемента списка или использовать индекс для выполнения других операций с данными.
2. Напишите программу, состоящую из двух списков Listbox. В первом будет, например, перечень товаров, заданный программно. Второй изначально пуст, пусть это будет перечень покупок. При клике на одну кнопку товар должен переходить из одного списка в другой. При клике на вторую кнопку – возвращаться (человек передумал покупать). Предусмотрите возможность множественного выбора элементов списка и их перемещения.
from tkinter import *
from tkinter.ttk import *
def toSecond():
selectToSecond = lbox1.curselection()
for i in selectToSecond:
lbox2.insert(END, lbox1.get(i))
for i in reversed(selectToSecond):
lbox1.delete(i)
def toFirst():
selectToFirst = lbox2.curselection()
for i in selectToFirst:
lbox1.insert(END, lbox2.get(i))
for i in reversed(selectToFirst):
lbox2.delete(i)
root = Tk()
lbox1 = Listbox(selectmode=EXTENDED)
for i in ('pineapple','potato','meat','butter','bread','carrot','bananas','apple'):
lbox1.insert(0,i)
lbox1.pack(side=LEFT)
lbox2 = Listbox(selectmode=EXTENDED)
lbox2.pack(side=RIGHT)
f = Frame()
f.pack(side=LEFT, padx=10)
Button(f, text=">>>", command=toSecond).pack(fill=X)
Button(f, text="<<<", command=toFirst).pack(fill=X)
root.mainloop()
Tkinter IntVar возвращает PY_VAR0 вместо значения
У меня есть кнопка Checkbutton и IntVar
связанный с ней объект, но когда я пытаюсь получить значение var
, я получаю PY_VAR0
.
Вот мой код:
from tkinter import *
root = Tk()
def show_state():
print(var)
var = IntVar()
cbtn = Checkbutton(root, text='Check', variable=var, command=show_state)
cbtn.pack()
root.mainloop()
Почему я получаю PY_VAR0
?
var
является ссылкой на Tkinter.IntVar
объект. Вам нужно вызвать его get
.метод, чтобы получить доступ к значению, которое он представляет:
print(var.get())
3. В Tkinter существуют различные способы скрыть виджеты. Один из них — это использование метода pack_forget().
Этот метод принимает на вход виджет, который нужно скрыть, и убирает его с экрана, не удаляя из памяти. Преимущество этого метода заключается в том, что когда виджет нужно снова показать, он может быть легко восстановлен, используя метод pack().
# Imports tkinter
from
tkinter
import
*
# toplevel window
root
=
Tk()
# label widget
label
=
Label(root, text
=
"LABEL"
)
#
Способ сделать метку(виджет) невидимой
def
hide_label():
# Это приведет к удалению виджета
label.pack_forget()
#
Способ сделать метку(виджет) видимой
def
recover_label():
#
Это восстановит виджет
label.pack()
#
функция hide_label() временно скрывает метку
B2
=
Button(root, text
=
"Click To Hide label"
, fg
=
"red"
, command
=
hide_label)
B2.pack()
# recover_label() function recover the label
B1
=
Button(root, text
=
"Click To Show label"
,
fg
=
"green"
, command
=
recover_label)
B1.pack()
# pack Label widget
label.pack()
# Start the GUI
root.mainloop()
Примечание: можно применить метод label.place_forget()
4. Для работы с текстом, находящимся в текстовом поле, необходимо создать переменную в которой будут храниться значения, которые будут выводиться или считываться в текстовом поле. Общий вид программы зададим следующий:
from tkinter import *
root = Tk()
root.title("Welcome to entry app")
message = StringVar()
message.set("Any")
text = Entry(root, width=10, textvariable=message)
text.pack()
root.mainloop()
5. Listbox – текстовый список
Listbox создает списки – виджеты, внутри которых, в столбик перечисляются элементы. При этом можно выбирать один или множество элементов списка.
В tkinter сначала создается экземпляр Listbox()
, после этого он заполняется с помощью метода insert()
:
from tkinter import *
from tkinter.ttk import * # строка окрашена в серый цвет. Это означает, что модуль не используется
root = Tk()
lbox = Listbox()
lbox.pack()
lbox.insert(END, 1)
lbox.insert(END, 2)
lbox.insert(END, 3)
root.mainloop()
Первым аргументом в insert()
передается индекс места, куда будет вставлен элемент. Если нужно вставлять в конец списка, то индекс обозначают константой END. Вторым аргументом передается вставляемый элемент
6. Возможно ли добавить несколько записей в одну строку в listbox?
#---Проверяю---------
def btnClick14 ():# Выполнить К1
task_1 = combobox_1.get()
task_2 = combobox_2.get()
test_task_1 = task_1+""+task_2+""
#listbox.insert(1,test_string)
listbox_2.insert(END, test_task_1)
#---Проверяю---------
7. Как очистить элементы из ListBox
Вы можете использовать следующий код, чтобы удалить элементы из списка при нажатии кнопки.
Самый простой метод, который вы можете использовать для удаления элементов в списке, называемых «lb», — это удалить элементы от первого до последнего элемента списка с помощью метода удаления.
Очистить список Python
lb.delete(0,’end’)
# -*- coding: utf-8 -*-
import tkinter as tk
#clear listbox
def clearListbox():
lb.delete(0,’end’)
root = tk.Tk()
root.title(“Code4Example.com”) # Add a title
tk.Button(root,text=”Clear Listbox”, command=clearListbox).grid(row = 0, column = 0)
var2 = tk.StringVar()
var2.set((‘Apple’,’Banana’,’Pear’, ‘Peach’))
lb = tk.Listbox(root, listvariable=var2)
lb.grid(row = 0, column = 1)
root.mainloop()
Блоки
Блоки, часть кода, отличающиеся по функционалу, задачам и расположению от другого кода. Разные блоки могут выполнять задачи для одной функции или решения.
+++++++++++++ Блок 1
Здесь все подключенные библиотеки
+++++++++++++ Блок 2
Функция часов
def time():
string = strftime(' %B %A %H:%M:%S %p')
lbl.config(text = string)
lbl.after(1000, time)
+++++++++++++ Блок 3
Функции вызова ссылок на страницы интернета
def btnClick1():#
webbrowser.open(‘https://yandex.ru/’, new=2)
+++++++++++++ Блок 4
Функция вызова палитры
def btnClick4():# Палитра
color = colorchooser.askcolor() #присвоить цвет отображаемому
colorHex = color[1] #присваивает переменной элемент с индексом 1
window.config(bg=colorHex) #изменить цвет фона
+++++++++++++ Блок 5
Функция вызова и создания калькулятора
+++++++++++++ Блок 6
Функции открытия выпадающих окон Главного меню.
+++++++++++++ Блок 7
Функции открытия и воспроизведения музыкальных файлов. Через Главное меню.
def create_window27_6_1 ():# Музыкальный файл 111
mixer.init()
mixer.music.load(‘111.mp3’)
mixer.music.play()
+++++++++++++ Блок 8
Функции кнопок верхнего ряда на Главном окне.
+++++++++++++ Блок 9
Создание Главного окна tkinter
root =tix. Tk() # tix- вставка для модуля tkinter.tix
root.title(‘Литера 2’)
root.geometry(“1200×900+10+10”)# размеры Главного окна
root.resizable(width=False, height=False)# не разрешаем менять размеры Главного окна tkinter
+++++++++++++ Блок 10
Создание переменных
variable_1 = StringVar()# Ваш комментарий
variable_2 = StringVar()# Ваша переменная
variable_3 = StringVar()# Ваша переменная
+++++++++++++ Блок 11
Функция кнопки Выполнить К1
Здесь необходимо вписывать все команды выпадающего списка combobox_1.
Этот список главный в сценариях выполнения дальнейших задач.
Здесь релизовывается ветвение if, для реализации выбора команд из выпадающего меню combobox_1.
Через ветвление решается какой виджет будет открыт или закрыт.
+++++++++++++ Блок 12
Функция кнопки Выполнить К2. Работает только на combobox_2.
+++++++++++++ Блок 13
Функция кнопки Выполнить К3.
Здесь релизовывается ветвение if, для реализации выбора команд из выпадающего меню combobox_1. И дополнтельного ветвления команд
+++++++++++++ Блок 14
Определение часов в Главном окне (root)
+++++++++++++ Блок 15
Создание менюбар
menubar = Menu(root)
+++++++++++++ Блок 16
Создание функции для события.
Выбора значения из listbox
+++++++++++++ Блок 17
Создание переменной, которая передает значение из text_V
+++++++++++++ Блок 18
Создание listbox_4
+++++++++++++ Блок 19
Создание функций кнопок Добавить, Удалить
Для выполнения команд из listbox_4
+++++++++++++ Блок 20
Создание функций кнопок Добавить
Добавляет выбранное в listbox_1 из listbox_4
+++++++++++++ Блок 21
Создание функции по событию
+++++++++++++ Блок 22
Выполнение команд по событию для text_V
+++++++++++++ Блок 23
Создание функции
+++++++++++++ Блок 24
Создание функции
+++++++++++++ Блок 25
Создание Меню
+++++++++++++ Блок 26
Создание страниц для Меню
+++++++++++++ Блок 27
Создание подМеню
+++++++++++++ Блок 28
Создание Меню. Дополнительно
+++++++++++++ Блок 29
Создание меню. Нажми если скучно
+++++++++++++ Блок 30
Создание и определение кнопок
+++++++++++++ Блок 31
Создание переменной List_K1 для списка combobox_1
+++++++++++++ Блок 32
Создание Комбобоксов
+++++++++++++ Блок 33
Реализация текста в одну строку для виджетов Текст
+++++++++++++ Блок 34
Создание переменных
+++++++++++++ Блок 35
Создание и определение виджетов label
+++++++++++++ Блок 36
Создание и определение виджетов listbox
+++++++++++++ Блок 37
Создание, определение и привязка виджетов scrollbar
+++++++++++++ Блок 38
Создание упаковщика для часов
+++++++++++++ Блок 39
Создание упаковщиков для верхних кнопок
+++++++++++++ Блок 40
Создание упаковщиков для текстовой метки
+++++++++++++ Блок 41
Создание упаковщиков для Комбобокса
+++++++++++++ Блок 42
Создание упаковщика (для сокрытия) для однострочного текста
+++++++++++++ Блок 43
Создание упаковщиков для listbox
+++++++++++++ Блок 44
Создание, определение и привязка виджетов scrollbar
+++++++++++++ Блок 45
Определение balloon библиотеки в главном меню
+++++++++++++ Блок 46
События balloon для кнопок
+++++++++++++ Блок 47
Упаковщик time()
+++++++++++++ Блок 48
Конфигурация меню
root.config(menu = menubar)
mainloop()
+++++++++++++ Блок 49
Закрытие fichier
fichier.close()
+++++++++++++ Блок 50
from reader.main import main
+++++++++++++ Блок 51
Конструкция
if_name == ‘_main11‘:
main11()