-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path04-listworking_improved.py
More file actions
77 lines (73 loc) · 3.63 KB
/
04-listworking_improved.py
File metadata and controls
77 lines (73 loc) · 3.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
# Улучшенная схема 04-listworking_common, объединяющая в себе два варианта
# реализации (с tkinter и без), и обрабатывающая ошибки, к которым
# уязвим код, данный в листинге
# Также добавлен момент очищения второго Listbox'a при повторе операции
import tkinter as tk
import tkinter.messagebox as mb
def window_mode():
# От себя добавлю полосы прокрутки, общие для двух Listbox'ов,
# и идеальные неизменные размеры окна
mainw = tk.Tk()
mainw.minsize(width=390, height=185)
mainw.maxsize(width=390, height=185)
mainw.title("Изменение значений")
mainw.geometry("390x185")
sx = tk.Scrollbar(mainw, orient='horizontal')
sx.grid(column=2, row=5, columnspan=3, sticky='ew')
sy = tk.Scrollbar(mainw, orient='vertical')
sy.grid(column=1, row=1, rowspan=4, sticky='ns')
box = tk.Listbox(mainw, yscrollcommand=sy.set, xscrollcommand=sx.set)
box.grid(row=1, column=2, rowspan=3, sticky='nsew')
sx.config(command=box.xview)
sy.config(command=box.yview)
entry = tk.Entry(mainw)
entry.grid(row=1, column=3, sticky='ew')
boxSq = tk.Listbox(mainw, yscrollcommand=sy.set, xscrollcommand=sx.set)
boxSq.grid(row=1, column=4, rowspan=3)
def add_item():
entry_text = entry.get()
# Если поле ввода пустое, не добавляем элемент в Listbox
if len(entry_text) == 0:
mb.showerror("ОШИБКА", "Не удалось получить введённые данные!")
return
box.insert('end', entry_text)
entry.delete(0, 'end')
def count_squares():
# Если второй Listbox не пустой, чистим его
if boxSq.size() > 0:
boxSq.delete(0, 'end')
elems = box.get(0, 'end')
for item in elems:
# Делаем обработку исключения ValueError
# в случае введения пользователем НЕ числа
try:
k = int(item) ** 2
boxSq.insert('end', k)
except ValueError:
# Просто вставляем INVALID
boxSq.insert('end', 'INVALID')
buttonAdd = tk.Button(mainw, text="Добавить", command=add_item)
buttonAdd.grid(row=2, column=3, sticky='nsew')
buttonCount = tk.Button(mainw, text="Посчитать", command=count_squares)
buttonCount.grid(row=3, column=3, sticky='nsew')
mainw.mainloop()
def console_mode():
array = input("Введите список значений: ").split()
arraySq = []
for item in array:
# Такую же обработку делаем в консольном режиме
try:
item = int(item)
k = item ** 2
arraySq.append(k)
except ValueError:
arraySq.append("INVALID")
print("Список возведённых в квадрат значений: " + arraySq)
# Запуск программы абсолютно такой же, как в прошлом improved
if __name__ == "__main__":
launchType = mb.askyesno("Выберите режим запуска", "Желаете запустить в окне? (если нет, запустится в консоли)")
if launchType:
window_mode()
else:
mb.showinfo("ИНФОРМАЦИЯ", "Посмотрите в консоль!")
console_mode()