Wxpython Can';我不明白为什么要设置wx.SpinCtrl";值=”;到变量isn';行不通
所以我有一个主菜单,上面有一个按钮,可以打开一个单独的选项窗口。它工作得很好,除了在菜单关闭后我找不到保持spincontrol小部件值的方法。这是我当前的代码: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
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?)