2015-09-27 54 views
0

所以我有一个主菜单设置了一个按钮,打开一个单独的选项窗口。它工作正常,除了我无法找到一种方法来保持菜单关闭后我的旋转控件的值。这是我当前的代码:不知道为什么设置wx.SpinCtrl“value =”为变量不起作用

self.spincontrol = wx.SpinCtrl(self.optionmenupanel, value=OtherClass.variable, size=(60,-1)) 

在选项菜单中关闭,这样运行:

OtherClass.variable = self.spincontrol.GetValue() 
str(OtherClass.variable) 

的事情是,我得到的错误:

TypeError: String or Unicode type required 

的变量应该是一个字符串,我甚至用str()来确认。那么为什么这仍然会发生,并且有没有不同的或更好的方法来做到这一点?

+0

给它一个初始VA例如lue'initial = 0',看看是否停止了这个错误,可能它没有任何价值。 spinctrl实际上应该是一个整数 –

+0

是另一个类中的选项菜单吗?如果是这样,你可能需要'返回'self.spincontrol.GetValue()的价值 –

+0

旋转控制在选项菜单类 - 并给出一个初始值不会改变问题萨克森的@罗尔逊 –

回答

0

我相信从事实您的问题根源在于SpinCtrl可以接受str/unicodeint(接受文本,使对TextCtrl部分意义上说,int有意义的“旋转”的一部分。不过,SpinCtrl.GetValue()总是会返回一个int ,所以它才有意义,始终把OtherClass.variableint

所以最好的办法是使用:

val = OtherClass.variable 
    self.spinctrl = ...(..., value="", ...) # value only can be ``str`` ! 
    self.spinctrl.SetValue(val) # will accept ``str`` and ``int`` 

    self.spinctrl.Bind(wx.EVT_SPINCTRL, self.on_spin) 

def on_spin(self, evt): 
    res = self.spin.GetValue() 
    assert isinstance(res, int) 
    OtherClass.variable = res 
+0

这是成功的!你能解释一下'on_spin'函数的作用吗? –

+0

不确定你的意思,但是a)它被绑定到''EVT_SPINCTRL''(当'SpinCtrl'变化时被事件系统调用),b1)从控件读出值,b2)(可选)确保它是int,b3)将值赋给''OtherClass''(我认为这是你想要改变的,因为你为什么想要一个SpinCtrl?) – nepix32

相关问题