我有代码:
import time
import numpy as np
from scipy.optimize import fmin_tnc
from enthought.traits.api import *
from enthought.traits.ui.api import *
class Minimizer(HasTraits):
iteration = Int(0)
run = Button
def callback(self, x):
self.iteration += 1
print self.iteration
time.sleep(0.5)
def func(self, x):
return (x**2).sum()
def fprime(self, x):
return 2*x
def minimize(self):
x0 = np.random.rand(50)
fmin_tnc(self.func, x0, fprime=self.fprime, messages=0, callback = self.callback)
def _run_fired(self):
self.minimize()
traits_view = View(Item('iteration'), UItem('run'))
m = Minimizer()
m.configure_traits()
运行上述代码并按“运行”按钮后,我预计“迭代”属性将在每次迭代时在 GUI 中更新,但事实并非如此。我怀疑这是因为这个值被 C 的回调改变了。在这种情况下应该做什么来更新用户界面?
问候, 马立克
最佳答案
对 m.configure_traits()
的调用是阻塞的,这意味着在您关闭该调用创建的窗口之前,脚本的执行不会继续越过该行。换句话说,当窗口打开时,m.minimize
不会被调用。
关于python-2.7 - Traits ui (enthought) 和来自 C 的回调,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33498510/