PyQT - модификация виджетов главного окна из других функций

1

Начальный вопрос PyQT. Мне интересно, как сделать что-то вроде следующего - изменить виджеты в главном окне вне класса основного окна. Например:

class MainWindow(QtGui.QMainWindow):    

    def __init__(self, parent=None):

        super(MainWindow,self).__init__(parent)

        self.ui = Ui_MainWindow()        
        self.ui.setupUi(self)

        self.ui.progressBar.setMaximum(100)
        self.ui.progressBar.setMinimum(0)
        self.ui.progressBar.setValue(0)

        self.connect(self.ui.pushButton, QtCore.SIGNAL('clicked()'), self.slotDoStuff)

    def slotDoStuff(self):
        AnotherFunction()


def AnotherFunction():    
    modify progress bar here...

Есть ли способ сделать что-то подобное? Я хотел бы подклассифицировать обработчики событий для различных действий главного окна и не иметь их всех в классе MainWindow. Спасибо!

Теги:
pyqt

1 ответ

3
Лучший ответ

Во-первых, есть гораздо лучший способ подключения сигналов к слотам на PyQt:

self.button.clicked.connect(self.method)

Вы можете использовать лямбда-функции для передачи дополнительных аргументов методам.

def do_stuff(arg)
     #do stuff with arg

Затем вы вызываете

self.button1.clicked.connect(lambda : do_stuff('btn one'))
self.button2.clicked.connect(lambda : do_stuff('btn two'))

Вы можете передать все, что хотите, включая экземпляр MainWindow, который будет изменен

  • 0
    Спасибо, лямбда-трюк очень крутой! :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню