Нужна помощь в вызове полей ввода внутри определений - PullRequest
0 голосов
/ 04 мая 2018

Привет, я новичок в графических интерфейсах Python, и я был озадачен этой проблемой в течение нескольких часов. Мне нужно вызвать имя в поле ввода, которое находится внутри def, с другим def и продолжать получать сообщение об ошибке:

line 15, in callback 
name = (username.get())
AttributeError: 'str' object has no attribute 'get'

Я использую код:

from tkinter import *
username = str();
e = object();

def getname():
    global username
    e = Entry(root, textvariable=username)
    e.pack()
    e.focus_set()
    b = Button(root, text = "OK", width = 10, command = callback)
    b.pack()

def callback():
    name = (username.get())
    print(name)

root = Tk()
getname()
mainloop()

если я делаю e.get (), то возникает та же ошибка, за исключением «объекта» вместо «строки»

Любая помощь приветствуется, спасибо

Ответы [ 3 ]

0 голосов
/ 04 мая 2018

У вас будет много проблем с тем, как вы пишете свой код, так как вы начинаете программировать tkinter, я бы посоветовал вам сделать это таким образом, чтобы достичь того же результата. Вам не нужно объявлять глобальную переменную с это, чтобы получить содержимое в entry с этим примером.

from tkinter import *


def callback():
    name = (e.get())
    print(name)

root = Tk()


e = Entry(root)
e.pack()
e.focus_set()
b = Button(root, text="OK", width=10, command=callback)
b.pack()

mainloop()
0 голосов
/ 04 мая 2018

Вы устанавливаете username как textvariable из Entry, что означает, что это переменная Tkinter , такая как StringVar. Когда вы изменяете username со строки на StringVar, вы можете использовать имеющийся у вас метод .get(). Единственное, что вы должны объявить его после создания экземпляра Tk(), потому что StringVar связан с корнем:

from tkinter import *
e = object()

def getname():
    global username
    e = Entry(root, textvariable=username)
    e.pack()
    e.focus_set()
    b = Button(root, text = "OK", width = 10, command = callback)
    b.pack()

def callback():
    name = (username.get())
    print(name)

root = Tk()
username = StringVar()
getname()
root.mainloop()
0 голосов
/ 04 мая 2018

К сожалению, в python нет username.get () (поскольку нет функции get (), даже для строки). Может быть, это будет работать (я еще не проверял):

def callback():
    global username
    name = username
    print(name)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...