Небольшая работа по программированию в вузе. Есть предложения по оптимизации кода? Было бы интересно.
from tkinter import * from tkinter import messagebox from graph import * def check(file): # Проверка на наличие записей в файле file = open(FILE) if file.read() != '': file.close() return True else: file.close() return None def name_input(): #Функция ввода названия и обработки того же файла global MASSIVE, kind_of_sport, SECOND_NAME, STROKA, FILE, CHOICE, choice SECOND_NAME = [] kind_of_sport = [] MASSIVE = [] info = [0, 0] STROKA = 3 if file_name.get() != '': # Проверка на отсутствие ввода FILE = file_name.get() + '.txt' # Получение введённой информации без указания формата file_name.delete(0, END) try: # Обработка случая, когда файла с таким именем не существет F = open(FILE) if check(F) == True: f = open(FILE) text2.grid(column = 0, row = 1) # 'Выберите вид спорта, по которому хотите вывести информация' for row in f: row = row[:-1] row = row.split(';') if row[2] not in kind_of_sport: kind_of_sport.append(row[2]) # Список с видами спорта SECOND_NAME.append(row[0]) info[0] = row.pop(2) info[1] = list(row) MASSIVE.append(list(info)) CHOICE_BUTTON = InputButton('Искать по дисциплине:') # Кнопка 'Искать по дисциплине' choice = Entry(root, width=28) # Поле ввода для дисциплины choice.grid(column = 1, row = 3) # Размещение поля для ввода дисциплины sprt = 'Виды спорта:\n' for kind in kind_of_sport: # Создание предложения 'Виды спорта:...' sprt = sprt + kind + ',\n' text5 = Label(root, text = sprt[:-2] + '.',bg = '#3f4b59', fg = 'white', width = 26) # Метка 'Виды спорта......' text5.grid(column = 1, row = 1) else: messagebox.showinfo('Ошибка', 'Файл пуст') except FileNotFoundError: # Обработка случая, когда файла с таким именем не существет messagebox.showinfo('Ошибка ввода', 'Файла с таким именем не существует') # Всплывающее окно в случае, когда файла с таким именем не существет SECOND_NAME.sort() QUIT_button.grid(column = 0, row = STROKA + 2) else: QUIT_button.grid(column = 0, row = STROKA + 2) messagebox.showinfo('Ошибка ввода', 'Вы ничего не ввели') # Всплывающее окно в случае, когда поле ввода пустое class InputButton: # Конпка 'Искать по дисциплине' def __init__(self, name): self.button_name = name self.b = Button(root, text = self.button_name, width = 20, bg = '#3f4b59', fg = 'white', command = self.click) # Создание и разиещение кнопки self.b.grid(column = 0, row = 3) def click(self): # Действие кнопки при нажатии vid_sporta = choice.get() choice.delete(0, END) graph_name_COLOUR = '#3f4b59' if vid_sporta in kind_of_sport: COVER = Label(root, width = 80, height = 50, bg = '#3f4b59') #Жёлтый фон COVER.place(x = 358, y = 51) brushColor('white') # Белый холст для окна с графиком rectangle(0, 0, scale, scale) penSize(2) points = [] sportsmen_AGE = [] sportsmen_NAME = {} VOZRAST = {} col = 2 # Начальная колонка ROW = 1 name_of_sport = Label(root, text = 'Вид спорта', bg = graph_name_COLOUR, fg = 'white') # Названия полей second_name = Label(root, text = 'Фамилия', width = 15, bg = graph_name_COLOUR, fg = 'white') # Фамилия age = Label(root, text = 'Возраст', bg = graph_name_COLOUR, fg = 'white') # Возраст placement = Label(root, text = 'Место', bg = graph_name_COLOUR, fg = 'white') # Занятое место text3.grid(column = 4, row = 0) # Метка 'Самый молодой спортсмен, занимающийся данным видом спорта' youngest_sportsmen.grid(column = 5, row = 0) # Фамилия самого молодого спортсмена name_of_sport.grid(column = col, row = ROW) # Размещение полей second_name.grid(column = col + 1, row = ROW) # Фамилия age.grid(column = col + 2, row = ROW) # Возраст placement.grid(column = col + 3, row = ROW) # Занятое место nazvanieSPORTA = Label(root, text = vid_sporta, width = 14, bg = graph_name_COLOUR, fg = 'white') # Название вида спорта nazvanieSPORTA.grid(column = col, row = ROW + 1) # Размещение названия вида спорта for name in SECOND_NAME: # Перебор отсортированного списка for sportsmen_info in MASSIVE: # Размещение информации о спортсменах if name in sportsmen_info[1]: # "Сортировка" if sportsmen_info[0] == vid_sporta: # "Если вид спорта совпадает с названием кнопки" sportsmen_AGE.append(sportsmen_info[1][1]) # Список с фамилиями для сортировки sportsmen_NAME[sportsmen_info[1][1]] = sportsmen_info[1][0] # Словарь с возрастом спортсмена ROW += 1 # Строка для размещения кнопки NAME = Label(root, text = sportsmen_info[1][0], width = 15, bg = graph_name_COLOUR, fg = 'white') # Фамилия NAME.grid(column = col + 1, row = ROW) # Размещение AGE = Label(root, text = sportsmen_info[1][1], width = 15, bg = graph_name_COLOUR, fg = 'white') # Возраст AGE.grid(column = col + 2, row = ROW) # Размещение PLACEMENT = Label(root, text = sportsmen_info[1][2], width = 10, bg = graph_name_COLOUR, fg = 'white')# Место PLACEMENT.grid(column = col + 3, row = ROW) # Размещение y = 360 line(20, y, y*2, y) # X line(20, 0, 20, y) # Y for x in range(50, 350, 50): line(x, y - 5, x, y + 5) # Штрихи по X line(15, x+10, 25, x+10) # Штрихи по Y y0 = 310 # Нижний штрих по Y x0 = 50 # Левый штрих по X youngest_sportsmen.configure(text = sportsmen_NAME[str(sportsmen_AGE[0])], bg = '#3f4b59', fg = 'white', width = 14, height = 2) # Вывод фамилии самого молодого спортсмена for i in range(int(min(sportsmen_AGE)), int(max(sportsmen_AGE)) + 1): VOZRAST[i] = y # Заполнение словаря с возрастом и его координатой y -= 50 for n in sportsmen_AGE: points.append((x0, VOZRAST[int(n)])) # Заполнение списка с координатами точек x0 += 50 try: # Обработка случая, когда есть лишь одна точка polyline(points) except: # Отображение той самой точки penSize(5) point(x0, y0) # Ставится лишь одна точка elif vid_sporta == '': messagebox.showinfo('Ошибка ввода', 'Ничего не было введено') # Всплывающее окно в случае, если ничего не было введено else: messagebox.showinfo('Ошибка ввода', 'Такого вида спорта нет') # Всплывающее окно в случае, если такого вида спорта нет QUIT_button.grid(column = 0, row = 5) def Quit(): # Функция для кнопки выхода из программы root.destroy() close() def start(): global file_name, text2, root, QUIT_button, scale, text3, youngest_sportsmen START.destroy() root = Tk() root.title('Сухомлин, 18-ИЭ-2') scale = 400 # canvasSize(scale, scale) # windowSize(scale, scale) # Настройки графика penSize(2) # penColor('black') # MAINCOVER = Label(root, bg = 'black', width = 300, height = 300) # Основной фон MAINCOVER.place(x = 0, y = 0) file_name = Entry(root, width=30) #Поле ввода text1 = Label(root, text = 'Введите название файла', bg = 'black', fg = 'white', height = 3) text2 = Label(root, text = 'Выберите вид спорта,\n информацию по которому\n хотите вывести информацию',bg = '#3f4b59', fg ='white', height = 6) text3 = Label(root, text = 'Самый молодой спортсмен,\n занимающийся данным видом спорта:', bg = '#3f4b59', fg = 'white') text4 = Label(root, text = 'Сухомлин Георгий\n 18-ИЭ-2', bg = 'black', fg = 'white') youngest_sportsmen = Label(root) QUIT_button = Button(root, text = 'Выйти', command = Quit, bg = '#3f4b59', fg = 'white') # Кнопка завершения работы Input_button = Button(root, text = 'Открыть', command = name_input, width = 15, bg = '#3f4b59', fg = 'white') #Кнопка ввода text1.grid(column = 0, row = 0) # "Введите название файла" text4.grid(column = 3, row = 0) file_name.grid(column = 1, row = 0) # Поле ввода Input_button.grid(column = 2, row = 0) # Кнопка ввода QUIT_button.grid(column = 0, row = 2) file_name.focus() # Начальная фокусировка на поле ввода run() root.mainloop() START = Tk() START.title('Добро пожаловать') START.geometry('300x100+850+400') cover = Label(START, bg = 'black',height = 100, width = 100) cover.place(x = 0, y = 0) start_button = Button(START, text = 'Начать работу', command = start, width = 30, height = 5, bg = '#3f4b59', fg = 'white') start_button.place(x = 40, y = 7) START.mainloop()