Wxpython Can';我不明白为什么要设置wx.SpinCtrl";值=”;到变量isn';行不通

Wxpython Can';我不明白为什么要设置wx.SpinCtrl";值=”;到变量isn';行不通,wxpython,Wxpython,所以我有一个主菜单,上面有一个按钮,可以打开一个单独的选项窗口。它工作得很好,除了在菜单关闭后我找不到保持spincontrol小部件值的方法。这是我当前的代码: self.spincontrol = wx.SpinCtrl(self.optionmenupanel, value=OtherClass.variable, size=(60,-1)) 关闭“选项”菜单时,将运行: OtherClass.variable = self.spincontrol.GetValue() str(Oth

所以我有一个主菜单,上面有一个按钮,可以打开一个单独的选项窗口。它工作得很好,除了在菜单关闭后我找不到保持spincontrol小部件值的方法。这是我当前的代码:

 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()
来确保。那么,为什么这种情况还在发生,有没有其他或更好的方法可以做到这一点呢?

我想你的问题是因为
SpinCtrl
可以接受
str
/
unicode
int
(接受文本对
TextCtrl
部分有意义,
int
对“spin”部分有意义)但是,
SpinCtrl.GetValue()
将始终返回一个
int
,因此将
其他类.variable
始终视为
int
是有意义的

因此,最好使用:

    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

例如,给它一个初始值
initial=0
,看看这是否能阻止错误,可能是因为它没有值。spinctrl确实应该是另一个类中的选项菜单中的整数?如果是这样,您可能需要
返回self.spincontrol.GetValue()的值spincontrol在选项菜单类中-并且给出初始值不会改变Saxony的@Rolf问题这是成功的!你能解释一下spin
函数的
功能是什么吗?不确定你的意思,但a)它绑定到
EVT\U SPINCTRL
(当
SPINCTRL
改变时,事件系统会调用它),b1)从控件中读取值,b2)(可选)确保其为int,b3)将值分配给
OtherClass
(我认为这是您想要更改的,因为您首先为什么需要一个SpinCtrl?)