1

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_())
ees
  • 327
  • 1
  • 17

0 Answers0