Witam,
tworzę aplikację, która ma być prostym edytorem grafiki wektorowej. Aplikację piszę w pythonie, a GUI tworzę w PyQT 4. Chcę stworzyć toolbar, który będzie inny dla każdego narzędzia i w którym będzie można wybrać kolor, grubość, styl itd. Udało mi się zaimplementować zmianę koloru natomiast mam problem ze zmianą grubości. Chciałem do tego celu wykorzystać comboboxa, który zależnie od wybranej pozycji ustawiał by grubość pędzla. Rzecz wydaje się trywialna, lecz niestety nie mogę dać sobie z nią rady. Stworzyłem Comboboxa, dodałem do niego Itemy, całość podłączyłem do funkcji width_change, gdzie znajduje się wyrażenie warunkowe zmieniające wartość zmiennej Toolbar.width zależnie od wybranej opcji. Niestety kompilator wyrzuca błąd:* TypeError: width_change() missing 1 required positional argument: 'text' *. Konstrukcja ta zawsze działała, nie wiem czemu nie działa w tym przypadku. Dołączam kod toolbara, żeby lepiej zobrazować sytuację. Proszę o pomoc lub o jakieś wskazówki, gdzie tkwi błąd.
From PyQt4 import QtGui, QtCore
class Toolbar(QtGui.QMainWindow):
frame = None
color = None
width = 1
def __init__(self):
QtGui.QMainWindow.__init__(self)
self.show()
def toolbar_line(self):
col = QtGui.QColor(0, 0, 0)
combo_style = QtGui.QComboBox(self)
combo_width = QtGui.QComboBox()
combo_width.addItem("width 1")
combo_width.addItem("width 2")
combo_width.addItem("width 3")
combo_width.addItem("width 4")
combo_width.addItem("width 5")
combo_width.activated[str].connect(Toolbar.width_change)
combo_ending = QtGui.QComboBox(self)
color_dialog = QtGui.QAction("Wybierz Kolor", self)
color_dialog.triggered.connect(Toolbar.color_change)
Toolbar.frame = QtGui.QFrame(self)
Toolbar.frame.setFixedSize(40,40)
Toolbar.frame.setStyleSheet("QWidget { background-color: %s }"
% col.name())
toolbar_line = QtGui.QToolBar("Line properties")
toolbar_line.addWidget(combo_style)
toolbar_line.addWidget(combo_width)
toolbar_line.addWidget(combo_ending)
toolbar_line.addAction(color_dialog)
toolbar_line.addWidget(Toolbar.frame)
toolbar_line.setOrientation(QtCore.Qt.Horizontal)
toolbar_line.setAllowedAreas(QtCore.Qt.TopToolBarArea)
toolbar_position = self.addToolBar(QtCore.Qt.TopToolBarArea, toolbar_line)
toolbar_line.setVisible(True)
def color_change(self):
col = QtGui.QColorDialog.getColor()
Toolbar.color = col.name()
if col.isValid():
Toolbar.frame.setStyleSheet("QWidget { background-color: %s }"
% col.name())
def width_change(self, text):
if text == "width 1":
Toolbar.width = 1
if text == "width 2":
Toolbar.width = 2
if text == "width 3":
Toolbar.width = 3
if text == "width 4":
Toolbar.width = 4
if text == "width 5":
Toolbar.width = 5