python и pyqt5 - проходить через переменную после нажатия кнопки - PullRequest
0 голосов
/ 12 апреля 2020

У меня есть 2 py-файла: my.py (это мой py, созданный из ui-скрипта, где у меня есть windows и строка ввода, кнопки) и vat.py (это второй скрипт, который нужно запустить, когда pushButton_2 нажата). Я хотел бы запустить все строки из сценария vat, но my.py необходимо передать некоторые переменные в vat.py. Это проблема - как я могу это сделать?

my.py

    # -*- coding: utf-8 -*-
# Created by: PyQt5 UI code generator 5.13.2
#
# WARNING! All changes made in this file will be lost!

#import vat

import os
import openpyxl

from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QFileDialog, QMessageBox, QDialog, QInputDialog


global glob
glob = "empty"

class Ui_MainWindow(QtWidgets.QWidget):

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.setEnabled(True)
        MainWindow.resize(633, 392)

        icon = QtGui.QIcon()
        icon.addPixmap(QtGui.QPixmap("icon01.webp"), QtGui.QIcon.Selected, QtGui.QIcon.On)
        MainWindow.setWindowIcon(icon)

        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)
        self.lineEdit.setGeometry(QtCore.QRect(20, 40, 561, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.pushButton = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton.setGeometry(QtCore.QRect(590, 40, 25, 19))
        self.pushButton.setObjectName("pushButton")

        self.pushButton.clicked.connect(self.browsefiles)

        self.label = QtWidgets.QLabel(self.centralwidget)
        self.label.setGeometry(QtCore.QRect(20, 20, 141, 16))
        font = QtGui.QFont()
        font.setPointSize(10)
        self.label.setFont(font)
        self.label.setObjectName("label")
        self.mdiArea = QtWidgets.QMdiArea(self.centralwidget)
        self.mdiArea.setGeometry(QtCore.QRect(10, 10, 611, 81))
        self.mdiArea.setObjectName("mdiArea")
        self.pushButton_2 = QtWidgets.QPushButton(self.centralwidget)
        self.pushButton_2.setGeometry(QtCore.QRect(20, 110, 75, 23))
        self.pushButton_2.setObjectName("pushButton_2")

        **self.pushButton_2.clicked.connect(self.start_app)**

        self.mdiArea.raise_()
        self.lineEdit.raise_()
        self.pushButton.raise_()
        self.label.raise_()
        self.pushButton_2.raise_()
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 633, 21))
        self.menubar.setObjectName("menubar")
        self.menuKonwerter = QtWidgets.QMenu(self.menubar)
        self.menuKonwerter.setObjectName("menuKonwerter")
        MainWindow.setMenuBar(self.menubar)
        self.menubar.addAction(self.menuKonwerter.menuAction())

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def browsefiles(self):
        path = "~"
        full_path = os.path.expanduser(path)
        filename = QFileDialog.getOpenFileName(None, "Plik excel do zaimportowania", full_path, "Excel (*.xls *.xlsx)")
        filepath = filename[0]
        self.lineEdit.setText(filepath)

    def start_app(self):
        filepath = self.lineEdit.text()
        glob = filepath

        try:
            import vat
        except:
            infoBox = QMessageBox()  ##Message Box that doesn't run
            infoBox.setIcon(QMessageBox.Question)
            infoBox.setText("Błąd pliku!")
            infoBox.setInformativeText("Użyj rozszerzenia .xlsx.")
            infoBox.setWindowTitle("Załadowano błędny plik")
            #infoBox.setDetailedText("Detailed Text")
            #infoBox.setStandardButtons(QMessageBox.Ok | QMessageBox.Cancel)
            infoBox.setEscapeButton(QMessageBox.Close)
            infoBox.exec()

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "Spradzenie podatników VAT"))
        self.pushButton.setText(_translate("MainWindow", "..."))
        self.pushButton_2.setText(_translate("MainWindow", "Uruchom"))
        self.label.setText(_translate("MainWindow", "Plik wejściowy (excel):"))
        self.menuKonwerter.setTitle(_translate("MainWindow", "Konwerter"))


if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

vat.py

from my import *
print(glob)
#imp = Ui_MainWindow.setupUi.__getattribute__(lineEdit.text()) - dosent work

Все выглядит хорошо, но когда я запускаю свой. py и нажмите button2 (где, как вы видите, я беру путь от редактирования строки), это не работает. Я вижу в скрипте vat.py, что "glob = empty". Конечно, файл vat.py имеет больше функций и делает что-то, но мне нужно сделать все шаги из файла vat.py (но мне нужно передать некоторую переменную. Можно ли также сделать обратную связь от vat к моему, когда vat fini sh все шаги? TIA

1 Ответ

0 голосов
/ 12 апреля 2020

Вам нужно создать функцию в vat.py и перенести в нее свой код. Таким образом, вы можете импортировать функцию вверху скрипта, но вызывать только тогда, когда вам это нужно. Вы также можете вызвать его несколько раз (в отличие от импорта). И, конечно, вы можете передать аргументы своей функции.

vat.py будет выглядеть примерно так:

def vat(glob):
    print(glob)

В my.py вы можете сделать:

from vat import vat

vat(glob)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...