Уведомления

Группа в Telegram: присоединиться

#1 Июнь 13, 2018 14:07:45

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

Конвертация docx в doc ч.2 - Передача переменной

Доброго времени суток
Вопрос явно ламерский, но своими силами разобраться не получается
Имеется форма, на которой:
lineEdit - 1 шт.
pushButton - 2 шт.
Задача формы - позволить выбрать путь к каталогу нажатием одной кнопки; вывести путь в текстовое поле; конвертировать docx в doc внутри каталога
Код (орфография и пунктуация полностью сохранены):

 from PyQt5 import QtWidgets
import d2
class ExampleApp(QtWidgets.QMainWindow, d2.Ui_MainWindow):
      def __init__(self):
            super().__init__()
            self.setupUi(self)
            self.pushButton.clicked.connect(self.browseFolder)
            self.pushButton_2.clicked.connect(self.runConvert)
            
      def browseFolder(self):
            directory = QtWidgets.QFileDialog.getExistingDirectory(self, 'Выберите папку')
            if directory:
                  #self.lineEdit.setText(directory)
                  return directory
                  #global directory
                  
      def convertDocs(self, directory):
            import win32com.client as win32
            import os
            #directory = self.browseFolder()
            print(directory)
            os.chdir(directory)
            word = win32.Dispatch('Word.Application')
            for file_name in os.listdir(os.getcwd()):
                  if file_name.endswith('docx'):
                        fn = os.path.join(os.getcwd(), file_name)
                        wDoc = word.Documents.Open(fn)
                        wDoc.SaveAs2(fn[0:-4] + 'doc', FileFormat = 0)
                        wDoc.Close()
            word.Quit()
      
      def runConvert(self):
             self.convertDocs(self.browseFolder())
def m2():
      app = QtWidgets.QApplication(sys.argv)
      window = ExampleApp()
      window.show()
      app.exec_()
if __name__ == '__main__':
      m2()
Нужного мне результата получлось достичь с помощью
 global directory
В функции browseFolder. Также получалось, присвоив переменной directory значение текстового поля. Однако, я захотел знать как достичь того же с помощью return. Пробовал и объявить третью функцию (runConvert), и присваивал переменной directory внутри convertDocs, и устанавливал self.browseFolder значением по умолчанию второго аргумента convertDocs. Всё чего сумел добиться - нажатием на вторую кнопку browseFolder вызывалась вновь, а это не то что нужно

Отредактировано Ethex (Июнь 13, 2018 14:09:14)

Офлайн

#2 Июнь 13, 2018 14:32:11

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

Конвертация docx в doc ч.2 - Передача переменной

 self.directory = QtWidgets.QFileDialog.getExistingDirectory(self, 'Выберите папку')
self.lineEdit.setText(self.directory)
....



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

Офлайн

#3 Июнь 13, 2018 14:35:50

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

Конвертация docx в doc ч.2 - Передача переменной


Rodegast
self.lineEdit.setText(self.directory)
Такой способ срабатывал у меня
А с помощью return?

Офлайн

#4 Июнь 13, 2018 15:44:38

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 862
Репутация: +  156  -
Профиль   Отправить e-mail  

Конвертация docx в doc ч.2 - Передача переменной

Ethex
А с помощью return?
если уж так хочеццо через return
 def selectFolder(self):
    self.lineEdit.setText(self.browseFolder())
только тогда вам нужно цеплять на pushButton.clicked не browseFolder, а selectFolder, а в runConvert передавать не self.browseFolder() а self.lineEdit.text()

Отредактировано PEHDOM (Июнь 13, 2018 15:44:48)

Офлайн

#5 Июнь 13, 2018 15:50:59

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

Конвертация docx в doc ч.2 - Передача переменной

PEHDOM, раз так, то меня устроит мой изначальный вариант

 def browseFolder(self):
            directory = QtWidgets.QFileDialog.getExistingDirectory(self, 'Выберите папку')
            if directory:
                  self.lineEdit.setText(directory)
                                    
      def convertDocs(self, directory):
            import win32com.client as win32
            import os
            directory = self.lineEdit.text()
            print(directory)
            os.chdir(directory)
            word = win32.Dispatch('Word.Application')
            for file_name in os.listdir(os.getcwd()):
                  if file_name.endswith('docx'):
                        fn = os.path.join(os.getcwd(), file_name)
                        wDoc = word.Documents.Open(fn)
                        wDoc.SaveAs2(fn[0:-4] + 'doc', FileFormat = 0)
                        wDoc.Close()
            word.Quit()

Просто почему-то подумал, что обращение к элементам управления не очень грамотно

Отредактировано Ethex (Июнь 13, 2018 15:51:38)

Офлайн

#6 Июнь 13, 2018 16:57:14

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 862
Репутация: +  156  -
Профиль   Отправить e-mail  

Конвертация docx в doc ч.2 - Передача переменной

Ethex
Просто почему-то подумал, что обращение к элементам управления не очень грамотно
ну в данном случае это оправдано, так как пользователь может не нажимать кнопку “обзор”, а ввести путь вручную или скопировать его из буфера обмена. А если хотите чтобы путь хранился в неком атрибуте self.directory то придеться вешать на сигнал textChanged лайнЕдита процедуру которая будет обновлять
self.directory при изменении лайнелита. Или запрещать редактирование лайнЕдита, чтоб только через кнопку выбирался путь..

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version