Как я могу определить класс как Panel и затем вызвать этот класс в моем фрейме?
То, что вы пробовали, близко, но вы неправильно называете суперкласс __init__
. Однако при создании подклассов классов wxPython лучше всего использовать следующий шаблон, чтобы вам не приходилось беспокоиться о том, какие конкретные аргументы вы ему передаете. (Это не решило бы вашу проблему, которая была за пределами рассматриваемого кода, но, возможно, прояснит, что происходит.)
class Panel(wx.Panel):
def __init__(self, *args, **kwargs):
wx.Panel.__init__(self, *args, **kwargs)
# ... code specific to your subclass goes here
Это гарантирует, что все переданное будет передано методу суперкласса без добавления или удаления. Это означает, что подпись для вашего подкласса точно совпадает с сигнатурой суперкласса, что также может ожидать кто-то, использующий ваш подкласс.
Если, однако, вы на самом деле ничего не делаете в своем собственном методе __init__()
, кроме вызова суперкласса __init__()
, вам вообще не нужно предоставлять метод!
Что касается вашего исходного выпуска:
но это дает мне эту ошибку: в __init__ windows.Panel_swiginit(self,windows.new_Panel(*args, **kwargs)) TypeError: in method 'new_Panel', expected argument 1 of type 'wxWindow *'
( Edited ) Вы на самом деле создавали wx.Panel () внутри __init__
, а не вызывали суперкласс __init__
, как указывал Хавьер (и Брайан Оукли, исправляя меня). (Смена «родительского» аргумента Хавьера на «* args» смутила меня ... извините, что сбила вас с толку.)