好的代码:

#!/usr/bin/python

import wx
import sys

class XPinst(wx.App):
    def __init__(self, redirect=False, filename=None):
        wx.App.__init__(self, redirect, filename)
    def OnInit(self):
        frame = wx.Frame(None, -1, title='Redirect Test', size=(620,450), style=wx.STAY_ON_TOP|wx.DEFAULT_FRAME_STYLE)
        panel = wx.Panel(frame, -1)
        log = wx.TextCtrl(panel, -1, size=(500,400), style = wx.TE_MULTILINE|wx.TE_READONLY|wx.HSCROLL)
        redir=RedirectText(log)
        sys.stdout=redir
        print 'test'
        frame.Show()
        return True

class RedirectText:
    def __init__(self,aWxTextCtrl):
        self.out=aWxTextCtrl
    def write(self,string):
        self.out.WriteText(string)

app = XPinst()
app.MainLoop()

添加:

class MyFrame(wx.Frame)
    def __init__(self, parent, id, title, size=(620,450), style=wx.STAY_ON_TOP|wx.DEFAULT_FRAME_STYLE):
        wx.Frame.__init__(self, parent, id, title, size=(620,450), style=wx.STAY_ON_TOP|wx.DEFAULT_FRAME_STYLE)

更换:

frame = wx.Frame(None, -1, title='Redirect Test', size=(620,450), style=wx.STAY_ON_TOP|wx.DEFAULT_FRAME_STYLE)

和:

frame = MyFrame(None, -1, title='Redirect Test', size=(620,450), style=wx.STAY_ON_TOP|wx.DEFAULT_FRAME_STYLE)

现在,它不运行...

我希望能够在我的代码中多次调用MyFrame构造函数。

我尝试了很多事情...

使用所有参数来实现myframe,以实现myframe等,但默认参数
所有参数的构造方法签名
构建器方法签名与所有签名,但默认参数
使用所有参数调用父构建器方法
与所有人调用父构建器方法,但默认参数

加上教程 http://zetcode.com/wxpython/ 提到一种方法,其中默认参数和可选参数的数量不同! (有什么不同?)

udpate:

“它有七个参数。第一个参数没有默认值。其他六个参数确实具有。这四个参数是可选的。前三个是强制性的。” - http://zetcode.com/wxpython/firststeps/

更新2:

有了半彩色的校正,我刚刚尝试了:

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title, size, style):
        wx.Frame.__init__(self, parent, id, title, size, style)
  • 我说(第二行)正在发生什么论点
  • 我打电话给参数(第三行)

更新3:

完整的错误消息是:

Traceback (most recent call last):
  File "test.py", line 29, in <module>
    app = XPinst()
  File "test.py", line 8, in __init__
    wx.App.__init__(self, redirect, filename)
  File "/usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode/wx/_core.py", line 7978, in __init__
    self._BootstrapApp()
  File "/usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode/wx/_core.py", line 7552, in _BootstrapApp
    return _core_.PyApp__BootstrapApp(*args, **kwargs)
  File "test.py", line 10, in OnInit
    frame = MyFrame(None, -1, title='Redirect Test', size=(620,450), style=wx.STAY_ON_TOP|wx.DEFAULT_FRAME_STYLE)
  File "test.py", line 21, in __init__
    wx.Frame.__init__(self, parent, id, title, size, style)
  File "/usr/lib/python2.6/dist-packages/wx-2.8-gtk2-unicode/wx/_windows.py", line 497, in __init__
    _windows_.Frame_swiginit(self,_windows_.new_Frame(*args, **kwargs))
TypeError: Expected a 2-tuple of integers or a wxSize object.

为什么不起作用?

有帮助吗?

解决方案

一项调整对我来说很好。您的子分类后您错过了结肠 wx.Frame 陈述。

一条评论;如果您只是“通过”向父母的恐怖分子“通过”论点,请使用 *args 和/或 **kwargs 保存一些打字。

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        wx.Frame.__init__(self, *args, **kwargs)

如果要修改或添加特定参数,则可以修改字典 kwargs, ,例如

class MyFrame(wx.Frame):
    def __init__(self, *args, **kwargs):
        kwargs['size']=(1000,200)
        wx.Frame.__init__(self, *args, **kwargs)

在运行文件以进行开发:

运行您在控制台上工作的脚本, python, , 不是 pythonw. 。后者看到错误并将其送往拉拉 - 陆地时会退出。

N:\Code>pythonw wxso.pyw

N:\Code>rem nothing happened.

N:\Code>python wxso.pyw
  File "wxso.pyw", line 24
    class MyFrame(wx.Frame)
                          ^
SyntaxError: invalid syntax

N:\Code>

关于关键字参数:

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title, size, style):
        #wx.Frame.__init__(self, parent, id, title, size, style) # broken
        # equivalent to:
        #wx.Frame.__init__(self, parent, id=id, title=title, pos=size, size=style)

        # the below works.
        wx.Frame.__init__(self, parent, id, title=title, size=size, style=style)

当您将参数作为关键字(例如标题,大小,样式,其位置,实际上采用它们的函数)时可能完全不同。那里的第一行将“大小”分配给任何是第五个参数 wx.Frame.__init__ 功能,可能不是大小。这可能是第100个参数,但是您使用关键字来告诉它去哪里。

“可选”有些模糊。 关键字参数 供应默认值,但默认值可能不合适。

其他提示

你错过了 pos 从你的 Frame.__init__ 称呼。这是来自 文档:

Frame.__init__(self, parent, id, title, pos, size, style, name)

因此,基本上错误是说它期望 size 要成为2元组或wxsize对象,而您所传递的内容则与之匹配。我猜这是您删除时的爬行 size= 来自这里的构造函数:

class MyFrame(wx.Frame):
    def __init__(self, parent, id, title, size, style):
        wx.Frame.__init__(self, parent, id, title, size, style)

编辑:以下任何一个都可以

        wx.Frame.__init__(self, parent, id, title, size=size, style=style)
        wx.Frame.__init__(self, parent, id, title, wx.DefaultPosition, size, style)

但是,通过省略参数中的关键字,您的呼叫正在通过命令中处理,

        wx.Frame.__init__(self, parent, id, title, pos=size, size=style)
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top