كسبيثون: التعامل مع الأحداث في القطعة التي هي داخل جهاز كمبيوتر محمول

StackOverflow https://stackoverflow.com/questions/1201979

سؤال

ولدي دفتر كسبيثون، في هذه الحالة wx.aui.AuiNotebook. (ولكن لم يحدث هذه المشكلة مع أنواع أخرى من أجهزة الكمبيوتر المحمولة أيضا.) في دفتر ملاحظاتي لدي القطعة، في هذه الحالة فئة فرعية من ScrolledPanel، والتي أحاول القيام ببعض حدث مخصص التعامل مع (لwx.EVT_KEY_DOWN). ومع ذلك، لم يتم التعامل مع الأحداث. راجعت قانون بلدي خارج من دفتر الملاحظات، والتعامل مع الحدث الأعمال، ولكن عندما أضع القطعة في دفتر الملاحظات، لا يبدو معالج الأحداث للحصول على الاحتجاج عندما يحدث هذا الحدث.

هل دفتر كتلة على نحو ما حدث؟ كيف يمكنني حل هذا؟

هل كانت مفيدة؟

المحلول

وحاولت استنساخ مشكلتك لكنه يعمل بشكل جيد بالنسبة لي. الشيء الوحيد الذي يمكنني أن أفكر في أن يكون هناك واحد من الفصول الدراسية الذي يربط أيضا إلى wx.EVT_KEY_DOWN ولا يدعو <لأ href = "http://www.wxpython.org/docs/api/wx.Event-class. أتش تي أم أل # تخطي "يختلط =" نوفولو noreferrer "> wx.Event.Skip () في رد الاتصال به. ومن شأن ذلك أن منع مزيد من التعامل مع الحدث. إذا حصلت لوحة الخاص بك تمريره ليكون المصب مثل كائن في سلسلة من معالجات الأحداث أنها لن ترى هذا الحدث.

لمرجعية، وهنا مثال التي عملت بالنسبة لي (ويندوز). هل ما تفعلونه تختلف كثيرا عن هذا؟

import wx
import wx.aui, wx.lib.scrolledpanel

class AppFrame(wx.Frame):
    def __init__(self, *args, **kwds):
        wx.Frame.__init__(self, *args, **kwds)

        # The notebook
        self.nb = wx.aui.AuiNotebook(self)

        # Create a scrolled panel
        panel = wx.lib.scrolledpanel.ScrolledPanel(self, -1)
        panel.SetupScrolling()
        self.add_panel(panel, 'Scrolled Panel')

        # Create a normal panel
        panel = wx.Panel(self, -1)
        self.add_panel(panel, 'Simple Panel')

        # Set the notebook on the frame
        self.sizer = wx.BoxSizer()
        self.sizer.Add(self.nb, 1, wx.EXPAND)
        self.SetSizer(self.sizer)

        # Status bar to display the key code of what was typed
        self.sb = self.CreateStatusBar()

    def add_panel(self, panel, name):
        panel.Bind(wx.EVT_KEY_DOWN, self.on_key)
        self.nb.AddPage(panel, name)

    def on_key(self, event):
        self.sb.SetStatusText("key: %d [%d]" % (event.GetKeyCode(), event.GetTimestamp()))
        event.Skip()

class TestApp(wx.App):
    def OnInit(self):
        frame = AppFrame(None, -1, 'Click on a panel and hit a key')
        frame.Show()
        self.SetTopWindow(frame)
        return 1

if __name__ == "__main__":
    app = TestApp(0)
    app.MainLoop()
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top