从win迁移到mac时wxpython控制问题

时间:2015-02-24 17:35:32

标签: python macos wxpython

我在Windows上开发了一个python(2.7)/ wxpython程序,我试图迁移到mac但遇到了一些问题。

我遇到的问题包括两个小组:

面板A由一个树控件组成,其中包含键=值对并禁用了用户编辑。

面板B包含一组各种类型的控件(filePicker,textCtrl,valueCtrl,choice,checkbox,comboBox和spinEdit),所有这些控件最初都被禁用

当用户选择树节点时,程序检查该键并决定应该使用面板B上的哪个控件来编辑树节点的值。然后,面板A使用pubsub将相关信息发送到面板B,该pubsub初始化并启用相关控件。面板B上的每个控件都有一个EVT_KILL_FOCUS事件,因此当用户离开控件时,控件值将使用pubsub发送回面板A,树节点的值将更新,面板B上的编辑控件为禁用。这在Windows上工作正常。

在Mac上,我遇到以下问题:

  1. 无法禁用filepicker和spinCtrl - 如果其中任何一个控件不正确地获得焦点,这可能会导致错误的信息被发送回treeCtrl

  2. spinctrl,choice,checkbox和comboctrl似乎没有触发EVT_KILL_FOCUS事件,因此没有信息被发送回treeCtrl。我通过绑定EVT_CHOICE将其固定在选择控件上。对其他控件使用非焦点事件也不起作用,并产生不良行为。

  3. 所以我的问题是:

    1:是否可以在OSX上禁用filepicker和spinCtrl?

    2:有没有办法在mac上使用spinctrl,choice,checkbox和comboctrl控件的kill focus事件?

    3:如果无法使用填充焦点事件,那么对于每个控件,是否会在编辑完成后触发一个备用事件?

    由于 罗布

1 个答案:

答案 0 :(得分:2)

  1. 您使用的是哪个版本的wxPython?使用当前版本,禁用这些类型的小部件对我来说似乎正常。

  2. 出于某种原因,Apple认为从不将键盘焦点放在某些类型的控件上是一个好主意,因为显然没有人会想要将它们与鼠标或触控板一起使用。因此,如果小部件永远不会获得焦点,那么它永远不会丢失它,因此它也不会成为任何EVT_KILL_FOCUS。您可以通过设置"全键盘访问"在“系统偏好设置”的“键盘”面板中更改此设置。到"所有控件"