Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.77/30: Рейтинг темы: голосов - 30, средняя оценка - 4.77
Модератор
Эксперт NIX
 Аватар для NeoMatrix
8536 / 3413 / 105
Регистрация: 24.05.2011
Сообщений: 14,647
Записей в блоге: 8

Перенос значений переменных из одного в модуля в другой и обратно

21.09.2020, 15:32. Показов 7343. Ответов 26

Студворк — интернет-сервис помощи студентам
Всем доброго времени.
Заранее прошу ногами не пинать, ибо нуб в питоне (да это и из кода видно).

Итак, имеем модуль, передающий в БД MySQL запросы.
В данном случае - запрос залогиниться и веруть версию БД.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/usr/bin/python3
 
import pymysql
 
host = 'hostname'
user = 'username'
passwd = 'password'
dbname = 'db-name'
db = pymysql.connect(host, user, passwd, dbname)
 
with db.cursor() as cur:
    cur.execute('select version()')
    ver = cur.fetchone()
 
    print ("Database version : %s " % ver)
 
# disconnect from server
db.close()
Имеем второй модуль, отрисовывающий на tkinter интерфейс ввода данных для запроса.
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
#! /usr/bin/python3
 
# The login GUI for DBuser
 
from tkinter import * 
 
root = Tk () 
root.title("Логин") 
root.geometry('350x170+200+200') 
 
 
lbl = Label(root, text="Welcome to GUIDB!")
lbl.grid(column=3, row=0)
 
lbl = Label(root, text="host")
lbl.grid(column=0, row=1)
txt = Entry(root, width=20)
txt.grid(column=2, row=1, columnspan=4)
lbl = Label(root, text="username")
lbl.grid(column=0, row=2)
txt = Entry(root, width=20)
txt.grid(column=2, row=2, columnspan=4)
lbl = Label(root, text="password")
lbl.grid(column=0, row=3)
txt = Entry(root, width=20)
txt.grid(column=2, row=3, columnspan=4)
lbl = Label(root, text="dbname")
lbl.grid(column=0, row=4)
txt = Entry(root, width=20)
txt.grid(column=2, row=4, columnspan=4)
 
def login():
    a = Toplevel()
    a.geometry('200x150+150+150')
    a['bg'] = 'grey'
    a.overrideredirect(True)
    Label(a, text="Ответ БД при успешном логине").pack(expand=1)
    a.after(5000, lambda: a.destroy())
 
def regist():
    a = Toplevel()
    a.geometry('200x150+150+150')
    a['bg'] = 'grey'
    a.overrideredirect(True)
    Label(a, text="Здесь будет форма регистрации").pack(expand=1)
    a.after(5000, lambda: a.destroy())
 
btn = Button(text="Справка", width=10) # на данный момент ничего не делает
btn.grid(column=0, row=6)
btn = Button(text="Войти", width=10, command=login)
btn.grid(column=3, row=6)
btn = Button(text="Регистрация", width=10, command=regist)
btn.grid(column=4, row=6)
 
root.mainloop()
Вопрос в том, как связать эти два модуля между собой так. чтобы данные, вводимые в форму второго модуля передавались в первый модуль и отправлялись в БД, а её ответ возвращаемый в первый модуль, передавался второму для отображения в GUI.
Да, я понимаю, что у меня вводимые в поля данные вообще никуда не попадают. Я пока ещё не сообразил, как их забрать в переменную.

Но как её потом, когда она заимеется и будет содержать данные, передавать из модуля в модуль?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
21.09.2020, 15:32
Ответы с готовыми решениями:

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

Перенос значений из одного массива в другой
Пусть есть два массива. Один размера n^2 на 3. Второй n на n. В первом храняться значения (i,j, value). Нужно n*n значений value из...

Перенос значений из одного листа в другой
Написал, в общем, макрос для Excel, который переносит недостающие значения строк из второго листа в первый. Переносит, только вот когда в...

26
Модератор
Эксперт NIX
 Аватар для NeoMatrix
8536 / 3413 / 105
Регистрация: 24.05.2011
Сообщений: 14,647
Записей в блоге: 8
21.09.2020, 19:16  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от 0x10 Посмотреть сообщение
подправил пример
Спасибо, работает отрисовка и ввод (в консоль выхлапывает "localhost", ибо ввожу в "host"="localhost").
Цитата Сообщение от 0x10 Посмотреть сообщение
# Здесь установить соединение и выполнить запрос
Теперь думаю, как соединяться. Но мой моск уже вскипает.

Добавлено через 1 минуту
Цитата Сообщение от 0x10 Посмотреть сообщение
Импорт в первой строке не пропущен?
Ну да. И преамбула #!/usr/bin/python3 тоже.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.09.2020, 19:18
Цитата Сообщение от NeoMatrix Посмотреть сообщение
Теперь думаю, как соединяться. Но мой моск уже вскипает.
Теперь-то осталось легко. Код локализовали внутри функции login(). Переменные все есть.
0
Модератор
Эксперт NIX
 Аватар для NeoMatrix
8536 / 3413 / 105
Регистрация: 24.05.2011
Сообщений: 14,647
Записей в блоге: 8
21.09.2020, 19:34  [ТС]
Цитата Сообщение от NeoMatrix Посмотреть сообщение
Теперь думаю, как соединяться
Вставил
Python
1
2
3
4
5
6
7
8
def login(self):
        # Здесь установить соединение и выполнить запрос
        db = pymysql.connect(host, user, passwd, dbname)
 
        with db.cursor() as cur:
            cur.execute('select version()')
            ver = cur.fetchone()
        print ("Database version : %s " % ver)
И, как я понимаю, нужно передавать так?
Python
1
db = pymysql.connect(self.host, self.user, self.passwd, self.dbname)
Добавлено через 1 минуту
Не сработало... Что-то я опять делаю неправильно.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.09.2020, 19:35
self.host имеет тип Entry, а не строку.

Python
1
host = self.host.get()
А так в host лежит уже строка.
1
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
21.09.2020, 19:36
Цитата Сообщение от NeoMatrix Посмотреть сообщение
И, как я понимаю, нужно передавать так?
Как доставать значения из виджетов — см пост 20, строки 28−31.
1
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.09.2020, 19:36
Цитата Сообщение от NeoMatrix Посмотреть сообщение
pymysql.connect(self.host,
можно сразу
Python
1
pymysql.connect(self.host.get(),
1
Модератор
Эксперт NIX
 Аватар для NeoMatrix
8536 / 3413 / 105
Регистрация: 24.05.2011
Сообщений: 14,647
Записей в блоге: 8
22.09.2020, 04:46  [ТС]
Мой финальный результат:
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
#! /usr/bin/python3
 
from tkinter import * 
import pymysql
 
class App(Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
 
        self.master.title("Логин") 
        self.master.geometry('350x170+200+200') 
         
        Label(self, text="host").grid(column=0, row=1)
        self.host = Entry(self, width=20)
        self.host.grid(column=2, row=1, columnspan=4)
 
        Label(self, text="user").grid(column=0, row=2)
        self.user = Entry(self, width=20)
        self.user.grid(column=2, row=2, columnspan=4)
 
        Label(self, text="passwd").grid(column=0, row=3)
        self.passwd = Entry(self, width=20, show='*')
        self.passwd.grid(column=2, row=3, columnspan=4)
 
        Label(self, text="dbname").grid(column=0, row=4)
        self.dbname = Entry(self, width=20)
        self.dbname.grid(column=2, row=4, columnspan=4)
 
        Button(self, text="Войти", command=self.login).grid(column=2, row=5)
 
        self.grid_configure()
 
    def login(self):
      
        db = pymysql.connect(self.host.get(), self.user.get(), self.passwd.get(), self.dbname.get())
 
        with db.cursor() as cur:
            cur.execute('select version()')
            ver = cur.fetchone()
            lbl = Label(self, text="Database version : %s " % ver)
            lbl.grid(column=0, row=6, columnspan=4)
         
if __name__ == '__main__':
    App().mainloop()


PS. Теперь нужно мудрить главное окно БД и переход в него при успешном логине, а при неуспешном - возвращать в это сообщение, что-то вроде "Вы вводите неправильные данные либо пользователь не существует"
PPS. Огромное спасибо за помощь.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
22.09.2020, 04:46

Перенос значений из одного столбца в другой
Добрый день! Возникла такая ситуация. Есть таблица с двумя столбцами. В одном столбце указаны наименования субъектов РФ, в другом...

Перенос нескольких значений с одного листа на другой
Здравствуйте. В документе имеется 3 листа (вкладки), на каждом отдельная таблица. На первых 2 листах: 1 столбец - фамилии, 2 столбец -...

Перенос уникальных значений из одного столбца в другой
Есть 2 столбца надо из первого перенести значения во второй только что бы значения не повторялись. Как это сделать в VBA ну или в Delphi ...

Перенос нескольких значений с одного листа на другой
Здравствуйте, уважаемое сообщество! В книге 2 листа, в одном из которых ("Исходные") содержатся данные на детей. Во втором листе...

Excel. Перенос значений с одного файла на другой
Доброго дня! С похожей темой уже сталкивались, но это не совсем тот случай. Есть файл А, с данными,заполненными ячейками. Файл...


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

Или воспользуйтесь поиском по форуму:
27
Ответ Создать тему
Новые блоги и статьи
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
Эксперимент с картинкой-обложкой на CodinGame
Adler 10.07.2026
Решил на днях провести эксперимент. У меня есть аккаунт на CodinGame, ТОП-3 по РФ среди 2200 участников (в разделе соревнования по программированию ИИ-ботов). Там есть обложка, куда можно влепить. . .
GitDOS: Когда я решил скрестить MS-DOS, GitHub и Claude
MaGz GoLd 08.07.2026
Привет, Киберфорум! Хочу поделиться своим проектом, который, надеюсь, вас заинтересует. GitDOS — это веб-приложение, которое позволяет запускать DOS в браузере с тремя крутыми фичами: диски живут в. . .
Учебный мини "цифровой двойник" = (Сервер = Java + Flask_питон )+(3D = Гугловскаая 4T nvideo + google colab) +( WMS = Odoo на Docker)
anaschu 07.07.2026
Увидел в требованиях к вакансии создателя имитационных моделей связку (REst + Api + WMS + Anylogic + питон + 3D Nvideo), и решил посмотреть, что это такое. Из этого всего я работал более менее. . .
Море в объективе
kumehtar 06.07.2026
Хотел написать много проникновенных слов, но передумал. Оно само - говорит. Кто слышит тот слышит.
Doom для терминала без стрельбы и монстров. 3D Raycasting на ascii.
dcc0 05.07.2026
Попросил нейронную сеть deepai. org написать рейкастинг 3D с библиотекой ncurses для Linux. Чтобы можно было ходить на стрелочки. Чтобы стены были отрисованы символами. Справилась. Первый вариант. . .
Установка статуса документа по условию
Maks 05.07.2026
Алгоритм из решения ниже реализован на нетиповом документе "НарядПутевка" разработанного в КА2. Задача: в табличной части "Материалы" документа при записи автоматически устанавливать статус. . .
Сезонность и суточность закисления почв
anaschu 04.07.2026
200 часов это все равно моловато. Есть ситуации, но нестандартные, когда смена происходит за 5 лет. Но обычно это 50 лет и более. Наверное, закисление почвы происходит сезонно в средней. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru