所以我有一个主菜单设置了一个按钮,打开一个单独的选项窗口。它工作正常,除了我无法在菜单关闭后找到保持我的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()
来确保。那么为什么这仍然会发生,是否有不同或更好的方法来做到这一点?
答案 0 :(得分:0)
我认为你的问题源于SpinCtrl
可以接受str
/ unicode
和int
这一事实(接受文字对TextCtrl
部分有意义,int
对“旋转”部分有意义。但是,SpinCtrl.GetValue()
将始终返回int
,因此将OtherClass.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