3

So I start a root screen with a "file select" and a "go" button. The go button is disabled and I want to make it active after the file has been selected. When I select the file go should become active but instead this error "TypeError: 'NoneType' object does not support item assignment" Here is some sample code

import Tkinter
import tkFileDialog

def chooseDir():
    dir1=tkFileDialog.askopenfilename(parent=root, title='choose file path')
    go['state']=Tkinter.ACTIVE
root=Tkinter.Tk()
global go
go=Tkinter.Button(text='file location',command=chooseDir,state=Tkinter.DISABLED).pack()
root.mainloop()
Kosig
  • 201
  • 3
  • 5
  • 14

2 Answers2

10

This line:

go=Tkinter.Button(text='file location',command=chooseDir,state=Tkinter.DISABLED).pack()

is creating a temporary object, then calling pack() on it. The pack method returns None, so go is assigned None.

Remove the .pack() then go will be the Button object. Then call go.pack().

Keith
  • 42,110
  • 11
  • 57
  • 76
1

(update for new error) go doesn't exist in that scope, you'll need to get access to it somehow, or by using the one in the global scope using global go inside the chooseDir method perhaps

Tkinter.Buttons don't behave like dictionaries, you can change their status via the config() method.

Try:

go.config(state=Tkinter.ACTIVE)
Daniel DiPaolo
  • 55,313
  • 14
  • 116
  • 115