Уведомления

Группа в Telegram: @pythonsu

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

Ethex
Зарегистрирован: 2017-10-19
Сообщения: 28
Репутация: +  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
Сообщения: 2682
Репутация: +  182  -
Профиль   Отправить 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
Сообщения: 28
Репутация: +  0  -
Профиль   Отправить e-mail  

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


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

Офлайн

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

PEHDOM
Зарегистрирован: 2016-11-28
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить 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()



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

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

Офлайн

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

Ethex
Зарегистрирован: 2017-10-19
Сообщения: 28
Репутация: +  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
Сообщения: 2196
Репутация: +  294  -
Профиль   Отправить e-mail  

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

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



==============================
Помещайте код в теги:
[code python][/code]
Бериегите свое и чужое время.

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version