Por que não vai este .get () trabalho em Tkinter?

votos
0

Estou fazendo este cliente para minha classe de rede, seu suposto para ligar a um servidor de MUD que nosso professor criou, mas im tendo um problema no widget entrada no Tkinter, quando o Enter botão é pressionado o texto no widget entrada é suposto ser impresso para o shell da função submit_value (), mas eu recebo um erro dizendo que o widget de entrada não existe quando .get () é chamado a partir dele, qualquer um pode me ajudar a descobrir este erro?

from tkinter import *
from sys import exit

def button_func():
        print(Test)

def submit_value():
        print(Entered Value: %s % (userEntry.get()))

class TestClient(Frame):
    def __init__(self, master):
        Frame.__init__(self, master)
        self.pack()

        for n in range(3):
            self.grid_rowconfigure(n, weight=1)

        for n in range(8):
            self.grid_columnconfigure(n, weight=1)

        lb1 = Listbox(self, width=20,height=24)
        lb1.insert(1,WoW)
        lb1.grid(row=0, column=0, columnspan=2, sticky='news')

        t1 = Text(self, width=60)
        t1.grid(row=0, column=3, columnspan=3)

        lb2 = Listbox(self, width=20,height=24)
        lb2.insert(1,Hi)
        lb2.grid(row=0, column=6, columnspan=2, sticky='news')

        la1 = Label(self, text=Value entry:)
        la1.grid(row=1, column=0)

        userEntry = StringVar()
        e1 = Entry(self, width=40, textvariable=userEntry)
        e1.grid(row=1, column=1, columnspan=6)

        e2 = Button(self, text=Enter, command=submit_value)
        e2.grid(row=1, column=5, columnspan=10)


        b1 = Button(self, text=Start, width=10,padx=10,pady=10, command=button_func)
        b1.grid(row=2, column=0)

        b2 = Button(self, text=Change Room, width=10,padx=10,pady=10, command=button_func)
        b2.grid(row=2, column=3)

        b3 = Button(self, text=FIGHT, width=10,padx=10,pady=10, command=button_func)
        b3.grid(row=2, column=4)

        b4 = Button(self, text=PvP FIGHT, width=10,padx=10,pady=10, command=button_func)
        b4.grid(row=2, column=5)

        b5 = Button(self, text=Loot, width=10,padx=10,pady=10, command=button_func)
        b5.grid(row=2, column=6)

        b6 = Button(self, text=Leave, width=10,padx=10,pady=10, command=button_func)
        b6.grid(row=2, column=7)

        stats = Listbox(self, width= 20)
        stats.insert(1,health:)
        stats.grid(row=3, column=0, columnspan=8, sticky='news')

root = Tk()
root.title = Test program
tw = TestClient(root)
root.mainloop()
Publicado 18/03/2017 em 00:27
fonte usuário
Em outras línguas...                            


1 respostas

votos
0

userEntryé uma variável local para TestClient.__init__. Ele não pode ser usado fora do escopo da função. Você pode contornar isso usando variáveis globais:

from tkinter import *
from sys import exit

userEntry = object

def button_func():
    print("Test")

def submit_value():
    global userEntry
    print("Entered Value: %s" % (userEntry.get()))

class TestClient(Frame):
    def __init__(self, master):
        global userEntry
        Frame.__init__(self, master)
        self.pack()

        for n in range(3):
            self.grid_rowconfigure(n, weight=1)

        for n in range(8):
            self.grid_columnconfigure(n, weight=1)

        lb1 = Listbox(self, width=20,height=24)
        lb1.insert(1,"WoW")
        lb1.grid(row=0, column=0, columnspan=2, sticky='news')

        t1 = Text(self, width=60)
        t1.grid(row=0, column=3, columnspan=3)

        lb2 = Listbox(self, width=20,height=24)
        lb2.insert(1,"Hi")
        lb2.grid(row=0, column=6, columnspan=2, sticky='news')

        la1 = Label(self, text="Value entry:")
        la1.grid(row=1, column=0)

        userEntry = StringVar()
        e1 = Entry(self, width=40, textvariable=userEntry)
        e1.grid(row=1, column=1, columnspan=6)

        e2 = Button(self, text="Enter", command=submit_value)
        e2.grid(row=1, column=5, columnspan=10)


        b1 = Button(self, text="Start", width=10,padx=10,pady=10, command=button_func)
        b1.grid(row=2, column=0)

        b2 = Button(self, text="Change Room", width=10,padx=10,pady=10, command=button_func)
        b2.grid(row=2, column=3)

        b3 = Button(self, text="FIGHT", width=10,padx=10,pady=10, command=button_func)
        b3.grid(row=2, column=4)

        b4 = Button(self, text="PvP FIGHT", width=10,padx=10,pady=10, command=button_func)
        b4.grid(row=2, column=5)

        b5 = Button(self, text="Loot", width=10,padx=10,pady=10, command=button_func)
        b5.grid(row=2, column=6)

        b6 = Button(self, text="Leave", width=10,padx=10,pady=10, command=button_func)
        b6.grid(row=2, column=7)

        stats = Listbox(self, width= 20)
        stats.insert(1,"health:")
        stats.grid(row=3, column=0, columnspan=8, sticky='news')

root = Tk()
root.title = "Test program"
tw = TestClient(root)
root.mainloop()

O código acima cria userEntrycomo uma variável global para que possa ser usado em qualquer lugar ao longo do programa.

Respondeu 18/03/2017 em 06:33
fonte usuário

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more