Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Python: Разработка GUI > QProgressDialog


Автор: OzMod 12.1.2017, 13:16
Как привязать Функцию к QProgressDialog..
Скажем после нажатия кнопки Test из нижеприведенного исходника, срабатывала скажем функция f() привязаная к QProgressDialog…
#———————————————————————–
Код

import sys, time
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.button = QtGui.QPushButton('Test', self)
        self.button.clicked.connect(self.handleButton)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.button)

#-----------------------------------------------------------------------------------------------

    def f(self):
        for x in range(150):
            print (x)   
#-----------------------------------------------------------------------------------------------

    def handleButton(self):
        file = range(100)
        numberOfLinesInFile = len(file)
        progressWasCancelled = False
        progress = QtGui.QProgressDialog("Parsing Log", "Stop", 0, numberOfLinesInFile, self)
        progress.setWindowModality(QtCore.Qt.WindowModal)
        progress.setMinimumDuration(0)
        for lineNumber, line in enumerate(file):
            progress.setValue(lineNumber)
            if progress.wasCanceled():
                progressWasCancelled = True
                break
            time.sleep(0.10)
        progress.setValue(numberOfLinesInFile)
        print ('cancelled', progress.wasCanceled(), progressWasCancelled)
        progress.deleteLater()

#------------------------------------------------------------------------------------------------

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

Автор: Romikgy 12.1.2017, 13:27
Цитата(OzMod @  12.1.2017,  12:16 Найти цитируемый пост)
Скажем после нажатия кнопки Test из нижеприведенного исходника, срабатывала скажем функция f()

когда именно должна срабатывать эта ф-ция?

так?
Код

    def handleButton(self):
        file = range(100)
        numberOfLinesInFile = len(file)
        progressWasCancelled = False
        progress = QtGui.QProgressDialog("Parsing Log", "Stop", 0, numberOfLinesInFile, self)
        progress.setWindowModality(QtCore.Qt.WindowModal)
        progress.setMinimumDuration(0)
        for lineNumber, line in enumerate(file):
            progress.setValue(lineNumber)
            if progress.wasCanceled():
                progressWasCancelled = True
                break
            time.sleep(0.10)
        progress.setValue(numberOfLinesInFile)
        print ('cancelled', progress.wasCanceled(), progressWasCancelled)
        progress.deleteLater()
        self.f()

Автор: OzMod 12.1.2017, 13:37
Romikgy, мне нужно что бы индикатор QProgressDialog шел пока выполняется функция f()
----------------------------------------------------------------------------------------------------------------------------------
Вообщем нужно  что бы  индикатор  подсчитал выполнение функции... 

Автор: OzMod 12.1.2017, 14:49
Romikgy, Индикатор и процесс функции f() должны выполняться одновременно, то есть индикатор должен отслеживать процесс выполнения функции f()

Автор: Romikgy 12.1.2017, 14:50
так ?
Код

    def f(self,p):
        for x in range(150):
            print (x) 
            p.setValue(x)
            time.sleep(0.10)
            if p.wasCanceled(): break
            
#-----------------------------------------------------------------------------------------------
    def handleButton(self):
        file = range(100)
        numberOfLinesInFile = len(file)
        progressWasCancelled = False
        progress = QtGui.QProgressDialog("Parsing Log", "Stop", 0, numberOfLinesInFile, self)
        progress.setWindowModality(QtCore.Qt.WindowModal)
        progress.setMinimumDuration(0)
        self.f(progress)
        # for lineNumber, line in enumerate(file):
            # progress.setValue(lineNumber)
            # if progress.wasCanceled():
                # progressWasCancelled = True
                # break
            # time.sleep(0.10)
        progress.setValue(numberOfLinesInFile)
        print ('cancelled', progress.wasCanceled(), progressWasCancelled)
        progress.deleteLater()

Автор: OzMod 13.1.2017, 16:14
Romikgy, Cпасибо БОЛЬШОЕ! 
---------------------------------------------------

Автор: OzMod 2.4.2017, 00:31
помогите как мне решить одну проблему, не могу привязать очередную функцию к QProgressDialog!
Как привязать выполнение функции f() из примера показанного ниже  к QProgressDialog? 
----------------------------------------------------------------
Код

import sys, time, shutil, base64, zlib
from PyQt4 import QtGui, QtCore
class Window(QtGui.QWidget):
    def __init__(self):
        QtGui.QWidget.__init__(self)
        self.button = QtGui.QPushButton('Запустить процесс', self)
        self.button.clicked.connect(self.handleButton)
        layout = QtGui.QVBoxLayout(self)
        layout.addWidget(self.button)
#-----------------------------------------------------------------------------------------------
    def f(self):
        CodeOF = open("mypdf.pdf","rb")
        CodeRF = CodeOF.read()
        CodeOF.close()
        #---------------------------
        EncodeBase64 = base64.b64encode(CodeRF)
        #---------
        CompressDATE = zlib.compress(EncodeBase64)
        #---------
        CodeOF = open("mypdf.pdf","wb")
        CodeOF.write(CompressDATE)
        CodeOF.close()
        shutil.os.renames("mypdf.pdf","mypdf.pdf"+r".OzKEY")
#-----------------------------------------------------------------------------------------------
    def handleButton(self):
        file = range(100)
        numberOfLinesInFile = len(file)
        progressWasCancelled = False
        progress = QtGui.QProgressDialog("Статус выполнения", None, 0, numberOfLinesInFile, self)
        progress.setWindowModality(QtCore.Qt.WindowModal)
        progress.setMinimumDuration(0)
        for lineNumber, line in enumerate(file):
            progress.setValue(lineNumber)
            if progress.wasCanceled():
                progressWasCancelled = True
                break
            time.sleep(0.10)
        progress.setValue(numberOfLinesInFile)
        print ('cancelled', progress.wasCanceled(), progressWasCancelled)
        progress.deleteLater()

if __name__ == '__main__':
    app = QtGui.QApplication(sys.argv)
    window = Window()
    window.show()
    sys.exit(app.exec_())

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)