Combobox w PyQT4 nie działa prawidłowo

0

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
0

Hej,
Po pierwsze interpreter a nie kompilator ;) Po drugie jak błąd mówi wywołujesz metodę width_change bez argumentu, a jak widzę przyjmuje ona argument text.

Pozdr

0

Hmm, odpaliłem kod na centosie 6.6 x64 i działa. Btw jak importujesz biblioteki to słówko "from" piszemy z małej literki :) Mi wywalił syntax error.

Pozdr

0

To from poprawiłem przypadkiem bo mi zjadło przy wklejaniu kodu xD Ten kod który udostępniłem na forum to tylko kawałek mojego programu i być może błąd jest gdzieś w innym miejscu. Dodam cały kod programu w załączniku, może w coś innego generuje problem. Ogólnie program ma działać jako edytor grafiki wektorowej, ma pozwalać na rysowanie lini, figur geometrycznych itd. W pliku main zawarłem podstawowy interfejs tj. menubar, toolbar z narzędziami(po lewej stronie) i okno główne, które wyświetla scenę(QGraphics View). W drugim module mam wszystko to co wiąże się z rysowaniem linii tj. funkcję rysującą, klasę zapewniającą opcje undo/redo i dodatkowy toolbar, który zawiera opcje dotyczące rysowania linii(w tej chwili to zmiana kolorów i ten nieszczęsny combobox z wyborem szerokości).Toolbar pojawia się tylko po kliknięciu w opcję rysowania linii. Chciałbym aby struktura plików pozostałą niezmienna, bo w taki sam sposób chciałem pododawać inne narzędzia rysujące, które będą miały osobne toolbary z opcjami. Jeśli komuś chciałoby się przejrzeć ten kod i wskazać mi gdzie tkwi błąd to będę bardzo wdzięczny.

0

Poprawiłem to co nie działało. Teraz się uruchamia, ale kilka rzeczy masz do poprawy.

1 użytkowników online, w tym zalogowanych: 0, gości: 1