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

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

21.09.2020, 15:32. Показов 7131. Ответов 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
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
21.09.2020, 15:41
Цитата Сообщение от NeoMatrix Посмотреть сообщение
Вопрос в том, как связать эти два модуля
Задача решается сама собой, если разделить код не на модули, а на функции, и все равно, будут они в одном модуле или в разных.
0
Модератор
Эксперт NIX
 Аватар для NeoMatrix
8532 / 3388 / 105
Регистрация: 24.05.2011
Сообщений: 14,618
Записей в блоге: 8
21.09.2020, 15:45  [ТС]
Цитата Сообщение от 0x10 Посмотреть сообщение
если разделить код не на модули, а на функции
Хорошо. Каким образом это сделать?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.09.2020, 16:01
Например, так
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
from tkinter import * 
import pymysql
 
host = 'hostname'
user = 'username'
passwd = 'password'
dbname = 'db-name'
 
 
class App(Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.master.title("Логин") 
        self.master.geometry('350x170+200+200') 
         
        lbl = Label(self.master, text="Welcome to GUIDB!")
        lbl.grid(column=3, row=0)
         
        lbl = Label(self.master, text="host")
        lbl.grid(column=0, row=1)
        txt = Entry(self.master, width=20)
        txt.grid(column=2, row=1, columnspan=4)
        lbl = Label(self.master, text="username")
        lbl.grid(column=0, row=2)
        txt = Entry(self.master, width=20)
        txt.grid(column=2, row=2, columnspan=4)
        lbl = Label(self.master, text="password")
        lbl.grid(column=0, row=3)
        txt = Entry(self.master, width=20)
        txt.grid(column=2, row=3, columnspan=4)
        lbl = Label(self.master, text="dbname")
        lbl.grid(column=0, row=4)
        txt = Entry(self.master, width=20)
        txt.grid(column=2, row=4, columnspan=4)
 
    def on_button(self):
        # обработчик какой-нибудь кнопки
        with db.cursor() as cur:
            cur.execute('select version()')
            ver = cur.fetchone()
         
            print ("Database version : %s " % ver)
 
if __name__ == '__main__':
    db = pymysql.connect(host, user, passwd, dbname)
    App().mainloop()
    db.close()
Добавлено через 1 минуту
Так правильнее
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
class App(Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.master.title("Логин") 
        self.master.geometry('350x170+200+200') 
         
        lbl = Label(self, text="Welcome to GUIDB!")
        lbl.grid(column=3, row=0)
 
        lbl = Label(self, text="host")
        lbl.grid(column=0, row=1)
        txt = Entry(self, width=20)
        txt.grid(column=2, row=1, columnspan=4)
 
        self.grid_configure()
1
Модератор
Эксперт NIX
 Аватар для NeoMatrix
8532 / 3388 / 105
Регистрация: 24.05.2011
Сообщений: 14,618
Записей в блоге: 8
21.09.2020, 16:58  [ТС]
Так, как взять в переменную ввод пользователем данных я уже понял.
В Entry есть опция textvariable = varname, которая переносит в varname строку ввода.
Итак, в данном случае поле ввода будет выглядеть вот так
Python
1
2
txt = Entry(root, width=20)
txt.grid(column=2, row=1, columnspan=4, textvariable = gethost)
а остальные - по аналогии с этим.
Теперь, как я понимаю, если я в первом модуле буду использовать переменную gethost (и остальные), то у меня всё должно заработать?

Добавлено через 2 минуты
Упс! Немного припозднился с соображениями.
Рыжий Лис, если в первом варианте я хотя бы половину ещё понимаю. то во втором - ровно ничерта.
В любом случае спасибо. Будем пытаться понимать.

Добавлено через 11 минут
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Python
1
2
def __init__(self, *args, **kwargs):
 super().__init__(*args, **kwargs)
Можешь мне разъяснить, что это и как это работает?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.09.2020, 17:04
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class App(Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.master.title("Логин") 
        self.master.geometry('350x170+200+200') 
         
        lbl = Label(self, text="host")
        lbl.grid(column=0, row=1)
        self.host = Entry(self, width=20)
        self.host.grid(column=1, row=1)
 
        btn = Button(self, text="Войти", width=10, command=self.do_login)
        btn.grid(column=3, row=1)
 
        # вызывается последним. После того, как создали все виджеты
        self.grid_configure()
 
    def do_login(self):
        varname = self.host.get()  # type: str
        print(varname)
 
if __name__ == '__main__':
    App().mainloop()
Добавлено через 52 секунды
Цитата Сообщение от NeoMatrix Посмотреть сообщение
Можешь мне разъяснить, что это и как это работает?
С++/яву знаешь? Отнаследовались от готового класса, а это вызов "конструктора" родительского класса.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
21.09.2020, 17:07
Рыжий Лис, в чем смысл такой декомпозиции, если все параметры подключения остались глобальными? Насколько я понял, суть в том, что они должны браться из формы.

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
from tkinter import * 
 
 
class Connection:
    def __init__(self):
        self.host = StringVar()
        self.user = StringVar()
 
 
class App(Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
 
        self.connection = Connection()
 
        self.master.title("Логин") 
        self.master.geometry('350x170+200+200') 
         
        lbl = Label(self, text="host")
        lbl.grid(column=0, row=1)
        txt = Entry(self, width=20, textvariable=self.connection.host)
        txt.grid(column=2, row=1, columnspan=4)
 
        # Аналогично с другими полями, при желании можно обобщить циклом.
 
        btn = Button(self, text="Войти", command=self.login)
        btn.grid(column=3, row=2)
 
        self.grid_configure()
 
    def login(self):
        # Здесь установить соединение и выполнить запрос
        print(self.connection.host.get())
        
 
if __name__ == '__main__':
    App().mainloop()
Добавлено через 2 минуты
Цитата Сообщение от 0x10 Посмотреть сообщение
в чем смысл такой декомпозиции, если все параметры подключения остались глобальными?
Ок, во втором варианте исправлено.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.09.2020, 17:14
Я не догадался, что параметыы берутся из формы. Тогда обработчик формы будет выглядеть как-то так.

Python
1
2
3
4
5
6
7
8
9
10
11
    def do_login(self):
        host = self.host.get()  # type: str
        user = self.user.get()
        passwd = self.passwd.get()
        dbname = self.dbname.get()
        db = pymysql.connect(host, user, passwd, dbname)
        with db.cursor() as cur:
            cur.execute('select version()')
            ver = cur.fetchone()
            print("Database version : %s " % ver)
        db.close()
Естественно, все эти self.host итд должны быть объявлены в конструкторе.
0
Модератор
Эксперт NIX
 Аватар для NeoMatrix
8532 / 3388 / 105
Регистрация: 24.05.2011
Сообщений: 14,618
Записей в блоге: 8
21.09.2020, 18:30  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
С++/яву знаешь?
Нет. Python3.5 - мой первый (после bash) язык, который я начал осваивать.
Суть не (не только и не столько) в создании только данного приложения. Суть - я хочу научиться на этом примере работать в Python3.5 и выше.
То бишь, я хочу понимать, как построить нужные мне потом приложения.
Поэтому и прошу разъяснений, что и как в нём устроено.
Цитата Сообщение от 0x10 Посмотреть сообщение
Насколько я понял, суть в том, что они должны браться из формы.
Да, именно так.

Добавлено через 26 минут
0x10, так...
Окно должно отрисовываться вот этим куском кода
Python
1
2
        self.master.title("Логин") 
        self.master.geometry('350x170+200+200')
Собственно, а где у нас берутся переменные master и self?
master - это рутовое окно приложения, в котором у нас и происходит всё. Я правильно понимаю?
Но оно у меня не отрисовывается (при запуске рисуется крестик курсора вместо стрелки мышы, который при клике куда угодно исчезает и является обратно стрелка). Если это важно, то я в среде линукса и на питоне 3.5.1
И я совершенно не понимаю вот этого:
Python
1
2
3
class App(Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
Если не влом, разжуй, пожалуйста, что это.

Добавлено через 3 минуты
При запуске из консоли оно ругается на вот это:
Bash
1
2
3
4
  File "./G2Login.py", line 12
    host = self.host.get()  # type: str
       ^
IndentationError: expected an indented block
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.09.2020, 18:33
Цитата Сообщение от NeoMatrix Посмотреть сообщение
self?
self - это ссылка на само окно. На экземпляр окна.

self.master создаётся внутри super().__init__(*args, **kwargs)

Цитата Сообщение от NeoMatrix Посмотреть сообщение
Если не влом, разжуй, пожалуйста, что это.
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Отнаследовались от готового класса, а это вызов "конструктора" родительского класса.
Цитата Сообщение от NeoMatrix Посмотреть сообщение
IndentationError: expected an indented block
С пробелами где-то ошибка. Показывай весь код.
1
Модератор
Эксперт NIX
 Аватар для NeoMatrix
8532 / 3388 / 105
Регистрация: 24.05.2011
Сообщений: 14,618
Записей в блоге: 8
21.09.2020, 18:33  [ТС]
А, понял:
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Естественно, все эти self.host итд должны быть объявлены в конструкторе.
Но как это выполнить?
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.09.2020, 18:34
Так отрисовывается пустое окно

Python
1
2
3
4
5
6
7
class App(Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.master.title("Логин") 
        self.master.geometry('350x170+200+200') 
 
App().mainloop()
0
Модератор
Эксперт NIX
 Аватар для NeoMatrix
8532 / 3388 / 105
Регистрация: 24.05.2011
Сообщений: 14,618
Записей в блоге: 8
21.09.2020, 18:34  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Показывай весь код.
На данный момент вот так:
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
from tkinter import * 
import pymysql
 
class Connection:
        def do_login(self):
        host = self.host.get()  # type: str
        user = self.user.get()
        passwd = self.passwd.get()
        dbname = self.dbname.get()
        db = pymysql.connect(host, user, passwd, dbname)
        with db.cursor() as cur:
            cur.execute('select version()')
            ver = cur.fetchone()
            print("Database version : %s " % ver)
        db.close()
 
 
class App(Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
 
        self.connection = Connection()
 
        self.master.title("Логин") 
        self.master.geometry('350x170+200+200') 
         
        lbl = Label(self, text="host")
        lbl.grid(column=0, row=1)
        txt = Entry(self, width=20, textvariable=self.connection.host)
        txt.grid(column=2, row=1, columnspan=4)
 
        lbl = Label(self, text="host")
        lbl.grid(column=0, row=1)
        txt = Entry(self, width=20, textvariable=self.connection.user)
        txt.grid(column=2, row=2, columnspan=4)
 
        lbl = Label(self, text="host")
        lbl.grid(column=0, row=1)
        txt = Entry(self, width=20, textvariable=self.connection.passwd)
        txt.grid(column=2, row=3, columnspan=4)
 
        lbl = Label(self, text="host")
        lbl.grid(column=0, row=1)
        txt = Entry(self, width=20, textvariable=self.connection.dbname)
        txt.grid(column=2, row=4, columnspan=4)
 
        # Аналогично с другими полями, при желании можно обобщить циклом.
 
        btn = Button(self, text="Войти", command=self.login)
        btn.grid(column=3, row=2)
 
        self.grid_configure()
 
    def login(self):
        # Здесь установить соединение и выполнить запрос
        print(self.connection.host.get())
        
 
if __name__ == '__main__':
    App().mainloop()
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.09.2020, 18:36
Цитата Сообщение от NeoMatrix Посмотреть сообщение
Но как это выполнить?
При первом обращении
Python
1
2
3
4
5
6
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.master.title("Логин") 
        self.master.geometry('350x170+200+200') 
 
        self.host = Entry(self, width=20)
Добавлено через 1 минуту
Тебе нужно определиться, хочешь ты делать через textvariable=, или сохранять в self.host
0
Модератор
Эксперт NIX
 Аватар для NeoMatrix
8532 / 3388 / 105
Регистрация: 24.05.2011
Сообщений: 14,618
Записей в блоге: 8
21.09.2020, 18:42  [ТС]
Счас ещё изменил
Python
1
lbl = Label(self, text="host")
на
Python
1
lbl = Label(self, text="username")
и прочее - это косметика, не имеющая особого значения, но таки - исправил, как заметил.

Добавлено через 1 минуту
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Тебе нужно определиться, хочешь ты делать через textvariable=, или сохранять в self.host
В чём разница?
Мне было бы пока понятнее через textvariable=.
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
21.09.2020, 18:43
NeoMatrix, что-то в классе Connection путаница. Я предполагал сгруппировать там только данные и оставить один __init__, а в 13 посте образовался метод do_login с поехавшим отступом.
0
Просто Лис
Эксперт Python
 Аватар для Рыжий Лис
5973 / 3735 / 1099
Регистрация: 17.05.2012
Сообщений: 10,791
Записей в блоге: 9
21.09.2020, 18:46
Что-то использование StringVar() бессмысленно…

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
class App(Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        self.master.title("Логин") 
        self.master.geometry('350x170+200+200') 
 
        # переменные
        self.host = StringVar()
        
        lbl = Label(self, text="host")
        lbl.grid(column=0, row=1)
        txt = Entry(self, width=20, textvariable=self.host)
        txt.grid(column=1, row=1)
 
        btn = Button(self, text="Войти", width=10, command=self.do_login)
        btn.grid(column=2, row=1)
 
        # вызывается последним. После того, как создали все виджеты
        self.grid_configure()
 
    def do_login(self):
        host = self.host.get()
        print(host)
        # ~ db = pymysql.connect(host, user, passwd, dbname)
        # ~ with db.cursor() as cur:
            # ~ cur.execute('select version()')
            # ~ ver = cur.fetchone()
            # ~ print("Database version : %s " % ver)
        # ~ db.close()
 
if __name__ == '__main__':
    App().mainloop()
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
21.09.2020, 18:57
Лучший ответ Сообщение было отмечено NeoMatrix как решение

Решение

Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Что-то использование StringVar() бессмысленно…
Здесь — да. Проще достать значение непосредственно из виджета.

NeoMatrix, подправил пример из поста 13:
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
from tkinter import * 
 
 
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):
        # Здесь установить соединение и выполнить запрос
        print(self.host.get())
        
 
if __name__ == '__main__':
    App().mainloop()
1
Модератор
Эксперт NIX
 Аватар для NeoMatrix
8532 / 3388 / 105
Регистрация: 24.05.2011
Сообщений: 14,618
Записей в блоге: 8
21.09.2020, 19:05  [ТС]
Цитата Сообщение от Рыжий Лис Посмотреть сообщение
Что-то
выхлоп:
Bash
1
NameError: name 'Frame' is not defined
0
3258 / 2060 / 351
Регистрация: 24.11.2012
Сообщений: 4,909
21.09.2020, 19:05
NeoMatrix, или чуть компактнее:
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
from tkinter import * 
 
 
class App(Frame):
    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
 
        self.master.title("Логин") 
        self.master.geometry('350x170+200+200') 
 
        self.host = self.make_labeled_entry("host", row=1)
        self.user = self.make_labeled_entry("user", row=2)
        self.passwd = self.make_labeled_entry("passwd", row=3, show='*')
        self.dbname = self.make_labeled_entry("dbname", row=4)
 
        Button(self, text="Войти", command=self.login).grid(column=2, row=5)
 
        self.grid_configure()
 
    def make_labeled_entry(self, text, row, *args, **kwargs):
        Label(self, text=text).grid(column=0, row=row)
        entry = Entry(self, width=20, *args, **kwargs)
        entry.grid(column=2, row=row)
        return entry
 
    def login(self):
        # Здесь установить соединение и выполнить запрос
        print(self.host.get())
        print(self.user.get())
        print(self.passwd.get())
        print(self.dbname.get())
        
 
if __name__ == '__main__':
    App().mainloop()
Цитата Сообщение от NeoMatrix Посмотреть сообщение
NameError: name 'Frame' is not defined
Импорт в первой строке не пропущен?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
21.09.2020, 19:05
Помогаю со студенческими работами здесь

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

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Установка 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