如何以编程方式更新Traitsui中的值?

2024-03-29 01:58:52 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试更新Traitsui变量的值,以匹配通过PyQt接口给定的用户定义变量。你知道吗

这看起来很简单,但现在已经花了我好几个小时了。我在这里使用的print函数显示traits变量正在更新,但是实际的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_())

Tags: importselfvaluedefscenepyqtparentprint