wxPython TreeCtrl SelectItem,在Mac和Linux中不具有确保可见性

问题描述 投票:0回答:1

我正在为某些激光切割机软件(https://github.com/meerk40t/meerk40t)写代码,并且使用wxPython 4.0+在“多选”模式下有一个wx.TreeCtrl。对于某些特定的树项目,我希望选择还选择同一棵树中的其他项目,只是为了表明它们虽然没有集中精力却链接到相同的数据。尽管在Windows中可以正常工作,但GTK,OSX素材的选择事件代码却出错。选择其他项目后,它将调用类似于EnsureVisibile()的代码,并尝试滚动到其他那些选择的项目。如果可以将其关闭,则可以,但是似乎无法将其关闭。它滚动到其他选定的项目,因此无法进行拖放。

是否有某种方式可以选择没有SelectItem()代码的项目?无论如何,有没有针对OSX和Linux禁用该功能?

我曾尝试过核对SecureVisible()函数,再次选择项目,然后再次选择焦点项目以撤消滚动,并在所有可能的修复位置进行搜索。有什么想法吗?

import wx

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        kwds["style"] = kwds.get("style", 0) | wx.DEFAULT_FRAME_STYLE
        wx.Frame.__init__(self, *args, **kwds)
        self.SetSize((400, 300))
        self.tree = wx.TreeCtrl(self, wx.ID_ANY, style=wx.TR_MULTIPLE)
        self.root = self.tree.AddRoot("My Tree")
        sizer_1 = wx.BoxSizer(wx.VERTICAL)
        sizer_1.Add(self.tree, 1, wx.EXPAND, 0)
        self.SetSizer(sizer_1)
        self.Layout()
        self.Bind(wx.EVT_TREE_SEL_CHANGED, self.on_tree_selection, self.tree)
        for j in range(20):
            for k in range(5):
                self.tree.AppendItem(self.root, str(k))
        self.tree.ExpandAll()

    def on_tree_selection(self, event):
        label = self.tree.GetItemText(self.tree.GetFocusedItem())
        h = self.tree.GetFirstChild(self.root)[0]
        while h.IsOk():
            if label == self.tree.GetItemText(h):
                self.tree.SelectItem(h, True)
            h = self.tree.GetNextSibling(h)

class MyApp(wx.App):
    def OnInit(self):
        self.frame = MyFrame(None, wx.ID_ANY, "")
        self.SetTopWindow(self.frame)
        self.frame.Show()
        return True

if __name__ == "__main__":
    app = MyApp(0)
    app.MainLoop()

基本应用出现问题。在Windows中,它会选择所有内容并正常工作。在MacOSX,Linux或RPi中,它会滚动,从而使代码无法使用。

treeview wxpython wxwidgets wxpython-phoenix
1个回答
0
投票

我同意,如果不是新选择的项目不是唯一选择的项目,则不幸的是,目前似乎无法从控件外部禁用此行为。这可能应该是固定的,但是与此同时,我只能推荐其他方式来指示项目已链接,因为恕我直言,在任何情况下选择它们都不是特别用户友好的,因为这应该被认为是不正确的。用户控制。例如,您可以将其字体更改为斜体,或使用一些特殊的颜色,甚至可以(临时)更改其标签。

P.S。碰巧的是,a patch确切地解决了您要报告的问题是在几天前提交的,应尽快应用,因此应在下一wxWidgets / wxPython版本中进行解决。

© www.soinside.com 2019 - 2024. All rights reserved.