wxPython の使い方を学んでいます。正常に動作するいくつかの基本的な例を実行しましたが、これでは失敗します。これは、wxFormBuilder の助けを借りて作成された、数値を 2 乗するための単純なフレームです。私は実行しています: Python 3.5.1 |アナコンダ 2.5.0 (64 ビット)| (デフォルト、2016 年 2 月 16 日、09:49:46) [MSC v.1900 64 ビット (AMD64)] Windows 8.1 で。wxPython のバージョンは Phoenix (3.0.3.dev1964+f780b21) です。
wxFormBuilder コード "test_wx.py" は次のとおりです。
# -*- coding: utf-8 -*-
###########################################################################
## Python code generated with wxFormBuilder (version Jun 17 2015)
## http://www.wxformbuilder.org/
##
## PLEASE DO "NOT" EDIT THIS FILE!
###########################################################################
import wx
import wx.xrc
import gettext
_ = gettext.gettext
###########################################################################
## Class MyFrame1
###########################################################################
class MyFrame1 ( wx.Frame ):
def __init__( self, parent ):
wx.Frame.__init__ (self, parent, id = wx.ID_ANY,
title = wx.EmptyString,
pos = wx.DefaultPosition,
size = wx.Size( 342,246 ),
style = wx.DEFAULT_FRAME_STYLE|wx.TAB_TRAVERSAL )
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
bSizer1 = wx.BoxSizer( wx.VERTICAL )
self.m_staticText1 = wx.StaticText( self, wx.ID_ANY,
_(u"Give me a number"),
wx.DefaultPosition,
wx.DefaultSize, wx.ALIGN_CENTRE )
self.m_staticText1.Wrap( -1 )
bSizer1.Add( self.m_staticText1, 0, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 5 )
self.m_textCtrl1 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString, wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer1.Add( self.m_textCtrl1, 0, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 5 )
self.m_button1 = wx.Button( self, wx.ID_ANY,
_(u"Find the square!"),
wx.DefaultPosition, wx.DefaultSize, 0 )
bSizer1.Add( self.m_button1, 0, wx.ALL|wx.ALIGN_CENTER_HORIZONTAL, 5 )
self.m_textCtrl2 = wx.TextCtrl( self, wx.ID_ANY, wx.EmptyString,
wx.DefaultPosition, wx.DefaultSize, wx.TE_CENTRE )
bSizer1.Add( self.m_textCtrl2, 0, wx.ALL|wx.EXPAND|wx.ALIGN_CENTER_HORIZONTAL, 5 )
self.SetSizer( bSizer1 )
self.Layout()
self.Centre( wx.BOTH )
# Connect Events
self.m_button1.Bind( wx.EVT_BUTTON, self.square)
def __del__( self ):
pass
# Virtual event handlers, override them in your derived class
def square( self, event ):
event.Skip()
次に、このメイン スクリプトでデモを呼び出します。
# -*- coding: utf-8 -*-
"""
Created on Sun Apr 10 12:42:45 2016
@author: Miguel
"""
# -*- coding: utf-8 -*-
import wx
# Import the GUI as prepared by wxFormBuilder
import test_wx as demo
class CalcFrame(demo.MyFrame1):
def __init__(self,parent):
demo.MyFrame1.__init__(self,parent)
def square(self,event):
num = int(self.m_textCtrl1.GetValue())
self.m_textCtrl2.SetValue (str(num * num))
app = wx.App(False)
frame = CalcFrame(None)
frame.Show(True)
# Start the GUI
app.MainLoop()
wx.__version__
コードが実行されていません。私が得ている唯一の手がかりは次のとおりです。
AttributeError: 'CalcFrame' オブジェクトに属性 'SetSizeHintsSz' がありません
しかし、それは継承されたクラスで利用できるようです!!! とにかく、CalcFrame の定義に次のステートメントを含めようとしました。
self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )
しかし、どちらも機能しませんでした。このコードの何が問題なのですか?