Форум программистов, компьютерный форум, киберфорум
Python: GUI, графика
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
2 / 2 / 0
Регистрация: 16.03.2020
Сообщений: 57
1

Вызов функции из потока в другом файле

16.03.2020, 23:20. Показов 1502. Ответов 1
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте! Помогите начинающему.

Я создал класс class ExampleA(QMainWindow) и написал функцию, которая автоматически открывает файл эксель, считывает его в память и определяет количество заполненных строк на первой странице. Если файл эксель отсутствует, то ПОЯВЛЯЕТСЯ ДИАЛОГОВОЕ ОКНО с предложением указать путь к файлу. Если пользователь не хочет указывать путь, то он закрывает это окно и функция возвращает "Exit".

Программа работает, но как сделать так, чтоб можно было вызывать эту функцию из другого файла? Особенно из отдельного потока? И чтоб при завершении работы функции, главная программа не прекращала работу? Функция должна передать значения в поток.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
import sys, openpyxl
from PyQt5.QtWidgets import (QMainWindow, QFileDialog, QMessageBox, QApplication,)
 
class ExampleA(QMainWindow):
 
    def __init__(self):
        super().__init__()
        #self.show()
        self.initUI()
 
    def initUI(self):
        self.BOOK, self.N, self.wb_obj = self.OpenBook()
        print(self.N)
        sys.exit()
 
    def OpenBook(self):  # Функция возвращает таблицу эксель и количество строк таблицы
        self.path = "AAA.xlsx"
        self.BOOK = 'error'  # Проверка успешного открытия книги
        while self.BOOK == 'error':
            try:
                self.wb_obj = openpyxl.load_workbook(self.path)  # Считываем книгу эксель в переменную wb_obj
                self.BOOK = self.wb_obj.active
                self.N = self.BOOK.max_row                      # Определяем количество строк таблицы
            except:
                try:
                    self.path = self.showDialog().name  # Если адрес файла получен
                    self.wb_obj = openpyxl.load_workbook(self.path)  # Считываем книгу эксель в переменную wb_obj
                    self.BOOK = self.wb_obj.active
                    self.N = self.BOOK.max_row  # Определяем количество строк таблицы
                except:
                    # Если адрес файла не получен
                    self.BOOK = 'exit'
                    self.N = 'exit'
                    self.wb_obj = 'exit'
 
        return self.BOOK, self.N, self.wb_obj
 
    def showDialog(self):
        self.f = 'error'
        while self.f == 'error':
 
            try:
                fname = QFileDialog.getOpenFileName(self, 'Open file')[0]
                self.f = open(fname)  # Адрес файла получен
 
 
 
            except:
                buttonReply = QMessageBox.question(self, 'Не удалось открыть книгу!!!',
                                                   "Для повторной попытки открыть книгу нажмите 'YES'"
                                                   "\n\nДля выхода нажмите 'CANCEL'",
                                                   QMessageBox.Yes | QMessageBox.Cancel)
 
                if buttonReply == QMessageBox.Yes:
                    self.f = 'error'
 
                if buttonReply == QMessageBox.Cancel:
                    self.f = ''
 
        return self.f
 
app = QApplication(sys.argv)
ex = ExampleA()
ex.show()
sys.exit(app.exec_())
Добавлено через 25 минут
Это основной файл. Когда я его запускаю появляется окно и запускается поток, который должен вызвать открывающую книгу эксель функцию, из другого файла - TP1.py, который я представил в первом сообщении.

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
from PyQt5.QtWidgets import QVBoxLayout
 
import sys
from PyQt5.QtWidgets import (QMainWindow, QTextEdit, QApplication)
from PyQt5.QtCore import QThread, pyqtSignal
 
#from TP1 import ExampleA # Пытаюсь подключить функцию из другого файла
 
class Example(QMainWindow):
 
    def __init__(self):
        super().__init__()
 
        self.initUI()
 
 
    def initUI(self):
        self.statusBar().showMessage('Ready')
        self.setGeometry(600, 600, 250, 150)
        self.setWindowTitle('РАБОТА С EXCEL')
 
        self.textEdit = QTextEdit()
        self.setCentralWidget(self.textEdit)
 
        self.show()
 
        self.value = 0
        self.valuetext = 0
 
 
        vbox = QVBoxLayout()
        vbox.addWidget(self.textEdit)
        self.setLayout(vbox)
 
        self.launch_UpdateText() #Запуск отдельного процесса
 
 
    def launch_UpdateText(self):
 
        self.textv = UpdateText(self)
        self.textv.update_text.connect(self.updateTEXT)
        self.textv.start()
 
 
    def updateTEXT(self, valuetext):
        self.textEdit.append(str(valuetext)) #добавляет текст и переносит курсор на строку ниже
 
 
class UpdateText(QThread):  #ОТДЕЛЬНЫЙ ПРОЦЕСС
    update_text = pyqtSignal(str)
    def __init__(self, parent=None):
        super().__init__()
 
    def run(self):
 
        self.update_text.emit("Через 2 секунды откроем книгу эксель")
        QThread.msleep(2000)
        self.update_text.emit("КОЛИЧЕСТВО СТРОК В КНИГЕ:")
        QThread.msleep(2000)
 
        #self.BOOK, self.N, self.wb_obj = ExampleA.OpenBook(self)
        #self.update_text.emit(str(self.N))
 
 
 
 
if __name__ == '__main__':
 
    app = QApplication(sys.argv)
    ex = Example()
    ex.show()
 
    sys.exit(app.exec_())
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
16.03.2020, 23:20
Ответы с готовыми решениями:

Вызов функции одного потока в другом
Есть у меня приложение (игра аля GTA SA). И в ее mainloop вклинил свою функцию (то есть получается...

Вызов функции в другом исполняемом файле
Привет всем. Вопрос такой. Есть исполняемый файл.У которого есть некоторая полезная нагрузка....

Вызов конкретной функции в другом файле .php
Добрый день. Пишу форму входа на сайт. Она работает. При авторизации я реализовал возможность...

Groovy - Вызов в файле метода описанного в другом файле
Вот код загрузки файла в Groovy взятый из книги Башар Абдул-Джавада ... (с небольшой правкой)...

Как из потока управлять формой, если функции потока находятся в другом классе?
Добрый вечер. Возник такой вопрос, никак не могу разобраться. Как из потока управлять формой,...

1
1290 / 675 / 365
Регистрация: 07.01.2019
Сообщений: 2,273
17.03.2020, 09:23 2
В каждом файле создается QApplication и запускается, QApplication должен быть только один, в главном файле должен создаваться второй класс
0
17.03.2020, 09:23
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
17.03.2020, 09:23
Помогаю со студенческими работами здесь

Вызов метода класса, расположенного в другом файле
У нас есть 2 файла ->Sourse.cpp and Sourse.h /*Sourse.cpp*/ #include...

Вызов метода класса в другом файле, не обращаясь к самому классу
Всех приветствую. Есть такой код: class CPlainInsteadView : public CFormView { protected: //...

Можно ли на javascript'e в одном js-файле использовать функции, описанные в другом js-файле?
Подскажите, плз, можно ли на javascript'e в одном js-файле использовать функции, описанные в другом...

Вызов функции из потока
Доброго времени суток! Подскажите пожалуйста, есть функция чтения данных из файла: DWORD WINAPI...

Вызов функции из потока
Добрый день! Есть задание по курсовой: Вызов из разных потоков функций чтения из файла. Функции...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru