2015-08-05 3 views
0

Это код, который я создал, и я пытаюсь запустить:Tkinter - AttributeError: «ул» объект не имеет атрибута «набор»

import tkinter as tk 


def ok(val): 
    print("Value is: ", val) 

def say_hi(self): 
    print("hi there, everyone!") 

class Application(tk.Frame): 

    def __init__(self, master=None): 
     tk.Frame.__init__(self, master) 
     master.title("Hi There") 
     master.geometry("400x400") 
     self.createWidgets(master) 

    def createWidgets(self, master=None): 
     var = str() 

     self.select = tk.OptionMenu(master, var, "one", "two","three", command=ok).grid(column=1, row=1) 

     self.QUIT = tk.Button(master, text="QUIT", fg="red", command=root.destroy).grid(column=2, row=1) 
     print ("HI") 

root = tk.Tk() 
app = Application(master=root) 
app.mainloop() 

Но я получаю следующее сообщение об ошибке:

Exception in Tkinter callback 
Traceback (most recent call last): 
    File "C:\Python34\lib\tkinter\__init__.py", line 1533, in __call__ 
    return self.func(*args) 
    File "C:\Python34\lib\tkinter\__init__.py", line 3308, in __call__ 
    self.__var.set(self.__value) 
AttributeError: 'str' object has no attribute 'set' 

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

Любая идея о том, как исправить ошибку?

ответ

4

Используйте StringVar не str

def createWidgets(self, master=None): 
     var = tk.StringVar() 

str Питона не имеет set метода или атрибута, STRINGVAR специфичен для Tkinter и то, что вы предназначены для использования.

+0

Большое спасибо! Первоначально я имел это как StringVar, но это не сработало. Сегодня я пришел, чтобы попробовать, и это сработало отлично! –