Классы переменных tkinter не определены - PullRequest
0 голосов
/ 29 ноября 2018

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

import tkinter as tk
from tkinter import *
from tkinter import ttk

class queryCreator( Frame ):

    master = tk.Tk()

    tk.Label(master, text="Age").grid(row=0)
    tk.Label(master, text="Birth Place").grid(row=1)

    ageVar = tk.IntVar()
    birthPlaceVar = tk.StringVar()

    e1 = tk.Entry(master, textvariable=ageVar)    
    e2 = tk.Entry(master)

    e1.grid(row=0, column=1)
    e2.grid(row=1, column=1)

    def createQuery():

        print(ageVar.get())

    createQueryButton = Button(master, text="Create Query", command=createQuery).grid(row=10)

    master.mainloop( )

def main(): 
    queryCreator().mainloop()
if __name__ == '__main__':
    main()

Моя консоль здесь:

drews-MacBook-Pro-2:Desktop drewwood$ python3 DBGUI.py 
Exception in Tkinter callback
Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6/tkinter/__init__.py", line 1699, in __call__
return self.func(*args)
  File "DBGUI.py", line 23, in createQuery
print(ageVar.get())
NameError: name 'ageVar' is not defined

Любая помощь будет очень признательна.

1 Ответ

0 голосов
/ 29 ноября 2018

Вы не можете получить доступ к переменной ageVar, так как она не определена в области действия этой функции.Сделайте это параметром вашего класса (используя метод self).Кстати, вы должны добавить конструктор в ваш класс.

Измените ваш код на что-то вроде:

import tkinter as tk
from tkinter import *
from tkinter import ttk

class queryCreator( Frame ):

    def __init__(self):
        master = tk.Tk()

        tk.Label(master, text="Age").grid(row=0)
        tk.Label(master, text="Birth Place").grid(row=1)

        self.ageVar = tk.IntVar()
        birthPlaceVar = tk.StringVar()

        e1 = tk.Entry(master, textvariable=self.ageVar)    
        e2 = tk.Entry(master)

        e1.grid(row=0, column=1)
        e2.grid(row=1, column=1)

        createQueryButton = Button(master, text="Create Query", command=self.createQuery).grid(row=10)

        master.mainloop( )

    def createQuery(self):
        print(self.ageVar.get())

def main(): 
    queryCreator()

if __name__ == '__main__':
    main()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...