简体   繁体   English

为什么python3无法运行wx模块并说我的对象没有属性'SetSizeHintsSz'?

[英]Why python3 fails to run wx module saying my object has no attribute 'SetSizeHintsSz'?

I am learning the use of wxPython. 我正在学习使用wxPython。 I have done some basic examples that work fine, but on this one it fails. 我已经做了一些可以正常工作的基本示例,但在此示例上却失败了。 It is a simple frame to square a number, prepared with the help of wxFormBuilder. 这是一个简单的框架,用于在wxFormBuilder的帮助下对数字进行平方。 I am running: Python 3.5.1 |Anaconda 2.5.0 (64-bit)| 我正在运行:Python 3.5.1 | Anaconda 2.5.0(64位)| (default, Feb 16 2016, 09:49:46) [MSC v.1900 64 bit (AMD64)] on Windows 8.1. (默认值,2016年2月16日,09:49:46)Windows 8.1上的[MSC v.1900 64位(AMD64)]。 The version of wxPython is Phoenix (3.0.3.dev1964+f780b21) wxPython的版本是Phoenix(3.0.3.dev1964 + f780b21)

wxFormBuilder code "test_wx.py" is: 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()

Then I have this main script calling my demo: 然后,我有这个主要脚本来调用我的演示:


# -*- 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__

The code is not running. 该代码未运行。 The only clue I am getting is: 我得到的唯一线索是:

AttributeError: 'CalcFrame' object has no attribute 'SetSizeHintsSz' AttributeError:“ CalcFrame”对象没有属性“ SetSizeHintsSz”

But that seems to me is available in the inherited class!!! 但这在我看来可以在继承的类中使用!!! Any way, I tried to include in the definition of CalcFrame the statement: 无论如何,我试图在CalcFrame的定义中包含以下语句:

        self.SetSizeHintsSz( wx.DefaultSize, wx.DefaultSize )

But didn't worked either. 但是也没有用。 What might be wrong with this code? 此代码可能有什么问题?

SetSizeHintsSz is SetSizeHints in wxpython phoenix. SetSizeHintsSz是在wxPython凤凰SetSizeHints。

For a (relatively comprehensive) list of classes, functions and methods which need modification while porting your code from Classic to Phoenix, please see the Classic vs. Phoenix document. 有关将代码从Classic移植到Phoenix时需要修改的类,函数和方法的(相对全面的)列表,请参阅Classic vs. Phoenix文档。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM