Работа с графическим интерфейсом
26.05.2021, 17:40. Показов 810. Ответов 0
| Python | 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
| #!/usr/bin/env python3
# -*- config: utf-8 -*-
from tkinter import *
from tkinter import messagebox as mb
from tkinter import filedialog as fd
import moduly
def add_window() :
def add() :
surname = en1.get()
name = en2.get()
number = en3.get()
date = en4.get()
trains.add(surname, name, number, date)
add_w = Toplevel()
add_w.title('Добавить')
add_w.resizable(False, False)
add_w.geometry('400x200')
en1 = Entry(add_w)
en2 = Entry(add_w)
en3 = Entry(add_w)
en4 = Entry(add_w)
lb1 = Label(add_w, text = "Место отправления")
lb2 = Label(add_w, text = "Место назначения")
lb3 = Label(add_w, text = "Номер поезда")
lb4 = Label(add_w, text = "Номера посадочных площадок")
bt1 = Button(add_w, text = "Добавить", command = add)
lb1.grid(row = 0, column = 0)
lb2.grid(row = 1, column = 0)
lb3.grid(row = 2, column = 0)
lb4.grid(row = 3, column = 0)
en1.grid(row = 0, column = 1)
en2.grid(row = 1, column = 1)
en3.grid(row = 2, column = 1)
en4.grid(row = 3, column = 1)
bt1.grid(row = 4, column = 0, columnspan = 2)
def load_window() :
def load_f() :
trains.load(en5.get())
load_w.destroy()
load_w = Toplevel()
load_w.title('Сохранение')
load_w.resizable(False, False)
load_w.geometry('225x100')
lb5 = Label(load_w, text = "Введите название файла")
en5 = Entry(load_w)
bt3 = Button(load_w, text = "Загрузить", command = load_f)
lb5.pack(padx = 2, pady = 2)
en5.pack(padx = 2, pady = 2)
bt3.pack(padx = 2, pady = 2)
def save_window() :
def save_f() :
trains.save(en5.get())
save_w.destroy()
save_w = Toplevel()
save_w.title('Сохранение')
save_w.resizable(False, False)
save_w.geometry('225x100')
lb4 = Label(save_w, text = "Введите название файла")
en5 = Entry(save_w)
bt3 = Button(save_w, text = "Сохранить", command = save_f)
lb4.pack(padx = 2, pady = 2)
en5.pack(padx = 2, pady = 2)
bt3.pack(padx = 2, pady = 2)
def help_window() :
help_w = Toplevel()
help_w.title('Помощь')
help_w.resizable(False, False)
help_w ['bg'] = 'white'
img = PhotoImage(file = '1.png')
bt2 = Button(
help_w,
image = img,
bg = 'white',
borderwidth = 0,
activebackground = 'white',
command = lambda : help_w.destroy()
)
bt2.image = img
bt2.pack()
def select_window() :
def choice() :
try :
choice_en = int(en5.get())
res = trains.select(choice_en)
if res :
for idx, train in enumerate(res, 1) :
text.delete(0.0, END)
text.insert(0.0, '{:>4}: {}'.format(idx, train.surname))
else :
text.delete(0.0, END)
text.insert(0.0, 'Такой поездки нет в базе данных')
except(ValueError, TypeError) :
mb.showinfo("Выбор номера поезда",
"Введите номер поезда!")
sel_w = Toplevel()
sel_w.title('Выбрать')
sel_w.resizable(False, False)
sel_w.geometry('225x100')
lb5 = Label(sel_w, text = "Введите номер поезда")
en5 = Entry(sel_w)
bt3 = Button(sel_w, text = "Подтвердить", command = choice)
lb5.pack(padx = 2, pady = 2)
en5.pack(padx = 2, pady = 2)
bt3.pack(padx = 2, pady = 2)
def show() :
text.delete(0.0, END)
text.insert(0.0, trains)
if __name__ == '__main__' :
trains = moduly.trainss()
root = Tk()
root.geometry('900x700')
root.title('Главное окно')
root.resizable(False, False)
main_menu = Menu(root)
root.config(menu = main_menu)
file_menu = Menu(main_menu, tearoff = 0)
file_menu.add_command(label = "Открыть", command = load_window)
file_menu.add_command(label = "Добавить", command = add_window)
file_menu.add_command(label = "Сохранить", command = save_window)
main_menu.add_cascade(label = "Файл", menu = file_menu)
main_menu.add_command(label = "Показать", command = show)
main_menu.add_command(label = "Выбрать", command = select_window)
main_menu.add_command(label = "Помощь", command = help_window)
main_menu.add_command(label = "Выход", command = lambda : root.destroy())
text = Text(bg = 'white', width = 97, height = 100)
text.pack(side = LEFT)
scroll = Scrollbar(command = text.yview)
scroll.pack(side = LEFT, fill = Y)
text.config(yscrollcommand = scroll.set)
root.mainloop() |
|
module
| Python | 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
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
| #!/usr/bin/env python3
# -*- config: utf-8 -*-
from dataclasses import dataclass, field
from typing import List
import xml.etree.ElementTree as ET
class IllegalDateError(Exception):
def __init__(self, date, message="Illegal date (ДД.ММ.ГГГГ)"):
self.date = date
self.message = message
super(IllegalDateError, self).__init__(message)
def __str__(self):
return f"{self.date} -> {self.message}"
class UnknownCommandError(Exception):
def __init__(self, command, message="Unknown command"):
self.command = command
self.message = message
super(UnknownCommandError, self).__init__(message)
def __str__(self):
return f"{self.command} -> {self.message}"
@dataclass(frozen=True)
class trains:
surname: str
name: str
number: str
date: str
@dataclass
class trainss:
trainss: List[trains] = field(default_factory=lambda: [])
def add(self, surname, name, number, date):
self.trainss.append(
trains(
surname=surname,
name=name,
number=number,
date=date
)
)
self.trainss.sort(key=lambda trains: trains.number)
def __str__(self):
table = []
line = '+-{}-+-{}-+-{}-+-{}-+-{}-+'.format(
'-' * 4,
'-' * 20,
'-' * 20,
'-' * 20,
'-' * 15
)
table.append(line)
table.append(
'| {:^4} | {:^20} | {:^20} | {:^20} | {:^15} |'.format(
"№",
"Место отправления",
"Место назначения",
"Номер поезда",
"Номера ПП"
)
)
table.append(line)
for idx, trains in enumerate(self.trainss, 1):
table.append(
'| {:>4} | {:<20} | {:<20} | {:<20} | {:>15} |'.format(
idx,
trains.surname,
trains.name,
trains.number,
trains.date
)
)
table.append(line)
return '\n'.join(table)
def select(self, surname):
result = []
for trains in self.trainss:
if trains.surname == surname:
result.append(trains)
return result
def load(self, filename):
with open(filename, 'r', encoding='utf8') as fin:
xml = fin.read()
parser = ET.XMLParser(encoding="utf8")
tree = ET.fromstring(xml, parser=parser)
self.trainss = []
for trains_element in tree:
surname, name, number, date = None, None, None, None
for element in trains_element:
if element.tag == 'surname':
surname = element.text
elif element.tag == 'name':
name = element.text
elif element.tag == 'number':
number = element.text
elif element.tag == 'date':
date = element.text
if surname is not None and name is not None \
and number is not None and date is not None:
self.trainss.append(
trains(
surname=surname,
name=name,
number=number,
date=date
)
)
def save(self, filename):
root = ET.Element('trainss')
for trains in self.trainss:
trains_element = ET.Element('trains')
surname_element = ET.SubElement(trains_element, 'surname')
surname_element.text = trains.surname
name_element = ET.SubElement(trains_element, 'name')
name_element.text = trains.name
number_element = ET.SubElement(trains_element, 'number')
number_element.text = int(trains.number)
date_element = ET.SubElement(trains_element, 'date')
date_element.text = trains.date
root.append(trains_element)
tree = ET.ElementTree(root)
with open(filename, 'wb') as fout:
tree.write(fout, encoding='utf8', xml_declaration=True) |
|
не работает открыть и сохранить,как решить проблему?
0
|