2016-04-11 2 views
0

J'apprends l'utilisation de wxPython. J'ai fait quelques exemples de base qui fonctionnent bien, mais sur celui-ci il échoue. C'est un cadre simple pour mettre en carré un nombre, préparé avec l'aide de wxFormBuilder. Je cours: Python 3.5.1 | Anaconda 2.5.0 (64-bit) | (défaut, 16 février 2016, 09:49:46) [MSC v.1900 64 bits (AMD64)] sur Windows 8.1. La version de wxPython est Phoenix (3.0.3.dev1964 + f780b21)Pourquoi python3 ne peut pas exécuter le module wx en disant que mon objet n'a pas d'attribut 'SetSizeHintsSz'?

code wxFormBuilder "test_wx.py" est:


# -*- 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() 

Alors j'ai ce script principal appelant ma démo :


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

Le code ne fonctionne pas. Le seul indice que je reçois est:

Mais cela me semble être disponible dans la classe héritée !!! De toute façon, j'ai essayé d'inclure dans la définition de la déclaration CalcFrame:

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

Mais ne travaillais plus. Quel pourrait être le problème avec ce code?

Répondre

1

SetSizeHintsSz est SetSizeHints à Phoenix wxpython.

Pour une liste (relativement complète) de classes, de fonctions et de méthodes qui nécessitent une modification lors du portage de votre code de Classic vers Phoenix, veuillez consulter le document Classic vs. Phoenix.