0

私はwxpythonで小さなコードを書きました。このコードでは、スプリッターウィンドウを使用してダイアログボックスを分割し、1つのパネルにはカスタムツリーctrlがあり、もう1つのパネルには静的ボックスがあります。このコードは Fedora と ubuntu では正常に機能していましたが、Windows ではダイアログ ボックスが空に見えます。

メインコード:

wx.Dialog.__init__(self, None, 6, 'Filters',size = (500,600) )
    self.splitter = wx.SplitterWindow(self, -1)
    leftPanel = wx.Panel(self.splitter, -1)
    leftBox = wx.BoxSizer(wx.VERTICAL)
    self.__tree = TreeFilter(leftPanel, 1)
    leftBox.Add(self.__tree, -1, wx.GROW)
    self.__tree.Bind(CT.EVT_TREE_ITEM_CHECKED, self.checked)
    leftPanel.SetSizer(leftBox)

    rightPanel = wx.Panel(self.splitter, -1)
    rightBox = wx.BoxSizer(wx.VERTICAL)
    self.display = wx.StaticText(rightPanel, -1, '', style=wx.ALIGN_LEFT)
    rightBox.Add(self.display, -1, wx.GROW)


    btnsizer = wx.StdDialogButtonSizer()
    btn = wx.Button(rightPanel, wx.ID_OK)
    btn.SetDefault()
    btnsizer.AddButton(btn)

    btn = wx.Button(rightPanel, wx.ID_CANCEL)
    btnsizer.AddButton(btn)
    btnsizer.Realize()
    rightBox.Add(btnsizer, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
    rightPanel.SetSizer(rightBox)

    self.splitter.SplitVertically(leftPanel, rightPanel)
    self.Centre()

ここで、TreeFilter はカスタム ツリー ctrl です。問題の解決を手伝ってください

4

1 に答える 1

0

問題は、展開するように設定されたサイザーにスプリッター自体がないことです。私の画面では、小さな箱が左隅に丸まっているのが見えるので、そのようなことが起こっていることはわかっていました。

これが私にとってうまくいく例です:

import wx

########################################################################
class MyTreeCtrl(wx.TreeCtrl):

    #----------------------------------------------------------------------
    def __init__(self, parent, id):
        wx.TreeCtrl.__init__(self, parent, id)


########################################################################
class TestDlg(wx.Dialog):
    """"""

    #----------------------------------------------------------------------
    def __init__(self):
        """Constructor"""

        wx.Dialog.__init__(self, None, 6, 'Filters',size = (500,600) )
        mainSizer = wx.BoxSizer(wx.VERTICAL)

        self.splitter = wx.SplitterWindow(self, -1)
        leftPanel = wx.Panel(self.splitter, -1)
        leftBox = wx.BoxSizer(wx.VERTICAL)
        self.tree = MyTreeCtrl(leftPanel, 1)

        self.root = self.tree.AddRoot("The Root Item")
        self.tree.SetPyData(self.root, None)
        for x in range(15):
            child = self.tree.AppendItem(self.root, "Item %d" % x)
            self.tree.SetPyData(child, None)
        self.tree.Expand(self.root)

        leftBox.Add(self.tree, -1, wx.GROW)
        #self.__tree.Bind(CT.EVT_TREE_ITEM_CHECKED, self.checked)
        leftPanel.SetSizer(leftBox)

        rightPanel = wx.Panel(self.splitter, -1)
        rightBox = wx.BoxSizer(wx.VERTICAL)
        self.display = wx.StaticText(rightPanel, -1, '', style=wx.ALIGN_LEFT)
        rightBox.Add(self.display, -1, wx.GROW)

        btnsizer = wx.StdDialogButtonSizer()
        btn = wx.Button(rightPanel, wx.ID_OK)
        btn.SetDefault()
        btnsizer.AddButton(btn)

        btn = wx.Button(rightPanel, wx.ID_CANCEL)
        btnsizer.AddButton(btn)
        btnsizer.Realize()
        rightBox.Add(btnsizer, 0, wx.ALIGN_CENTER_VERTICAL|wx.ALL, 5)
        rightPanel.SetSizer(rightBox)

        self.splitter.SplitVertically(leftPanel, rightPanel)
        self.Centre()
        mainSizer.Add(self.splitter, 1, wx.EXPAND)
        self.SetSizer(mainSizer)

#----------------------------------------------------------------------
if __name__ == "__main__":
    app = wx.App(False)
    dlg = TestDlg()
    dlg.Show()
    dlg.Destroy()
    app.MainLoop()
于 2012-05-21T14:49:56.607 に答える