2015-12-26 2 views
0

У меня есть некоторые проблемы с gui-application на python с pyqt.Фон не меняет цвет

Мне нужно изменить цвет фона в setStyleSheet("QPlainTextEdit{background-color:rgb(0,0,0)}") значениями, которые изменяются при перемещении ползунков.

import sys 
from PyQt4 import QtGui, QtCore 
try: 
    from PyQt4.QtCore import QString 
except ImportError: 
    # we are using Python3 so QString is not defined 
    QString = str 


class ColorViewer(QtGui.QWidget):  
    def __init__(self): 
     QtGui.QWidget.__init__(self) 

     red=0 
     green=0 
     blue=0 

     self.resize(700, 200) 
     self.setWindowTitle(self.trUtf8('Colorviewer')) 

     self.square = QtGui.QPlainTextEdit(self) 
     self.square.setGeometry(455, 20, 225, 160) 
     self.square.setStyleSheet("QPlainTextEdit{background-color:rgb(0,0,0)}") 
     QtGui.QApplication.setStyle(QtGui.QStyleFactory.create('cleanlooks')) 

     self.redtext = QtGui.QPushButton(self.trUtf8('Красный'), self) 
     self.redtext.setCheckable(False) 
     self.redtext.move(10, 20) 
     self.redspinbox = QtGui.QSpinBox(self) 
     self.redspinbox.setEnabled(False) 
     self.redspinbox.setMinimum(0) 
     self.redspinbox.setMaximum(255) 
     self.redspinbox.move(110, 22) 
     self.redspinbox.setValue(0) 
     self.redslider = QtGui.QSlider(QtCore.Qt.Horizontal, self) 
     self.redslider.setMinimum(0) 
     self.redslider.setMaximum(255) 
     self.redslider.setGeometry(160, 26, 255, 14) 
     self.redspinbox.valueChanged.connect(self.redspinbox.setValue) 
     self.connect(self.redslider,QtCore.SIGNAL('sliderMoved(int)'),self.redspinbox,QtCore.SLOT('setValue(int)')) 

     self.greentext = QtGui.QPushButton(self.trUtf8('Зеленый'), self) 
     self.greentext.setCheckable(False) 
     self.greentext.move(10, 90) 
     self.greenspinbox = QtGui.QSpinBox(self) 
     self.greenspinbox.setEnabled(False) 
     self.greenspinbox.setMinimum(0) 
     self.greenspinbox.setMaximum(255) 
     self.greenspinbox.move(110, 162) 
     self.greenspinbox.setValue(0) 
     self.greenslider = QtGui.QSlider(QtCore.Qt.Horizontal, self) 
     self.greenslider.setMinimum(0) 
     self.greenslider.setMaximum(255) 
     self.greenslider.setGeometry(160, 166, 255, 14)   
     self.connect(self.greenslider,QtCore.SIGNAL('sliderMoved(int)'),self.greenspinbox,QtCore.SLOT('setValue(int)')) 

     self.bluetext = QtGui.QPushButton(self.trUtf8('Синий'), self) 
     self.bluetext.setCheckable(False) 
     self.bluetext.move(10, 160) 
     self.bluespinbox = QtGui.QSpinBox(self) 
     self.bluespinbox.setEnabled(False) 
     self.bluespinbox.setMinimum(0) 
     self.bluespinbox.setMaximum(255) 
     self.bluespinbox.move(110, 92) 
     self.bluespinbox.setValue(0) 
     self.blueslider = QtGui.QSlider(QtCore.Qt.Horizontal, self) 
     self.blueslider.setMinimum(0) 
     self.blueslider.setMaximum(255) 
     self.blueslider.setGeometry(160, 96, 255, 14) 
     self.connect(self.blueslider,QtCore.SIGNAL('sliderMoved(int)'),self.bluespinbox,QtCore.SLOT('setValue(int)')) 

     self.connect(self.redslider,QtCore.SIGNAL('sliderMoved(int)'), self.ColorChanged(int)) 



    def ColorChanged(self): 
     r=self.redslider.value() 
     g=self.greenslider.value() 
     b=self.blueslider.value() 
     str_col = str 
     str_col+="QPlainTextEdit{background-color:rgb("+str.r+","+str.g+","+str.b+")}"+")}" 
     self.square.setStyleSheet(str_col) 




app = QtGui.QApplication(sys.argv) 
cv = ColorViewer() 
cv.show() 
app.exec_() 

И у меня есть следующее сообщение об ошибке:

Traceback (most recent call last): 
    File "C:\Python34\colorwidget.py", line 91, in <module> 
    cv = ColorViewer() 
    File "C:\Python34\colorwidget.py", line 75, in __init__ 
    self.connect(self.redslider,QtCore.SIGNAL('sliderMoved(int)'), self.ColorChanged(int)) 
TypeError: ColorChanged() takes 1 positional argument but 2 were given 

Я пытался несколько способов, но я думаю, что простое решение моей задачи. Как это исправить?

+0

Вы называешь g 'ColorChanged' с двумя аргументами,' int' (плюс 'self'), но ваш метод' ColorChanged' принимает только один аргумент ('self'). – 101

ответ

0

Хорошо, я нахожу решение.

Мы изменяем

self.connect(self.redslider,QtCore.SIGNAL('sliderMoved(int)'), self.ColorChanged(int)) 

в

self.connect(self.redslider,QtCore.SIGNAL('sliderMoved(int)'), self.ColorChanged) 

и

str_col+="QPlainTextEdit{background-color:rgb("+str.r+","+str.g+","+str.b+")}"+")}" 

в

str_col=("QPlainTextEdit{background-color:rgb(" + str(r) + "," + str(g) + "," + str(b) + ")}") 
Смежные вопросы