2016-11-08 1 views
0

Почему TreeCtrl моей WxPython не может показать и расширяться в окнах, но хорошо в макинтош:WxPython не может расширяться в окнах

import wx 
class MyFrame(wx.Frame): 
    def __init__(self, parent, id, title): 
     wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, wx.Size(450, 350)) 
     hbox = wx.BoxSizer(wx.HORIZONTAL) 
     vbox = wx.BoxSizer(wx.VERTICAL) 
     panel1 = wx.Panel(self, -1) 
     panel2 = wx.Panel(self, -1) 
     self.tree = wx.TreeCtrl(panel1, 1, wx.DefaultPosition, (-1,-1), wx.TR_HIDE_ROOT|wx.TR_HAS_BUTTONS) 
     root = self.tree.AddRoot('Programmer') 
     os = self.tree.AppendItem(root, 'Operating Systems') 
     self.tree.AppendItem(os, 'Linux') 
     self.tree.AppendItem(os, 'FreeBSD') 
     self.tree.AppendItem(os, 'OpenBSD') 
     self.tree.AppendItem(os, 'NetBSD') 
     self.tree.AppendItem(os, 'Solaris') 
     self.tree.Bind(wx.EVT_TREE_SEL_CHANGED, self.OnSelChanged, id=1) 
     self.display = wx.StaticText(panel2, -1, '',(10,10), style=wx.ALIGN_CENTRE) 
     self.tree.Bind(wx.EVT_TREE_ITEM_EXPANDING,self.OnExpanding, id=1) 
     self.tree.Bind(wx.EVT_TREE_ITEM_EXPANDED,self.OnExpanded, id=1) 
     self.tree.Bind(wx.EVT_TREE_ITEM_ACTIVATED,self.OnActivated, id=1) 
     self.tree.Bind(wx.EVT_TREE_ITEM_COLLAPSED,self.OnCollapsed, id=1) 
     self.tree.Bind(wx.EVT_TREE_ITEM_COLLAPSING,self.OnCollaping, id=1) 
     vbox.Add(self.tree, 1, wx.EXPAND) 
     hbox.Add(panel1, 1, wx.EXPAND) 
     hbox.Add(panel2, 1, wx.EXPAND) 
     panel1.SetSizer(vbox) 
     self.SetSizer(hbox) 
     self.Centre() 
    def OnSelChanged(self, event): 
     item = event.GetItem() 
     self.display.SetLabel(self.tree.GetItemText(item)) 

    def OnExpanding(self,evt): 
     print "OnExpanding" 

    def OnExpanded(self,evt): 
     print "OnExpaned" 

    def OnActivated(self,evt): 
     print "OnActivated" 

    def OnCollapsed(self,evn): 
     print "OnCollapsed" 
    def OnCollaping(self,evt): 
     print "OnCollaping" 

class MyApp(wx.App): 
    def OnInit(self): 
     frame = MyFrame(None, -1, 'treectrl.py') 
     frame.Show(True) 
     self.SetTopWindow(frame) 
     return True 

app = MyApp(0) 
app.MainLoop() 

inwindows it looks like this

on mac is ok

я бегу этот код : python2.7-win32 wxPython3.0-win32-3.0.2.0-py27 window7-64

и в окнах тогда событие о расширении и разворачивании никогда не будет отправлено

так как можно сказать, где я ошибаюсь?

ответ

0

Очевидно, что wx.TR_LINES_AT_ROOT необходим для Windows при скрытии корня, и вы все еще хотите отображать кнопки развернуть/свернуть. Кроме того, вы можете просто добавить стиль укрытия в стиль по умолчанию и не беспокоиться об этой разнице в конкретной платформе, например: wx.TR_HIDE_ROOT | wx.TR_DEFAULT_STYLE