Литера: Разбор функций и команд

  1. Передача индексов списков в 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

fromtkinter import*

# toplevel window

root =Tk()

# label widget

label =Label(root, text="LABEL")

# Способ сделать метку(виджет) невидимой

defhide_label():

    # Это приведет к удалению виджета

    label.pack_forget()

# Способ сделать метку(виджет) видимой

defrecover_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()