Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.68/25: Рейтинг темы: голосов - 25, средняя оценка - 4.68
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 9

Как записать строку из поля ввода в текстовый фаил?

12.12.2013, 17:55. Показов 5262. Ответов 17
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте, мне необходима запись данных из строки ввода в txt фаил, подскажите как это реализовать, если можно на прямом примере.
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
# *- coding: utf-8 -*-
from math import *
from Tkinter import *
 
root = Tk()             
root.title("Проведение тестирования")  
frame = Frame(root)
frame.pack()
 
 
def login():
    u=open("start.txt", "w")
    p=p.write(u)
    
    
    
    print u
    
 
def test():
    import ideal  
 
 
tabel1 = Label(frame, text="Пользователь", font='arial 14')
tabel1.grid(row=1, column=1)
 
u_entry = Entry(frame, width=35, text=" ")
u_entry.grid(row=2, column=1, padx=5)
 
eval_button = Button(frame,bg='light Blue', text="Загрузить тест", width=15,height=1,command=test)
eval_button.grid(row=1, column=3, pady=10, padx=10)
 
eval_button = Button(frame,bg='light Blue', text="Ок", width=10,height=1,command=login)
eval_button.grid(row=2, column=2, pady=15, padx=15)
 
exit_button = Button(frame, bg='pink', text="Выход", width=10,command=root.destroy)
exit_button.grid(row=2, column=3, padx=10, pady=10)
 
root.mainloop()
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.12.2013, 17:55
Ответы с готовыми решениями:

VueJS и springMVC. Как записать данные из поля ввода в БД?
Здравствуйте. Есть такой фрагмент html кода, написанного на vueJS: <div id="app"> <el-input placeholder="Введите...

Как строку-результат записать в текстовый файл (jscript)
Подскажите, пожалуйста, как результат работы программы (строка) записать в jscript в нужный мне текстовый файл? Буду благодарна за ответ!...

Как из Memo считать строку и записать её в текстовый документ
Имеется Memo, в котором сформирован список из текстовых строк. Количество строк может меняться, в зависимости от вычислений программы. Как...

17
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
12.12.2013, 19:37
Python
1
2
3
4
5
6
7
8
9
10
11
12
def checked():
  value=u_entry.get()
  print value
  with open('outuser', 'a+') as outf:
    outf.write(value+'\n')
 
 
u_entry = Entry(frame, width=35, text=" ")
u_entry.grid(row=2, column=1, padx=5)
 
eval_button = Button(frame,bg='light Blue', text="Ок", width=10,height=1,command=checked)
eval_button.grid(row=2, column=2, pady=15, padx=15)
для получения содержимого Entry, используешь метод сего виджета - .get. Это значение получаешь в функции-обработчике нажатие кнопки и там же производишь нужные тебе действия над содержимым. Записываешь ли в файл, выводишь в консоль, удаляешь - все в твоей власти
2
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 9
12.12.2013, 20:12  [ТС]
Я ведь всё верно сделал?

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
# *- coding: utf-8 -*-
from math import *
from Tkinter import *
 
root = Tk()             
root.title("Проведение тестирования")  
frame = Frame(root)
frame.pack()
 
 
def checked():
  value=u_entry.get()
  print value
  with open('outuser.txt', 'a+') as outf:
    outf.write(value+'\n')
 
 
def test():
    import ideal  
 
 
tabel1 = Label(frame, text="Пользователь", font='arial 14')
tabel1.grid(row=1, column=1)
 
u_entry = Entry(frame, width=35, text=" ")
u_entry.grid(row=2, column=1, padx=5)
 
eval_button = Button(frame,bg='light Blue', text="Загрузить тест", width=15,height=1,command=test)
eval_button.grid(row=1, column=3, pady=10, padx=10)
 
eval_button = Button(frame,bg='light Blue', text="Ок", width=10,height=1,command=checked)
eval_button.grid(row=2, column=2, pady=15, padx=15)
    
 
exit_button = Button(frame, bg='pink', text="Выход", width=10,command=root.destroy)
exit_button.grid(row=2, column=3, padx=10, pady=10)
 
root.mainloop()


Проблема к сожалению не решилась. Выдает ошибку:

Python
1
2
3
4
5
6
7
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "C:\Users\Toshiba\Desktopурсовая работа алг\Okno zapuska - копия - копия.py", line 15, in checked
    outf.write(value+'\n')
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
0
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
12.12.2013, 20:22
Python
1
2
3
4
5
def checked():
  value=u_entry.get()
  print value
  with open('outuser', 'a+') as outf:
    outf.write(value.decode('utf-8').encode('cp1251')+'\n')
попробуй
0
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 9
12.12.2013, 20:24  [ТС]
К сожалению

Python
1
2
3
4
5
6
7
8
9
Exception in Tkinter callback
Traceback (most recent call last):
  File "C:\Python26\lib\lib-tk\Tkinter.py", line 1410, in __call__
    return self.func(*args)
  File "C:\Users\Toshiba\Desktopурсовая работа алг\Okno zapuska - копия - копия.py", line 15, in checked
    outf.write(value.decode('utf-8').encode('cp1251')+'\n')
  File "C:\Python26\lib\encodings\utf_8.py", line 16, in decode
    return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-5: ordinal not in range(128)
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
12.12.2013, 21:23
сверху запиши
Python
1
# coding: cp1251
сам исходник перекодируй в эту же кодировку (если это нужно)
1
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 9
12.12.2013, 21:28  [ТС]
Проблема не решилась
0
4866 / 3288 / 468
Регистрация: 10.12.2008
Сообщений: 10,570
12.12.2013, 21:32
Цитата Сообщение от wilny Посмотреть сообщение
Python
1
outf.write(value.decode('utf-8').encode('cp1251')+'\n')
файл с этой строкой сюда скопируй
0
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
13.12.2013, 12:27
Python
1
2
3
4
5
6
7
8
def checked():
  value=u_entry.get()
  if isinstance(value, unicode):
    value = value.encode('utf-8')
  elif isinstance(value, str):
    value = value.decode('utf-8')
  with open('outuser', 'a+') as outf:
    outf.write(value+'\n')
1
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 9
13.12.2013, 21:44  [ТС]
Спасибо, всё отлично работает)

Добавлено через 34 минуты
К сожалению, возник новый вопрос. Как из одной функции def сохранить значение, к примеру p и использовать его уже в другом дэфе.


Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#-Десятый вопрос 
    
    z = float(z_entry.get())
    if z==20: 
        tabel1 = Label(frame, text=" верно ",bg='green', font='arial 14')
        tabel1.grid(row=8, column=3)
        p=p+1
        
    if z!=20:
        tabel1 = Label(frame, text="ошибка",bg='red', font='arial 14')
        tabel1.grid(row=8, column=3)
 
 
 
#Подсчёт правильных
    for i in range(1,10):
        p_label.configure(text=("Результат",p,"/10"))
 
        if p>=0:
            tabel2 = Label(frame, text="Оценка:", font='arial 14')
            tabel2.grid(row=6, column=2)
Для ясности картины, я хочу произвести печать p (результат) в текстовый файл, упоминаемый выше.
0
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
14.12.2013, 11:58
Два оптимальных варианта, если общее пространство имен, то через глобальную переменную

Python
1
2
3
4
5
6
7
8
9
10
11
12
some = 0
 
def hello(value):
   global some
   some+=value
 
def hello2(value):
    global some
    some+=value
 
hello(1)   # some  = 1
hello2(5) # some =  6
либо через класс, засчет self, создаем общность пространства для методов и переменных класса.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
class some:
  def __init__(self):
    self.some = 0
 
  def hello(self, value):
    self.some+=value
  def hello2(self,value):
    self.some+=value
    
s=some()
s.hello(1)  # s.some = 1
s.hello2(5) # s.some = 6
print s.some # == 6
1
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 9
15.12.2013, 16:36  [ТС]
Я совсем нуб.. можно уточку подробнее? На данном этапе, я имею

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
from math import *
from Tkinter import *
 
 
# Создание окна
root = Tk()             
root.title("Тест 1")
frame = Frame(root)
frame.pack()
 
 
 
def zzz():
    p=0
 
 
 
    a = float(a_entry.get())
    if a==2: 
        tabel1 = Label(frame, text=" верно ",bg='green', font='arial 14')
        tabel1.grid(row=2, column=1)
        p=p+1
 
    if a!=2:
        tabel1 = Label(frame, text="ошибка",bg='red', font='arial 14')
        tabel1.grid(row=2, column=1)
 
 
 
    s = float(s_entry.get())
    if s==4: 
        tabel1 = Label(frame, text=" верно ",bg='green', font='arial 14')
        tabel1.grid(row=2, column=2)
        p=p+1
        
    if s!=4:
        tabel1 = Label(frame, text="ошибка",bg='red', font='arial 14')
        tabel1.grid(row=2, column=2)
 
    print p
 
#--Вопрос 1
tabel1 = Label(frame, text="1+1", font='arial 14')
tabel1.grid(row=1, column=1)
 
#--Строка ввода 1
a_entry = Entry(frame,width=35)
a_entry.grid(row=3, column=1)
 
#--Вопрос 2
tabel1 = Label(frame, text="2+2", font='arial 14')
tabel1.grid(row=1, column=2)
 
#--Строка ввода 2
s_entry = Entry(frame, width=35)
s_entry.grid(row=3, column=2)
 
 
eval_button = Button(frame, text="Ответить", width=30, bg="light blue", command=zzz)
eval_button.grid(row=13, column=1)
 
 
root.mainloop()
К примеру, я хочу воспользоваться первым способом. Что мне необходимо?
def zzz будет первой функцией. В нём я найду p. А дальше уже во втором def, допустим def xxx я должен организовать печать имеющегося p в txt файл.
0
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
15.12.2013, 17:06
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
#!/usr/bin/env python
#coding: utf-8
 
from math import *
from Tkinter import *
 
 
 
def zzz():
  try:
    if a_entry.get():
      if int(a_entry.get()) == 2:
        print "Bingo u rigth"
      else:
        print "Error u slacker"
  except:
    a_entry.delete(0, END)
 
  try:
    if s_entry.get():
      if int(s_entry.get()) == 4:
        print "Bingo u rigth"
      else:
        print "Error u slacker"
  except:
    s_entry.delete(0, END)
# тут же можешь реализовывать запись в файл и прочие
# нужные тебе действия
# обработчки общий для двух виджетов Entry
 
 
 
# Создание окна
root = Tk()
root.title("Тест 1")
root.geometry("500x100")
frame = Frame(root)
frame.pack()
#--Вопрос 1
tabel1 = Label(frame, text="1+1", font='arial 14')
tabel1.grid(row=1, column=1)
 
#--Строка ввода 1
a_entry = Entry(frame,width=35)
a_entry.grid(row=3, column=1)
 
#--Вопрос 2
tabel1 = Label(frame, text="2+2", font='arial 14')
tabel1.grid(row=1, column=2)
 
#--Строка ввода 2
s_entry = Entry(frame, width=35)
s_entry.grid(row=3, column=2)
 
 
eval_button = Button(frame, text="Ответить", width=30, bg="light blue", command=zzz)
eval_button.grid(row=13, column=1)
 
 
root.mainloop()

Дай описание задания. Легче самому реализовать и на примере объяснить что, зачем и почему.
0
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 9
15.12.2013, 17:51  [ТС]
Необходимо создать программу для проведения тестирования. На данный момент, у меня есть окон с запуском теста и вводом пользователя (записывается в txt) и 10 вопросов, хочу чтобы результат этого тестирования также забивался в тот же txt. К сожалению запас операторов у меня слишком мал а заботу нужно защищать.
0
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
16.12.2013, 23:08
Цитата Сообщение от wilny Посмотреть сообщение
Необходимо создать программу для проведения тестирования. На данный момент, у меня есть окон с запуском теста и вводом пользователя (записывается в txt) и 10 вопросов, хочу чтобы результат этого тестирования также забивался в тот же txt. К сожалению запас операторов у меня слишком мал а заботу нужно защищать.
Условие задание не полное. Откуда берутся данные о пользователе? Как сохранять, в произвольном формате или нет, откуда брать вопросы? Считывать из файла, или уже должны быть заложены в логике программы? Дай мне текст задания. Полностью
Если нет, то на вот эту поделку, посмотри поможет отчасти - я показал, как забирать сведения из текстовых полей, вычислять успешность операции и уведомление в нижней метке о результате операции.

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
#!/usr/bin/env python
#coding: utf-8
 
from math import *
from Tkinter import *
 
 
 
def zzz():
  try:
    if a_entry.get():
      if int(a_entry.get()) == 2:
        status.config(fg="green", text="Bingo u RIGHT")
      else:
        status.config(fg="red", text="Error u slacker")
 
  except:
    a_entry.delete(0, END)
 
  try:
    if s_entry.get():
      if int(s_entry.get()) == 4:
        status.config(fg="green", text="Bingo u RIGHT")
      else:
        status.config(fg="red", text="Error u slacker")
 
  except:
    s_entry.delete(0, END)
# тут же можешь реализовывать запись в файл и прочие
# нужные тебе действия
# обработчки общий для двух виджетов Entry
 
def a_foutclear(event):
  status.config(text="")
  a_entry.delete(0, END)
 
def s_foutclear(event):
  status.config(text="")
  s_entry.delete(0, END)
 
 
# Создание окна
root = Tk()
root.title("Тест 1")
root.geometry("500x100")
frame = Frame(root)
frame.pack()
#--Вопрос 1
tabel1 = Label(frame, text="1+1", font='arial 14')
tabel1.grid(row=1, column=1)
 
#--Строка ввода 1
a_entry = Entry(frame,width=35)
a_entry.grid(row=3, column=1)
a_entry.bind('<FocusOut>', a_foutclear)
 
#--Вопрос 2
tabel1 = Label(frame, text="2+2", font='arial 14')
tabel1.grid(row=1, column=2)
 
#--Строка ввода 2
s_entry = Entry(frame, width=35)
s_entry.grid(row=3, column=2)
s_entry.bind('<FocusOut>', s_foutclear)
 
 
eval_button = Button(frame, text="Ответить", width=30, bg="light blue", command=zzz)
eval_button.grid(row=13, column=1)
 
status = Label(root)
status.config(bg="grey", width=15)
status.pack(expand=YES, fill=BOTH)
 
root.mainloop()
1
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 9
17.12.2013, 23:36  [ТС]
Условий, на самом деле, больше нет.
Спасибо большое за помощь.

Но я должен защищать работу. Не могли бы вы подсказать, как работает пару моментов?

Python
1
2
3
4
5
6
7
8
9
10
11
  try:
    if a_entry.get():
      if int(a_entry.get()) == 2:
        tabel1 = Label(frame, text="1+1", font='arial 14', fg='green')
        tabel1.grid(row=1, column=1)
        p=p+1
      else:
        tabel1 = Label(frame, text="1+1", font='arial 14', fg='red')
        tabel1.grid(row=1, column=1)
  except:
   a_entry.delete(0, END)
Я правильно понимаю, что на данном этапе....
-int необходим, чтобы программа понимала, что а - это число?
-и в принципе, действие происходит так, что если a не равно 2, то выполняется
Python
1
tabel1 = Label(frame, text="1+1", font='arial 14', fg='red')
-
Python
1
a_entry.delete(0, END)
закрывает этот процесс, что в отличии от изначального кода, даёт возможность пропустить вопрос


И к сожалению, осуществить запись в txt файл я так и не смог (
0
Z3JheSBoYXQ=
 Аватар для fanatdebian
342 / 237 / 83
Регистрация: 08.07.2012
Сообщений: 577
18.12.2013, 00:50
Цитата Сообщение от wilny Посмотреть сообщение
Условий, на самом деле, больше нет.
Спасибо большое за помощь.

Но я должен защищать работу. Не могли бы вы подсказать, как работает пару моментов?

Python
1
2
3
4
5
6
7
8
9
10
11
  try:
    if a_entry.get():
      if int(a_entry.get()) == 2:
        tabel1 = Label(frame, text="1+1", font='arial 14', fg='green')
        tabel1.grid(row=1, column=1)
        p=p+1
      else:
        tabel1 = Label(frame, text="1+1", font='arial 14', fg='red')
        tabel1.grid(row=1, column=1)
  except:
   a_entry.delete(0, END)

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
  
try:   # включаем перехват исключений 
    if a_entry.get(): # если в поле ввода a_entry что-то есть тогда
      if int(a_entry.get()) == 2:  # если эта переменная является целочисленным объектом, тогда приведение типа str->int не вызовет 
                                                 # возникновение исключений, а если будет НЕ Число тогда ход программы переходит к позиции 2
        tabel1 = Label(frame, text="1+1", font='arial 14', fg='green')   
        tabel1.grid(row=1, column=1)
        p=p+1
      else:                
        tabel1 = Label(frame, text="1+1", font='arial 14', fg='red')
        tabel1.grid(row=1, column=1)
  except:    #                    позиция 2
   a_entry.delete(0, END)   # очищаем поле от начала до конца от неверного значения в виде строковых данных
1
0 / 0 / 0
Регистрация: 12.12.2013
Сообщений: 9
20.12.2013, 13:54  [ТС]
спасибо
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
20.12.2013, 13:54
Помогаю со студенческими работами здесь

Как записать в текстовый файл значения в строку через пробел?
надо записать в текстовый файл 3 значения через пробел P.S. еще хотелось бы узнать как сложить между собой все числа находящиеся в var

Как записать 3 числа в одну строку в текстовый файл. Записывается в 3 строки
Помогите найти строку которая записывает в файле в новую строку, мне необходимо записывать в одну строку, а записывает в 3 строки ...

Как извлечь из XLS-файла заданную строку и записать её в текстовый документ?
доброе утра, есть строчка http://anicon.sknt.ru/1.html возможно как то ее вынуть в текстовый документ?

Упорядочить строку по возрастанию, записать в новый текстовый файл новую строку цифр
Создать текстовый файл,который имеет в себе строку цифр.Упорядочить строку по возрастанию,записать в новый текстовый файл новую строку цифр.

Как записать две строки поля одной таблицы в одну строку другой?
Есть такой запрос к БД и результат этого запроса две строки ROH и KOR поля FIL С 6 строки результат запроса заполняется в kbmMemTable1...


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

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip Сканируйте QR-код на мобильном и вы увидите, что появится джойстик для управления главным героем. . . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru