Найти - Пользователи
Полная версия: PyQt5| По прогрессбару
Начало » GUI » PyQt5| По прогрессбару
1
Ethex
Доброго времени суток
Говорю сразу, в pyqt5 щи лаптем хлебаю (как, впрочем, в программировании в целом)
У меня есть программа, в которой имеет место цикл по файлам. Есть окно, созданное в qt designer, содержащее две кнопки и текстовое поле. Я решил дополнить программу прогрессбаром. Мне удалось это сделать, добавив прогрессбар на окно. Далее, я захотел чтобы шкала появлялась только с началом цикла по файлам и решил создать ещё одно окно с прогрессбаром, которое появлялось бы в нужный момент
 import sys
import launchForm
import progressbar
from PyQt5 import QtWidgets
class launch(QtWidgets.QMainWindow, launchForm.Ui_MainWindow):
      def __init__(self):
            super().__init__()
            self.setupUi(self)
            self.pushButton.clicked.connect(self.fileDialog)
            self.pushButton_2.clicked.connect(self.convert)
      def fileDialog(self):
            directory = QtWidgets.QFileDialog.getExistingDirectory(self, 'Выбери папку')
            if directory:
                  self.lineEdit.setText(directory)
      def convert(self):
            import os
            import win32com.client as win32
            self.directory = self.lineEdit.text()
            os.chdir(self.directory)
            self.word = win32.Dispatch('Word.Application')
            maxBar = len(os.listdir(os.getcwd()))
            #global maxBar
            #self.bar = progressbar()
            #self.bar.show()
            i = 1
            for file in os.listdir(os.getcwd()):
                  if file.endswith('docx'):
                        self.fn = os.path.join(os.getcwd(), file)
                        self.wDoc = self.word.Documents.Open(self.fn)
                        self.wDoc.SaveAs2(self.fn[0:-4] + 'doc', FileFormat = 0)
                        self.wDoc.Close()
                  i = i + 1
                  self.bar = progressbar()
                  self.bar.show()
                  progressbar().progressRun(maxBar, i)
            self.word.Quit()
                        
      #def showBar():
            #self.bar = progressbar()
            #self.bar.show()
            
class progressbar(QtWidgets.QDialog, progressbar.Ui_Dialog):
      def __init__(self):
            super().__init__()
            self.setupUi(self)
      def progressRun(self, maxBar, i):
            self.progressBar.setMaximum(maxBar)
            self.progressBar.setValue(i)
            
     
def ui():
      app = QtWidgets.QApplication(sys.argv)
      window = launch()
      window.show()
      app.exec_()
if __name__ == '__main__':
      ui()
Я попробовал вызывать методы класса из класса с циклом. В итоге программа выполнялась, исключений не возникало, однако окно с прогрессбаром отображалось не должным образом во время выполнения (прикреплённый файл)
Скажите, как было бы правильно организовать таковую задумку?
ИЛИ
Что было бы ещё лучше. Сделать так, чтобы прогрессбар находился на ТОМ ЖЕ САМОМ, но тем или иным образом был скрыт, и появлялся бы только когда это требуется
Rodegast
> Сделать так, чтобы прогрессбар находился на ТОМ ЖЕ САМОМ, но тем или иным образом был скрыт, и появлялся бы только когда это требуется

Метод hide скрывает, а show показывает виджет.
 self.word
Не надо word тащить в экземпляр класса.
Ethex
Rodegast, сработало. А чтобы грамотно реализовать вариант с всплывающим окном, мне нужно про модальные окна читать?
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB