I'm trying to update the value of a Traitsui variable to match a user-defined variable given via PyQt interface.
This seems like something so simple, but has taken me numerous hours now. The print functions I've used here show that the traits variable is updating, but the actual traits window is not refreshing to match.
import sys, os
from pyface.qt import QtGui, QtCore
os.environ['ETS_TOOLKIT'] = 'qt4'
from traits.api import HasTraits,Instance,on_trait_change,Int
from traitsui.api import View,Item,VGroup
class Traits_Scene(HasTraits):
traitsui_value = 0
def update_traitsui_value(self):
Traits_Scene.traitsui_value = P1.pyqt_value
print 'Traitsui value =',self.traitsui_value
view = View(
VGroup(
Item('traitsui_value',springy=False,show_label=True,style='readonly'),
),
resizable=True,
)
class P1(QtGui.QWidget):
pyqt_value = 0
print 'PyQt value =',pyqt_value
def __init__(self, parent=None):
super(P1, self).__init__(parent)
layout = QtGui.QGridLayout(self)
def set_value():
P1.pyqt_value = self.entry.value()
print 'PyQt value =',P1.pyqt_value
Traits_Scene().update_traitsui_value()
self.entry = QtGui.QSpinBox(self)
self.entry.setMinimum(0)
self.entry.setMaximum(10)
self.entry.setValue(0)
self.entry.setPrefix('PyQt value: ')
self.entry.valueChanged.connect(set_value)
layout.addWidget(self.entry, 0, 0, 1, 1)
self.entry.show()
self.viz1 = Traits_Scene()
self.ui1 = self.viz1.edit_traits(parent=self, kind='subpanel').control
layout.addWidget(self.ui1, 1, 0, 1, 1)
class MainWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.window = P1(self)
self.setCentralWidget(self.window)
self.show()
if __name__ == '__main__':
app = QtGui.QApplication.instance()
w = MainWindow()
sys.exit(app.exec_())