AttributeError: 'TreeCtrl' object has no attribute 'GetItem'

35 views
Skip to first unread message

RF

unread,
Apr 21, 2021, 11:50:45 AM4/21/21
to wxPython-users
So I've googled around on this error and found some others who've had this problem. But I can't seem to solve it for my own app.

I get the error from the bind event: def OnSelChanged(self, event):

import wx
import os

class MainFrame(wx.Frame):
def __init__(self):
wx.Frame.__init__(self, parent=None, size=wx.Size(600, 400), pos=wx.Point(-900, 400), title='TreeCtrl Demo')
# x y
self.tree = wx.TreeCtrl(self, wx.ID_ANY, size=wx.Size(240, 400), style=wx.TR_FULL_ROW_HIGHLIGHT | wx.TR_HAS_BUTTONS | wx.TR_NO_LINES)
self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, OnSelChanged(self, self.tree), self.tree)
vbox = wx.BoxSizer(wx.VERTICAL)
vbox.Add(self.tree,
1) # make vertically stretchable
self.SetSizer(vbox)

default_path = r'C:\Users\rfresh1011\Documents\pEdit'
self.root = self.tree.AddRoot(default_path)
traverse_directory_tree(self.root, default_path, self.tree)
self.tree.ExpandAll()

self.Show()

def OnSelChanged(self, event):
item = event.GetItem()
print(self.tree.GetItemText(item))

def traverse_directory_tree(parent, path, tree):
global glist_tree_node_id
global glist_tree_filenames
gstr_show_folders = '0'
if gstr_show_folders == '1':
for folder_name in filter(os.path.isdir, os.listdir(os.getcwd())):
# full_path = os.path.join(path, d)
isdir = os.path.isdir(path)
if isdir:
if not folder_name.startswith('.'):
tree.AppendItem(parent, folder_name)
for fn in os.listdir(path):
if fn.endswith('.py'):
if ".bak" in fn:
pass
else:
id2 = tree.AppendItem(parent, fn)

if __name__ == '__main__':
app = wx.App()
main_frame = MainFrame()
app.MainLoop()



Tim Roberts

unread,
Apr 21, 2021, 12:15:18 PM4/21/21
to wxpytho...@googlegroups.com
RF wrote:
So I've googled around on this error and found some others who've had this problem. But I can't seem to solve it for my own app.

I get the error from the bind event: def OnSelChanged(self, event):
...
def OnSelChanged(self, event):
     item = event.GetItem()
     print(self.tree.GetItemText(item))

Well, the error is correct.  The wx.TreeCtrl object does not have a GetItem method.  What are you trying to do here?  Is it possible you wanted GetSelection() instead?

-- 
Tim Roberts, ti...@probo.com
Providenza & Boekelheide, Inc.

RF

unread,
Apr 21, 2021, 12:57:01 PM4/21/21
to wxPython-users
Hi Tim,

I'm trying to get the text of the node when I click on the node. This is a directory of files and I want to grab the filename when I click on a given node.

I'm pretty confused with these methods...I've not been able to get any of them to work.

GetSelection()
GetFocusedItem()
GetItemText()

Andrea Gavana

unread,
Apr 21, 2021, 1:10:38 PM4/21/21
to wxpytho...@googlegroups.com
Hi,

On Wed, 21 Apr 2021 at 18.57, RF <ralphf...@gmail.com> wrote:
Hi Tim,

I'm trying to get the text of the node when I click on the node. This is a directory of files and I want to grab the filename when I click on a given node.

I'm pretty confused with these methods...I've not been able to get any of them to work.

GetSelection()
GetFocusedItem()
GetItemText()


The event itself does have a GetItem method. The problems related to your source code are:

- at least for me, the indentation is all messed up
- please take a look at how to use Bind(), I.e., not this:

self.tree.Bind(wx.EVT_TREE_SEL_CHANGEDOnSelChanged(selfself.tree)self.tree)

But this:

self.tree.Bind(wx.EVT_TREE_SEL_CHANGEDOnSelChanged)

Not sure if OnSelChanged is a class method for you or just a function. Please properly format your code.

Andrea.


On Wednesday, April 21, 2021 at 9:15:18 AM UTC-7 Tim Roberts wrote:
RF wrote:
So I've googled around on this error and found some others who've had this problem. But I can't seem to solve it for my own app.

I get the error from the bind event: def OnSelChanged(self, event):
...
def OnSelChanged(self, event):
     item = event.GetItem()
     print(self.tree.GetItemText(item))

Well, the error is correct.  The wx.TreeCtrl object does not have a GetItem method.  What are you trying to do here?  Is it possible you wanted GetSelection() instead?

-- 
Tim Roberts, ti...@probo.com
Providenza & Boekelheide, Inc.

--
You received this message because you are subscribed to the Google Groups "wxPython-users" group.
To unsubscribe from this group and stop receiving emails from it, send an email to wxpython-user...@googlegroups.com.
To view this discussion on the web visit https://groups.google.com/d/msgid/wxpython-users/85152e3f-30ea-4c61-a20f-81c2a59581e7n%40googlegroups.com.

RF

unread,
Apr 21, 2021, 1:42:47 PM4/21/21
to wxPython-users
Hi Andrea,

> Please properly format your code.

I have spent the last two days trying to structure my code 'properly'. I am new to python so I have looked at a lot of coding examples. There are a lot of different ways to structure python code. I thought I had settled on one of the better ways to do this, but apparently not! But I am eager to learn how to do it properly.

When you say my code is 'messed up', do you mean by indentation or where my functions are located?

RF

unread,
Apr 21, 2021, 1:46:50 PM4/21/21
to wxPython-users
I indented the def OnSelChanged(self, event): function and it now works.

Is that because tree was created inside the MainFrame class, so therefore, the bind has to be within the same block?

Andrea Gavana

unread,
Apr 21, 2021, 1:55:42 PM4/21/21
to wxPython-users
Hi,

On Wed, 21 Apr 2021 at 19:46, RF <ralphf...@gmail.com> wrote:
I indented the def OnSelChanged(self, event): function and it now works.

Is that because tree was created inside the MainFrame class, so therefore, the bind has to be within the same block?

When I said to properly format your code,  I meant either attach a Python file to your message or make sure that your email client does not mess up the indentation. This is how you code looks on my GMail:

image.png

There is no indentation and it's very difficult to follow. Since you're new to Python and wxPython, I strongly encourage you to take a look at the wxPython demo - it has pretty much everything:


Andrea.


RF

unread,
Apr 21, 2021, 2:25:38 PM4/21/21
to wxPython-users
I see. OK I will attach my code in the future. Good point.

I downloaded the extras zip file and unzipped it. What do I do with these *.pdb files? Whay app opens them?

Andrea Gavana

unread,
Apr 21, 2021, 2:30:12 PM4/21/21
to wxpytho...@googlegroups.com
On Wed, 21 Apr 2021 at 20.25, RF <ralphf...@gmail.com> wrote:
I see. OK I will attach my code in the future. Good point.

I downloaded the extras zip file and unzipped it. What do I do with these *.pdb files? Whay app opens them?

You only need the demo, everything else is not necessary.



Steve Barnes

unread,
Apr 22, 2021, 2:29:50 AM4/22/21
to wxpytho...@googlegroups.com

Unless you are behind one of the nastier corporate firewalls the command line utility wxdemo will download the correct version of the demo, (if it hasn't already done so), unpack that demo (if it hasn't already) and then start the demo. (The wxdocs utility does the same for the documents).

 

Steve Barnes

 

From: wxpytho...@googlegroups.com <wxpytho...@googlegroups.com> On Behalf Of Andrea Gavana
Sent: 21 April 2021 19:30
To: wxpytho...@googlegroups.com
Subject: Re: [wxPython-users] AttributeError: 'TreeCtrl' object has no attribute 'GetItem'

 

 

On Wed, 21 Apr 2021 at 20.25, RF <ralphf...@gmail.com> wrote:

I see. OK I will attach my code in the future. Good point.

 

I downloaded the extras zip file and unzipped it. What do I do with these *.pdb files? Whay app opens them?

 

You only need the demo, everything else is not necessary.

 

 

 

 

 

On Wednesday, April 21, 2021 at 10:55:42 AM UTC-7 Infinity77 wrote:

Hi,

 

On Wed, 21 Apr 2021 at 19:46, RF <ralphf...@gmail.com> wrote:

I indented the def OnSelChanged(self, event): function and it now works.

 

Is that because tree was created inside the MainFrame class, so therefore, the bind has to be within the same block?

 

When I said to properly format your code,  I meant either attach a Python file to your message or make sure that your email client does not mess up the indentation. This is how you code looks on my GMail:

Reply all
Reply to author
Forward
0 new messages