Смена цвета виджета в PyQt (в нужное время и в нужном месте)

Модератор: Модераторы разделов

Аватара пользователя
.Serj.
Сообщения: 127
ОС: Gentoo, Win7

Смена цвета виджета в PyQt

Сообщение .Serj. »

Смена цвета осуществляется с помощью QTimer, при запуске срабатывает вызов только первой и последней функции. Кто виноват? Что делать?
Вот часть моего страшного кода:

Код: Выделить всё

    def setSpeed(self):
##     Установка скорости визуализации
     global spd
     spd=self.SliderSpeed.value()
     spd=(1000/spd)*10
     print spd

##    Отсюда и до VisualOtdStep6 - функции для визуализации метода отделения корня
    def VisualOtdStep1(self):
     self.label_2O.setPalette(palette2)
     self.label_3O.setPalette(palette)

    def VisualOtdStep2(self):
     self.label_3O.setPalette(palette2)
     self.label_4O.setPalette(palette)

    def VisualOtdStep3(self):
     self.label_4O.setPalette(palette2)
     self.label_5O.setPalette(palette)

    def VisualOtdStep4(self):
     self.label_5O.setPalette(palette2)
     self.label_6O.setPalette(palette)

    def VisualOtdStep5(self):
     self.label_6O.setPalette(palette2)
     self.label_7O.setPalette(palette)

    def VisualOtdStep6(self):
     self.label_7O.setPalette(palette2)
     self.label_4O.setPalette(palette2)
     self.label_8O.setPalette(palette)

    def CalcOtd(self):
##     Процедура отделения корня
     global x1s, x2s, palette, palette2

##    Описываем палитры
     palette = QtGui.QPalette()
     brush = QtGui.QBrush(QtGui.QColor("red"))
     brush.setStyle(QtCore.Qt.SolidPattern)
     palette.setBrush(QtGui.QPalette.Active,QtGui.QPalette.Window,brush)

     palette2=QtGui.QPalette()
     brush2=QtGui.QBrush(QtGui.QColor("lightgray"))
     brush2.setStyle(QtCore.Qt.SolidPattern)
     palette2.setBrush(QtGui.QPalette.Active,QtGui.QPalette.Window,brush2)

##    Делаем остальные вкладки активными
     for self.tabWidget in self.tabIter, self.tabKas, self.tabPolDelen :
      self.tabWidget.setEnabled(True)

##    Устанавливаем палитру для виджетов
     for self.labelWidget in self.label_2O,self.label_3O,self.label_4O,self.label_5O,self.label_6O,self.label
_7O,self.label_8O:
      self.labelWidget.setPalette(palette2)

##    Определяем f(x)
     def f(x):
      x=x**3-6*x+2
      return x

##    Непосредственно алгоритм вычисления с визуализацией
     self.label_2O.setPalette(palette)
     a=-3
     b=3
     h=0.01
     x1=a
     x2=x1+h
     y1=f(x1)
     while x2<b:
      self.timer.singleShot(spd, self.VisualOtdStep1)
      y2=x2**3-6*x2+2
      self.timer.singleShot(spd, self.VisualOtdStep2)
      if y1*y2<0:
       self.timer.singleShot(spd, self.VisualOtdStep3)
       print "x1="+str(x1)
       print "x2="+str(x2)
       self.labelResult2.setText("x1="+str(x1)+";"+"x2="+str(x2))
       x1s=x1
       x2s=x2
       self.timer.singleShot(spd, self.VisualOtdStep4)
      x1=x2
      x2=x1+h
      y1=y2
      self.timer.singleShot(spd, self.VisualOtdStep5)
     else:
      self.timer.singleShot(spd, self.VisualOtdStep6)
Спасибо сказали: