Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
125 / 120 / 18
Регистрация: 05.08.2021
Сообщений: 529

Почему метод test_button не запускает append_obj_to_file? Он должен по нажатию кнопки записывать данные из полей в текст

16.08.2023, 05:01. Показов 324. Ответов 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
from tkinter import * 
 
 
class Person: 
    instances = [] 
    data_from_entries = '' 
 
    def __init__(self, name, subname, sex, age, number, adress): 
        self.name = name 
        self.subname = subname 
        self.sex = sex 
        self.age = age 
        self.number = number 
        self.adress = adress 
        self.instances.append(self) 
 
    @staticmethod 
    def output(): 
        inp = input('Введите искомую фамилию ') 
        test = False 
        for i in Person.instances: 
            if i.subname == inp: 
                test = True 
                print(f'имя {i.name} \nпол: {i.sex} \nвозраст: {i.age} \nномер: {i.number} \nадрес: {i.adress}') 
        if not test: 
            print('Фамилия не найдена') 
 
    @staticmethod 
    def append_obj_to_file(): 
        with open('objects.txt', 'a+', encoding='utf-8') as file: 
            data = Person.data_from_entries 
            print('метод вызван из test_button', data) 
            file.write(data) 
            file.seek(0) 
            s = file.read() 
 
    @staticmethod 
    def read_db(): 
        with open('objects.txt', encoding='utf-8') as file: 
            s = file.read().split(' ') 
            res = [] 
            for i in range(0, len(s) - 5, 6): 
                res += [s[i: i + 6]] 
            return res 
 
    @staticmethod 
    def create_objects(): 
        s = Person.read_db() 
        for i in s: 
            obj = Person(*i) 
 
    @staticmethod 
    def draw_gui(): 
        root = Tk() 
        root.geometry('200x650+200+100') 
 
        def test_button(): 
            result = [e1.get(), e2.get(), e3.get(), e4.get(), e5.get(), e6.get()] 
            result2 = list(map(lambda x: 'не указано' if x == '' else x, result)) 
            Person.data_from_entries = ' '.join(result2) 
            print(Person.data_from_entries) 
            e1.delete(0, END) 
            e2.delete(0, END) 
            e3.delete(0, END) 
            e4.delete(0, END) 
            e5.delete(0, END) 
            e6.delete(0, END) 
            Person.append_obj_to_file() 
 
        label1 = Label(text='Имя') 
        e1 = Entry(width=20) 
        label2 = Label(text='Фамилия') 
        e2 = Entry(width=20) 
        label3 = Label(text='Пол') 
        e3 = Entry(width=20) 
        label4 = Label(text='Возраст') 
        e4 = Entry(width=20) 
        label5 = Label(text='Номер') 
        e5 = Entry(width=20) 
        label6 = Label(text='Адрес') 
        e6 = Entry(width=20) 
        button = Button(text='Добавить контакт', command=test_button) 
 
        label1.pack() 
        e1.pack() 
        label2.pack() 
        e2.pack() 
        label3.pack() 
        e3.pack() 
        label4.pack() 
        e4.pack() 
        label5.pack() 
        e5.pack() 
        label6.pack() 
        e6.pack() 
        button.pack() 
        e1.focus() 
 
        root.mainloop() 
 
 
Person.draw_gui() 
# Person.append_obj_to_file() 
# Person.append_obj_to_file() 
# Person.append_obj_to_file() 
# Person.create_objects() 
# Person.output() 
# Person.output()
В консольном варианте все работало
Python
1
2
3
4
5
6
7
8
9
10
@staticmethod
    def append_obj_to_file():
        with open('objects.txt', 'a+', encoding='utf-8') as file:
            data = ''
            queries = ['Имя: ', 'Фамилия: ', 'Пол: ', 'Возраст: ', 'Номер: ', 'Адрес: ']
            for i in range(len(queries)):
                data += (input(queries[i].strip()) + ' ')
            file.write(data)
            file.seek(0)
            s = file.read()
Добавлено через 1 час 31 минуту
Понял. Не тот файл запускал в Пайчарме.
Заодно исправил мелкие ошибки
file.write(data + ' ')
result2 = list(map(lambda x: 'не_указано' if x == '' else x, result))

Добавлено через 51 минуту
Вот, дело пошло заметно успешнее...
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
from tkinter import *
 
 
class Person:
    instances = []
    data_from_entries = ''
    search = ''
 
    def __init__(self, name, subname, sex, age, number, adress):
        self.name = name
        self.subname = subname
        self.sex = sex
        self.age = age
        self.number = number
        self.adress = adress
        self.instances.append(self)
 
    @staticmethod
    def output():
        inp = input('Введите искомую фамилию ')
        # inp = Person.search
        print(inp)
        test = False
        for i in Person.instances:
            if i.subname == inp:
                test = True
                print(f'имя {i.name} \nпол: {i.sex} \nвозраст: {i.age} \nномер: {i.number} \nадрес: {i.adress}')
        if not test:
            print('Фамилия не найдена')
 
    @staticmethod
    def append_obj_to_file():
        with open('objects.txt', 'a+', encoding='utf-8') as file:
            data = Person.data_from_entries
            file.write(' ' + data + ' ')
            file.seek(0)
            s = file.read()
 
    @staticmethod
    def read_db():
        with open('objects.txt', encoding='utf-8') as file:
            s = file.read().split(' ')
            res = []
            for i in range(0, len(s) - 5, 6):
                res += [s[i: i + 6]]
            return res
 
    @staticmethod
    def create_objects():
        s = Person.read_db()
        for i in s:
            obj = Person(*i)
 
    @staticmethod
    def draw_gui():
        root = Tk()
        root.geometry('200x500+200+100')
 
        def change_spaces(s):
            s = s.replace(' ', '_')
            return s
 
        def test_button():
            result = [e1.get(), e2.get(), e3.get(), e4.get(), e5.get(), e6.get()]
            result2 = list(map(lambda x: 'не_указано' if x == '' else x, result))
            for i in range(len(result2)):
                result2[i] = change_spaces(result2[i])
            Person.data_from_entries = ' '.join(result2)
            e1.delete(0, END)
            e2.delete(0, END)
            e3.delete(0, END)
            e4.delete(0, END)
            e5.delete(0, END)
            e6.delete(0, END)
            Person.append_obj_to_file()
            Person.create_objects()
            Person.output()
 
        def search_name():
            Person.search = e7.get()
            Person.output()
 
        label1 = Label(text='Имя')
        e1 = Entry(width=20)
        label2 = Label(text='Фамилия')
        e2 = Entry(width=20)
        label3 = Label(text='Пол')
        e3 = Entry(width=20)
        label4 = Label(text='Возраст')
        e4 = Entry(width=20)
        label5 = Label(text='Номер')
        e5 = Entry(width=20)
        label6 = Label(text='Адрес')
        e6 = Entry(width=20)
        button = Button(text='Добавить контакт', command=test_button)
        e7 = Entry(width=20)
        button2 = Button(text='Искомая фамилия', command=search_name)
 
        label1.pack()
        e1.pack()
        label2.pack()
        e2.pack()
        label3.pack()
        e3.pack()
        label4.pack()
        e4.pack()
        label5.pack()
        e5.pack()
        label6.pack()
        e6.pack()
        button.pack()
        e7.pack()
        button2.pack()
        e1.focus()
 
        root.mainloop()
 
 
Person.draw_gui()
 
# Person.append_obj_to_file()
# Person.append_obj_to_file()
# Person.append_obj_to_file()
# Person.create_objects()
# Person.output()
# Person.output()
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
16.08.2023, 05:01
Ответы с готовыми решениями:

Как достать и передать в другой метод значения нескольких текстовых полей по нажатию кнопки?
Привет всем! Владеющие языком, прошу принять новичка в свои ряды, ну и... помочь чуток. Не могу понять как... Есть 2 (и более)...

По нажатию кнопки webBrowser должен получить фокус
По нажатию кнопки webBrowser должен получить фокус. Browser.Focus() срабатывает через раз. Т.е. нажал кнопку один раз - ничего не...

Срабатывает скрипт при загрузке, а должен по нажатию кнопки
При загрузки страницы сразу же исполняется скрипт, а должен по кнопке вот исходник. На странице регистрация проблема.Загружайте файлы...

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.08.2023, 05:01
Помогаю со студенческими работами здесь

Добавление полей по нажатию кнопки
Здравствуйте уважаемая Администрация и пользователи форума! Подскажите, пожалуйста как реализовать подобное: Суть - добавление...

Добавление полей по нажатию кнопки
Здравствуйте спецы. Подскажите пожалуйста такую вещь. Есть форма. В ней есть несколько полей для воода, например масса детали, количество и...

Неограниченное добавление полей по нажатию кнопки без сохранения при обновлении
Доброго времени суток. Казалось бы простая задача, и вроде бы когда-то делал, но не могу найти у себя (может ошибаюсь что делал) и по...

Таймер должен считать от 60 сек до 0. По нажатию кнопки застывать на этом значении, а при повторном продолжать отсчет
Как сделать что бы таймер вел отсчет времени от 60 секунд до 0 после нажатия на кнопку и застывал на этом значении, и после повторного...

Если CheckBox отмечен, то по нажатию кнопки текст копируется в название формы, иначе в название кнопки
Разработать Windows Forms приложение, содержащее TextBox, CheckBox и кнопку. Если CheckBox отмечен, то по нажатию кнопки текст копируется в...


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

Или воспользуйтесь поиском по форуму:
1
Ответ Создать тему
Новые блоги и статьи
Установка Qt Creator для C и C++: ставим среду, CMake и MinGW без фреймворка Qt
8Observer8 05.04.2026
Среду разработки Qt Creator можно установить без фреймворка Qt. Есть отдельный репозиторий для этой среды: https:/ / github. com/ qt-creator/ qt-creator, где можно скачать установщик, на вкладке Releases:. . .
AkelPad-скрипты, структуры, и немного лирики..
testuser2 05.04.2026
Такая программа, как AkelPad существует уже давно, и также давно существуют скрипты под нее. Тем не менее, прога живет, периодически что-то не спеша дополняется, улучшается. Что меня в первую очередь. . .
Отображение реквизитов в документе по условию и контроль их заполнения
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеСпецтехники", разработанного в конфигурации КА2. Данный документ берёт данные из другого нетипового документа. . .
Фото всей Земли с борта корабля Orion миссии Artemis II
kumehtar 04.04.2026
Это первое подобное фото сделанное человеком за 50 лет. Снимок называют новым вариантом легендарной фотографии «The Blue Marble» 1972 года, сделанной с борта корабля «Аполлон-17». Новое фото. . .
Вывод диалогового окна перед закрытием, если документ не проведён
Maks 04.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: реализовать программный контроль на предмет проведения документа. . .
Программный контроль заполнения реквизитов табличной части документа
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: 1. Реализовать контроль заполнения реквизита. . .
wmic не является внутренней или внешней командой
Maks 02.04.2026
Решение: DISM / Online / Add-Capability / CapabilityName:WMIC~~~~ Отсюда: https:/ / winitpro. ru/ index. php/ 2025/ 02/ 14/ komanda-wmic-ne-naydena/
Программная установка даты и запрет ее изменения
Maks 02.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "СписаниеМатериалов", разработанного в конфигурации КА2. Задача: при создании документов установить период списания автоматически. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru