Данные, введенные пользователем, не учитываются деревом параметров - PullRequest
0 голосов
/ 11 июня 2018

Надеюсь, вы сможете мне помочь, и мой вопрос будет достаточно ясным.Я использую PyQT5, чтобы сделать графический интерфейс для настройки сценического двигателя.В графическом интерфейсе пользователь может изменить положение и т. Д. Этапа, изменив значение в дереве параметров.Раньше не было класса MainWindow, поэтому дерево было просто основным, и оно работало очень хорошо (мне пришлось создать класс MainWindow, чтобы использовать closeEvent).

Теперь пользователь может редактировать значения, но это изменениене учитывается программой, поэтому параметры этапа не меняются.Я не знаю, что мне следует изменить в функции Change или в другом месте, чтобы сделать переход от основного класса к классу MainWindow

class MainWindow(QtGui.QMainWindow):
    def __init__(self):
        super(MainWindow,self).__init__()

        self.initUI()
    def initUI(self):


        ######### Parameters of the Parameter tree #########
        params = [
            {'name': 'Parameters', 'type': 'group', 'children': [
                {'name': 'Center Position', 'type': 'float', 'value': CenterPos , 'step': 0.001,'siPrefix': True, 'suffix': 'm'},
                {'name': 'Range', 'type': 'float', 'value': Range, 'limits':(0,24),'step': 0.001,'siPrefix': True, 'suffix': 'm'},

                {'name': 'Step Size', 'type': 'float', 'value': StepSize,'siPrefix': True,'suffix': 'm','readonly': True},  
                {'name': 'Points', 'type': 'int', 'value': int(Points), 'limits': (1, 256), 'step': 1},
                ]},
        ]

        p = Parameter.create(name='params', type='group', children=params)

        t = ParameterTree()
        t.setParameters(p, showTop=False)
        t.setWindowTitle('pyqtgraph example: Parameter Tree')


        def change(param, changes):
            global p,StartingPoint,ArrivingPoint,CenterPos,Range,Points,StepSize
            for param, data  in changes:
                path = p.childPath(param)
                if path[0]=='Stage Parameters':
                    if path[1]=='Center Position':           
                        CenterPos = data*1E3
                        StartingPoint=data*1E3-Range/2.0
                        ArrivingPoint=data*1E3+Range/2.0
                        StepSize = (ArrivingPoint-StartingPoint)/Points
                        p.param('arameters','Step Size').setValue(StepSize)
                    if path[1]=='Range':
                        Range=data*1E3
                        StartingPoint=CenterPos-Range/2.0
                        ArrivingPoint=CenterPos+Range/2.0
                        StepSize = (ArrivingPoint-StartingPoint)/Points
                        p.param('Parameters','Step Size').setValue(StepSize)

                    if path[1]=='Points':           
                        Points=data
                        StepSize=Range/data
                        p.param('Parameters','Step Size').setValue(StepSize)
        p.sigTreeStateChanged.connect(change)
w = MainWindow()

1 Ответ

0 голосов
/ 15 июня 2018

Используя этот пример кода дерева параметров: http://www.pyqtgraph.org/downloads/0.10.0/pyqtgraph-0.10.0-deb/pyqtgraph-0.10.0/examples/parametertree.py Я смог более корректно переписать мое дерево параметров.Обновление взаимозависимых переменных было достигнуто с помощью класса с подфункциями, такими как класс «ComplexParameter» из примера в приведенной выше ссылке.

Данные, введенные пользователем, теперь учитываются при правильном использованииглобальные переменные в классе ComplexParameter.

...