Как получить список из функции всплывающего окна?
Есть главное окно Rep_Orders()
на нем кнопки "Select Cols
" и "Download
".
Кнопка "Select Cols
" выводит окно с списком колонок и CheckBox
для выбора колонок. Также в этом окне есть две кнопки "Clear" для очистки всех CheckBox
и "Select" для получения списка выбранных колонок (функция get_columns()
возвращает "cols_list
").
Далее этот список нужно передать в функцию dowload_Orders()
, которая уже по выбранным колонкам сформирует отчет.
У меня не получается это сделать. Список колонок печатается только в функции get_columns()
и далее не передается.
Помогите решить проблему передачи списка колонок cols_list
в функцию dowload_Orders()
.
Всплывающее окно "report_cols_ui.py":
from PyQt5 import QtCore, QtGui, QtWidgets
class Ui_Form(object):
def setupUi(self, Form):
Form.setObjectName("Form")
Form.resize(308, 407)
self.gridLayout = QtWidgets.QGridLayout(Form)
self.gridLayout.setObjectName("gridLayout")
self.columns_list = QtWidgets.QListWidget(Form)
self.columns_list.setObjectName("columns_list")
self.gridLayout.addWidget(self.columns_list, 0, 0, 1, 1)
self.frame = QtWidgets.QFrame(Form)
self.frame.setFrameShape(QtWidgets.QFrame.StyledPanel)
self.frame.setFrameShadow(QtWidgets.QFrame.Raised)
self.frame.setObjectName("frame")
self.horizontalLayout = QtWidgets.QHBoxLayout(self.frame)
self.horizontalLayout.setObjectName("horizontalLayout")
self.btn_select = QtWidgets.QPushButton(self.frame)
self.btn_select.setMinimumSize(QtCore.QSize(90, 30))
self.btn_select.setMaximumSize(QtCore.QSize(16777215, 30))
icon = QtGui.QIcon()
icon.addPixmap(QtGui.QPixmap(":/icon/icon/check-circle.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btn_select.setIcon(icon)
self.btn_select.setObjectName("btn_select")
self.horizontalLayout.addWidget(self.btn_select)
self.btn_clear = QtWidgets.QPushButton(self.frame)
self.btn_clear.setMinimumSize(QtCore.QSize(90, 30))
icon1 = QtGui.QIcon()
icon1.addPixmap(QtGui.QPixmap(":/icon/icon/trash-2.svg"), QtGui.QIcon.Normal, QtGui.QIcon.Off)
self.btn_clear.setIcon(icon1)
self.btn_clear.setObjectName("btn_clear")
self.horizontalLayout.addWidget(self.btn_clear)
self.gridLayout.addWidget(self.frame, 1, 0, 1, 1)
self.retranslateUi(Form)
QtCore.QMetaObject.connectSlotsByName(Form)
def retranslateUi(self, Form):
_translate = QtCore.QCoreApplication.translate
Form.setWindowTitle(_translate("Form", "Columns"))
self.btn_select.setText(_translate("Form", "Select"))
self.btn_clear.setText(_translate("Form", "Clear"))
from wind import resource_rc
Файл с функциями "order.py":
from PyQt5.QtWidgets import QFileDialog, QMessageBox, QWidget, QListWidgetItem
from PyQt5 import QtCore
from sqlalchemy import select
from sqlalchemy.exc import SQLAlchemyError
from db import db, engine
from models import Base_PL, Brands, Contracts, Customers_ALL, Orders, PL_chng, Packs, Products, Stock
from wind.pages.orders_ui import Ui_Form as Ord_Form
from wind.pages.report_cols_ui import Ui_Form as Cols_Form
class Rep_Orders(QWidget):
def __init__(self):
super(Rep_Orders, self).__init__()
self.ui = Ord_Form()
self.ui.setupUi(self)
self.ui.btn_select_cols.setToolTip('выбери колонки для отчета')
self.ui.btn_select_cols.clicked.connect(self.go_to_Select_Cols)
self.ui.btn_download.clicked.connect(self.dowload_Orders)
self.ui.rep_date.setCalendarPopup(True)
def go_to_Select_Cols(self):
self.columns_form = QWidget()
self.columns = Cols_Form()
self.columns.setupUi(self.columns_form)
orders_db = self.get_all_Orders_from_db()
if orders_db.empty == False:
orders_db = orders_db[sorted(orders_db.columns )]
cols = orders_db.columns.values.tolist()
for col in cols:
item = QListWidgetItem(col)
item.setFlags(item.flags() | QtCore.Qt.ItemIsUserCheckable)
item.setCheckState(QtCore.Qt.Unchecked)
self.columns.columns_list.addItem(item)
self.columns.btn_clear.clicked.connect(self.clear_cols_list)
self.columns_form.show()
self.columns.btn_select.clicked.connect(self.get_columns)
def clear_cols_list(self):
for i in range(self.columns.columns_list.count()):
item = self.columns.columns_list.item(i)
if item.checkState() == QtCore.Qt.Checked:
item.setCheckState(QtCore.Qt.Unchecked)
def get_columns(self):
cols_list = []
for i in range(self.columns.columns_list.count()):
item = self.columns.columns_list.item(i)
if item.checkState() == QtCore.Qt.Checked:
item = item.text()
cols_list.append(item)
self.columns_form.close()
return cols_list
def dowload_Orders(self):
order_data = self.get_all_Orders_from_db()
order_data = order_data[cols_list]