Я пытаюсь обновить значение переменной Traitsui, чтобы оно соответствовало пользовательской переменной, заданной через интерфейс PyQt.
Это кажется чем-то таким простым, но теперь я потратил много часов. Функции печати, которые я здесь использовал, показывают, что переменная traits обновляется, но окно фактических признаков не обновляется, чтобы соответствовать.
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_())