PyQT - модификация виджетов главного окна из других функций - PullRequest
2 голосов
/ 17 мая 2011

Вопрос новичка в 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.Спасибо!

1 Ответ

4 голосов
/ 17 мая 2011

Во-первых, есть гораздо лучший способ подключения сигналов к слотам в 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, который будет изменен

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...