Wie kann ich die QPushbutton in Pyside Subklasse, aber erfordern ein arg. In meinem Beispiel brauche ich arg als Liste von Ints [0,0,0].Unterklasse QPushbutton mit verschiedenen Argumenten
Mein Ziel ist es so zu machen, i MyButton wie folgt zu erstellen:
# GOAL
MyButton([0,255,0])
Wenn die arguement die Liste der Werte enthält, in übergeben wird, sollte er den Wert self._data gesetzt. Ich bin mir nicht sicher, ob ich dieses Setup richtig eingerichtet habe, daher werden Korrekturen gerne gesehen.
class MyButton(QtGui.QPushButton):
def __init__(self, *args, **kwargs):
super(MyButton, self).__init__(*args, **kwargs)
self._data = stuff
@property
def data(self):
return self._data
@data.setter
def data(self, value):
self._data = value
MyButton([0,255,0])
Aktualisiert: Ich dachte, dann bemerkt, wenn ich diesen Wert in meine Init übergeben Sie es nicht den Setter auszulösen für diese Eigenschaft angezeigt wird ?? Warum das? Wenn Sie den folgenden Code testen, wird die Farbe der Schaltfläche bei der Instanziierung nicht angezeigt. Wie repariere ich das?
import os
import sys
import json
from PySide import QtCore, QtGui
class QColorSwatch(QtGui.QPushButton):
colorClicked = QtCore.Signal(list)
colorChanged = QtCore.Signal(list)
def __init__(self, stuff, *args, **kwargs):
super(QColorSwatch, self).__init__(*args, **kwargs)
self._color = stuff
self.setMaximumWidth(22)
self.setMaximumHeight(22)
self.setAutoFillBackground(True)
self.pressed.connect(self.color_clicked)
@property
def color(self):
return self._color
@color.setter
def color(self, value):
self._color = value
pixmap = QtGui.QPixmap(self.size())
pixmap.fill(QtGui.QColor(value[0], value[1], value[2]))
self.setIcon(pixmap)
self.colorChanged.emit(value)
# swatch.setIconSize(pixmap.size() - QtCore.QSize(6,6))
def color_clicked(self):
self.colorClicked.emit(self.color)
class ExampleWindow(QtGui.QMainWindow):
def __init__(self, parent=None):
super(ExampleWindow, self).__init__(parent)
self.resize(300, 200)
self.ui_swatch = QColorSwatch([255,0,0])
# main layout
main_layout = QtGui.QVBoxLayout()
main_layout.setContentsMargins(5,5,5,5)
main_layout.setSpacing(5)
main_layout.addWidget(self.ui_swatch)
main_widget = QtGui.QWidget()
main_widget.setLayout(main_layout)
self.setCentralWidget(main_widget)
# Signals
self.ui_swatch.colorClicked.connect(self.color_clicked)
self.ui_swatch.colorChanged.connect(self.color_changed)
def color_clicked(self, col):
print 'CLICKED:', col
self.ui_swatch.color = [255,0,0]
def color_changed(self, col):
print 'CHANGED:', col
def main():
app = QtGui.QApplication(sys.argv)
ex = ExampleWindow()
ex.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()
Sie sind überall :) Danke für Ihre Hilfe – JokerMartini
Ich bemerkte es nicht die Farbe der Schaltfläche, um richtig eingestellt, obwohl scheint meine Daten auszulösen. – JokerMartini
@JokerMartini Ich habe bereits meine Antwort aktualisiert. – eyllanesc