Есть работенка для тех, кому нечем заняться) нужно сократить код, но в пределах разумного. Я пока что начинающий программист и не могу придумать, как это сделать...
ВОТ КОД
#Библиотеки
import tkinter as tk
#Функции
def select_all():
for check in [Check1, Check2, Check3, Check4, Check5, Check6,Check7, Check8, Check9, Check10, Check11, Check12, Check13, Check14]:
check.select()
def deselect_all():
for check in [Check1, Check2, Check3, Check4, Check5, Check6,Check7, Check8, Check9, Check10, Check11, Check12, Check13, Check14]:
check.deselect()
#Окно
win = tk.Tk()
win.geometry('440x750')
win.title("Списочек")
win['bg'] = '#B0E0E6'
win.iconbitmap('C:/Users/user/Desktop/icon.ico')
win.resizable(0, 0)
win.attributes("-topmost",True)
#Переменные
#Код
Text2 = tk.Label(text = 'Список!', bg = '#B0E0E6', fg = '#800000', font = ('Arial', 32, 'bold')).grid(row = 0, column = 0, padx = 125, pady = 15)
Check1 = tk.Checkbutton(win, text = "Рашгард", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Check2 = tk.Checkbutton(win, text = "Перчатки", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Check3 = tk.Checkbutton(win, text = "Майки 3 - 5 шт.", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Check4 = tk.Checkbutton(win, text = "Трусы, носки 3 - 5 шт.", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Check5 = tk.Checkbutton(win, text = "Мыльно-рыльные принадлежности", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Check6 = tk.Checkbutton(win, text = "Документы", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Check7 = tk.Checkbutton(win, text = "Шорты 3 шт.", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Check8 = tk.Checkbutton(win, text = "Кредитная карта", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Check9 = tk.Checkbutton(win, text = "Наушники", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Check10 = tk.Checkbutton(win, text = "Зарядка", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Check11 = tk.Checkbutton(win, text = "Рюкзак + сумка", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Check12 = tk.Checkbutton(win, text = "Покушать", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Check13 = tk.Checkbutton(win, text = "Попить", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Check14 = tk.Checkbutton(win, text = "Любую книжечку", bg = '#B0E0E6', font = ('Arial', 15), padx = 20)
Fake1 = tk.Label(win, text = " ", bg = '#B0E0E6')
Select = tk.Button(win, text = "Выбрать все", font = ('Arial', 15, 'bold'), command = select_all, padx = 30, pady = 10)
Fake = tk.Label(win, text = " ", bg = '#B0E0E6')
Deselect = tk.Button(win, text = "Убрать все", font = ('Arial', 15, 'bold'), command = deselect_all, padx = 30, pady = 10)
#Вывод
Check1.grid(row = 2, column = 0, sticky = 'W')
Check2.grid(row = 3, column = 0, sticky = 'W')
Check3.grid(row = 4, column = 0, sticky = 'W')
Check4.grid(row = 6, column = 0, sticky = 'W')
Check5.grid(row = 7, column = 0, sticky = 'W')
Check6.grid(row = 8, column = 0, sticky = 'W')
Check7.grid(row = 9, column = 0, sticky = 'W')
Check8.grid(row = 11, column = 0, sticky = 'W')
Check9.grid(row = 12, column = 0, sticky = 'W')
Check10.grid(row = 13, column = 0, sticky = 'W')
Check11.grid(row = 14, column = 0, sticky = 'W')
Check12.grid(row = 15, column = 0, sticky = 'W')
Check13.grid(row = 16, column = 0, sticky = 'W')
Check14.grid(row = 17, column = 0, sticky = 'W')
Fake1.grid(row = 18, column = 0)
Select.grid(row = 19, column = 0)
Fake.grid(row = 20, column = 0)
Deselect.grid(row = 21, column = 0)
win.mainloop()
Python
Кто поможет сократить код на tkinter
[Check1, Check2, Check3, Check4, Check5, Check6,Check7, Check8, Check9, Check10, Check11, Check12, Check13, Check14] — Вместо такого перечисления надо было собрать обычный список из этих же чекбоксов, и использовать его же, вместо ручной записи (которую каждый раз придется изменить при введении нового элемента).
Если в коде широко используется какая-то строка (например, цвет '#B0E0E6'), надо где-то сохранить её в виде параметра / переменной. В таком случае при желании изменить цвет, придется менять только значение одной переменной, а не искать все строки в коде.
Check1 = tk.Checkbutton(win, text = "Рашгард", bg = '#B0E0E6', font = ('Arial', 15), padx = 20) — Все отличаются лишь текстом. Значит можно собрать массив из текстов, а чекбоксы создавать в цикле, используя очередной текст в виде переменной цикла. То же самое касается и нумерации строк в .grid()
Если есть набор именованных аргументов, которые массово используются, можно собрать их в словарь и передавать (**словарь) при вызове функции.
Получилось так (комментарии не трогал):
#Библиотеки
import tkinter as tk
#Функции
def select_all():
for check in checkbox_list:
check.select()
def deselect_all():
for check in checkbox_list:
check.deselect()
BG = '#B0E0E6'
#Окно
win = tk.Tk()
win.geometry('440x750')
win.title("Списочек")
win['bg'] = BG
# win.iconbitmap('C:/Users/user/Desktop/icon.ico')
win.resizable(0, 0)
win.attributes("-topmost", True)
#Код
Text2 = tk.Label(
text = 'Список!',
bg = BG,
fg = '#800000',
font = ('Arial', 32, 'bold')
).grid(row = 0, column = 0, padx = 125, pady = 15)
###
checkbox_text = ["Рашгард", "Перчатки", "Майки 3 - 5 шт.", "Трусы, носки 3 - 5 шт.", "Мыльно-рыльные принадлежности", "Документы", "Шорты 3 шт.", "Кредитная карта", "Наушники", "Зарядка", "Рюкзак + сумка", "Покушать", "Попить", "Любую книжечку"]
checkbox_list = []
for i, txt in enumerate(checkbox_text):
cb = tk.Checkbutton(win, text = txt, bg = BG, font = ('Arial', 15), padx = 20)
cb.grid(row = i + 2, column = 0, sticky = 'W')
checkbox_list.append(cb)
styles = {
"font": ('Arial', 15, 'bold'),
"padx": 30,
"pady": 10
}
Fake1 = tk.Label(win, text = " ", bg = BG)
Fake1.grid(row = 18, column = 0)
Select = tk.Button(win, text = "Выбрать все", command = select_all, **styles)
Select.grid(row = 19, column = 0)
Fake = tk.Label(win, text = " ", bg = BG)
Fake.grid(row = 20, column = 0)
Deselect = tk.Button(win, text = "Убрать все", command = deselect_all, **styles)
Deselect.grid(row = 21, column = 0)
win.mainloop()
____________________
Для новичков не очевидно, поэтому подчеркну: Не обязательно писать весь код в одном файле)
Если в коде широко используется какая-то строка (например, цвет '#B0E0E6'), надо где-то сохранить её в виде параметра / переменной. В таком случае при желании изменить цвет, придется менять только значение одной переменной, а не искать все строки в коде.
Check1 = tk.Checkbutton(win, text = "Рашгард", bg = '#B0E0E6', font = ('Arial', 15), padx = 20) — Все отличаются лишь текстом. Значит можно собрать массив из текстов, а чекбоксы создавать в цикле, используя очередной текст в виде переменной цикла. То же самое касается и нумерации строк в .grid()
Если есть набор именованных аргументов, которые массово используются, можно собрать их в словарь и передавать (**словарь) при вызове функции.
Получилось так (комментарии не трогал):
#Библиотеки
import tkinter as tk
#Функции
def select_all():
for check in checkbox_list:
check.select()
def deselect_all():
for check in checkbox_list:
check.deselect()
BG = '#B0E0E6'
#Окно
win = tk.Tk()
win.geometry('440x750')
win.title("Списочек")
win['bg'] = BG
# win.iconbitmap('C:/Users/user/Desktop/icon.ico')
win.resizable(0, 0)
win.attributes("-topmost", True)
#Код
Text2 = tk.Label(
text = 'Список!',
bg = BG,
fg = '#800000',
font = ('Arial', 32, 'bold')
).grid(row = 0, column = 0, padx = 125, pady = 15)
###
checkbox_text = ["Рашгард", "Перчатки", "Майки 3 - 5 шт.", "Трусы, носки 3 - 5 шт.", "Мыльно-рыльные принадлежности", "Документы", "Шорты 3 шт.", "Кредитная карта", "Наушники", "Зарядка", "Рюкзак + сумка", "Покушать", "Попить", "Любую книжечку"]
checkbox_list = []
for i, txt in enumerate(checkbox_text):
cb = tk.Checkbutton(win, text = txt, bg = BG, font = ('Arial', 15), padx = 20)
cb.grid(row = i + 2, column = 0, sticky = 'W')
checkbox_list.append(cb)
styles = {
"font": ('Arial', 15, 'bold'),
"padx": 30,
"pady": 10
}
Fake1 = tk.Label(win, text = " ", bg = BG)
Fake1.grid(row = 18, column = 0)
Select = tk.Button(win, text = "Выбрать все", command = select_all, **styles)
Select.grid(row = 19, column = 0)
Fake = tk.Label(win, text = " ", bg = BG)
Fake.grid(row = 20, column = 0)
Deselect = tk.Button(win, text = "Убрать все", command = deselect_all, **styles)
Deselect.grid(row = 21, column = 0)
win.mainloop()
____________________
Для новичков не очевидно, поэтому подчеркну: Не обязательно писать весь код в одном файле)
"работенка" предполагает "оплатку". сколько платишь?
Саша Коновалов
Я рассчитываю на безвозмездную помощь) Мне просто нужна помощь
Похожие вопросы
- Как сократить код
- Можете помочь! Нужен код для Python, что бы он заменял определенный текст в файле
- Помогите написать код в питон
- Язык Python, помочь с кодом (не много)
- Помогите с кодом в python
- Помогите с кодом дискорд бота на питоне
- Помогите с кодом питон
- Помогите написать код в python
- помогите понять код языка программирования Питон
- Помогите написать Код в Python
checkbox_list = []