Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 15, 2018 15:30:16

Ethex
Зарегистрирован: 2017-10-19
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt5| По прогрессбару

Доброго времени суток
Говорю сразу, в 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()
Я попробовал вызывать методы класса из класса с циклом. В итоге программа выполнялась, исключений не возникало, однако окно с прогрессбаром отображалось не должным образом во время выполнения (прикреплённый файл)
Скажите, как было бы правильно организовать таковую задумку?
ИЛИ
Что было бы ещё лучше. Сделать так, чтобы прогрессбар находился на ТОМ ЖЕ САМОМ, но тем или иным образом был скрыт, и появлялся бы только когда это требуется

Прикреплённый файлы:
attachment Безымянный.bmp (1004,9 KБ)

Офлайн

#2 Июнь 15, 2018 16:33:15

Rodegast
От: Пятигорск
Зарегистрирован: 2007-12-28
Сообщения: 2679
Репутация: +  182  -
Профиль   Отправить e-mail  

PyQt5| По прогрессбару

> Сделать так, чтобы прогрессбар находился на ТОМ ЖЕ САМОМ, но тем или иным образом был скрыт, и появлялся бы только когда это требуется

Метод hide скрывает, а show показывает виджет.

 self.word
Не надо word тащить в экземпляр класса.



С дураками и сектантами не спорю, истину не ищу.
Ели кому-то правда не нравится, то заранее извиняюсь.

Офлайн

#3 Июнь 15, 2018 17:03:21

Ethex
Зарегистрирован: 2017-10-19
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

PyQt5| По прогрессбару

Rodegast, сработало. А чтобы грамотно реализовать вариант с всплывающим окном, мне нужно про модальные окна читать?

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version