我在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上,我遇到以下问题:
无法禁用filepicker和spinCtrl - 如果其中任何一个控件不正确地获得焦点,这可能会导致错误的信息被发送回treeCtrl
spinctrl,choice,checkbox和comboctrl似乎没有触发EVT_KILL_FOCUS事件,因此没有信息被发送回treeCtrl。我通过绑定EVT_CHOICE将其固定在选择控件上。对其他控件使用非焦点事件也不起作用,并产生不良行为。
所以我的问题是:
1:是否可以在OSX上禁用filepicker和spinCtrl?
2:有没有办法在mac上使用spinctrl,choice,checkbox和comboctrl控件的kill focus事件?
3:如果无法使用填充焦点事件,那么对于每个控件,是否会在编辑完成后触发一个备用事件?
由于 罗布
答案 0 :(得分:2)
您使用的是哪个版本的wxPython?使用当前版本,禁用这些类型的小部件对我来说似乎正常。
出于某种原因,Apple认为从不将键盘焦点放在某些类型的控件上是一个好主意,因为显然没有人会想要将它们与鼠标或触控板一起使用。因此,如果小部件永远不会获得焦点,那么它永远不会丢失它,因此它也不会成为任何EVT_KILL_FOCUS。您可以通过设置"全键盘访问"在“系统偏好设置”的“键盘”面板中更改此设置。到"所有控件"