Найти - Пользователи
Полная версия: Конвертация docx в doc ч.2 - Передача переменной
Начало » Python для новичков » Конвертация docx в doc ч.2 - Передача переменной
1
Ethex
Доброго времени суток
Вопрос явно ламерский, но своими силами разобраться не получается
Имеется форма, на которой:
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 вызывалась вновь, а это не то что нужно
Rodegast
 self.directory = QtWidgets.QFileDialog.getExistingDirectory(self, 'Выберите папку')
self.lineEdit.setText(self.directory)
....
Ethex

Rodegast
self.lineEdit.setText(self.directory)
Такой способ срабатывал у меня
А с помощью return?
PEHDOM
Ethex
А с помощью return?
если уж так хочеццо через return
 def selectFolder(self):
    self.lineEdit.setText(self.browseFolder())
только тогда вам нужно цеплять на pushButton.clicked не browseFolder, а selectFolder, а в runConvert передавать не self.browseFolder() а self.lineEdit.text()
Ethex
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()

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