質問

わかりましたコード:

#!/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 Constructorを複数回呼び出して、異なる引数を渡すことができるようになりたい

私は多くのことを試しました...

すべての議論でmyframeをインストールして、すべての議論で私の枠を入力しますが、デフォルトの引数
すべての引数を使用したコンストラクターメソッドの署名
コンストラクターメソッドの署名はすべて、デフォルトの引数です
すべての引数で親コンストラクター法を呼び出します
すべての人とともに親コンストラクター法を呼び出しますが、デフォルトの引数

さらに、チュートリアル http://zetcode.com/wxpython/ デフォルトとオプションの引数の数が異なる方法に言及します! (違いは何ですか?)

udpate:

「7つのパラメーターがあります。最初のパラメーターにはデフォルト値がありません。他の6つのパラメーターにはあります。これらの4つのパラメーターはオプションです。最初の3つのパラメーターは必須です。」 - 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)
  • 私はどのような議論が進んでいるかを伝えます(2行目)
  • 私は(3行目)になった議論で電話します

更新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.

なぜうまくいかなかったのですか?

役に立ちましたか?

解決

1回の調整で私のためにうまく動作します。サブクラス化した後、あなたはコロンが欠けています wx.Frame 声明。

1つのコメント。あなたが親イタライザーに引数を「通過」するだけなら、使用してください *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)

引数をキーワードとして渡すと、タイトル、サイズ、スタイル、実際にそれらを取る関数に対する位置がまったく異なる可能性があります。そこにある最初の行は、「サイズ」を5番目の議論に割り当てます 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