Форум программистов, компьютерный форум, киберфорум
Python: Tkinter
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
0 / 0 / 0
Регистрация: 18.11.2020
Сообщений: 153

Работа с графическим интерфейсом

26.05.2021, 17:40. Показов 831. Ответов 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
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
26.05.2021, 17:40
Ответы с готовыми решениями:

Шифрование с графическим интерфейсом в tkinter
Добрый день! Моя задача: основное окно - набор кнопок с выбором нужной функции для кодирования сообщения. У каждой кнопки, кроме кнопки...

Tkinter, еще не нажал на кнопку, а событие произошло. И как скрыть терминал в программе с графическим интерфейсом
Тестирую библиотеку Thinter (python 2.7). Хочу сделать так, чтобы при нажатии на кнопку скрывались некоторые элементы. Ну для примера пусть...

Арифмометр с графическим интерфейсом
Напишите программу «Арифмометр» с графическим пользовательским интерфейсом на PyQT. На форме разместите два поля для ввода, в которые...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
26.05.2021, 17:40
Помогаю со студенческими работами здесь

Калькулятор с графическим интерфейсом
Напишите программу «Полноценный калькулятор» с графическим пользовательским интерфейсом на PyQT. Калькулятор должен уметь работать с...

Простой калькулятор с графическим интерфейсом
Не могу разобраться как написать программу в которой нужно сделать текстовыми полями (Text), 4 переключателя Radiobutton и кнопкой button....

Создание проекта с графическим интерфейсом
По братски) Буду очень благодарен)

Разработать программу с графическим интерфейсом
Разработать программу со следующим графическим интерфейсом, предусмотреть обработку возможных ошибок: Надо ввести радиус, вывести...

Напишите программу с графическим пользовательским интерфейсом
Условия задачи: Напишите программу с графическим пользовательским интерфейсом на PyQT. При старте приложения должен открываться диалог...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Функция установки текстового статуса в реквизите формы документа
Maks 01.04.2026
Алгоритм из решения ниже реализован на нетиповом документе "ВыдачаОборудованияНаСпецтехнику" разработанного в конфигурации КА2, в дополнении к предыдущему решению. На форме документа создается. . .
К слову об оптимизации
kumehtar 01.04.2026
Вспоминаю начало 2000-х, университет, когда я писал на Delphi. Тогда среди программистов на форумах активно обсуждали аккуратную работу с памятью: нужно было следить за переменными, вовремя. . .
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru