2015-09-27 55 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

相關問題