Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- 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()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement