tamaz1987
@tamaz1987
Умный, красивый

QT не работает с with?

Нужна помощь. Не могу понять что не так.
Программа в режиме консоли работала норм.
Прикрутил интерфейс QT. все настроил, из изменений только то что стал передавать путь к файлу не напрямую вписывая его а через переменную.
Без QT передача через переменную тоже нормально работает.
Н почему то при запуски через интерфейс QT программа закрывается. Без ошибок только дает информацию
Process finished with exit code -1073740791 (0xC0000409)


Методом научного тыка понял где программа обрывается. но строке с with.
def import_csv_orders(orders_file):  # импорт csv в базу данных
    con = sqlite3.connect('razbor.db')
    cur = con.cursor()
    orders = orders_file
    with open(orders, newline='') as csvfile:  # чтение файла
        rows = csv.reader(csvfile, delimiter=';')  # чтение файла
        counter = 0


Не могу понять как графический интерфейс QT заставляет работать криво рабочий код? подскажите как решить это?
Ниже полностью код.

import sys
from tkinter.filedialog import askopenfilename
from moduls import *
from PyQt6 import uic
from PyQt6.QtWidgets import QApplication, QLCDNumber
from PyQt5 import QtCore, QtWidgets
Form, Window = uic.loadUiType("mainWindow.ui")

def marker_fn():
    marker = True
    return marker

def start_program():
    print('Старт выполнения основной части')
    clear_tables()  # очищаем базу данных.
    print("clear_tables")
    import_csv_orders(orders_file)  # импорт в базу данных ордерc
    print('import_csv_orders')
    import_160_cont(cont_files)  # импорт 160 в базу данных
    print('import_160_cont')
    import_route(route_files)  # импорт маршрутов в базу данных
    print('import_route')
    import_fragility()  # импорт хрупкости в базу данных
    print('import_fragility')
    creation_of_pallets()  # заполняем базу данных для формирования паллет ячеек
    print('creation_of_pallets')
    formation_of_pallet_cells()  # Обработка контейнера добавление хрупкости сортировка ( номером ячейки считать ID строки)
    print('formation_of_pallet_cells')
    uploading_to_excel()  # Записываем все в эксель
    print('uploading_to_excel')
    style_excel()  # размечаем таблицы excel
    print('style_excel')
    marker_fn()
    print('Выполнение основной части завершено')

def open_file_orders(): # выбор файла Ордерс
    app = QtWidgets.QApplication([])
    path_file = QtWidgets.QFileDialog.getOpenFileName(directory=r'C:\Users\tomhu\Desktop', filter="Data Base (*.csv)")[0]
    print(path_file)
    form.ordersLine.setText(path_file)
    print(f"Выбран ордерс путь {path_file}")
    print(type(path_file))
def open_file_160(): # выбор файла 160
    app = QtWidgets.QApplication([])
    path_file = QtWidgets.QFileDialog.getOpenFileName(directory=r'C:\Users\tomhu\Desktop', filter="Data Base (*.csv)")[0]
    print(path_file)
    form.ordersLine_2.setText(path_file)
    print(f"Выбран 160 путь {path_file}")
    print(type(path_file))
def open_file_route(): # выбор файла маршрутизации
    app = QtWidgets.QApplication([])
    path_file = QtWidgets.QFileDialog.getOpenFileName(directory=r'C:\Users\tomhu\Desktop', filter="Data Base (*.csv)")[0]
    print(path_file)
    form.ordersLine_3.setText(path_file)
    print(f"Выбран route путь {path_file}")
    print(type(path_file))

marker = False
app = QApplication([])
window = Window()
form = Form()
form.setupUi(window)
window.show()

orders_file = form.ordersSelect.clicked.connect(open_file_orders)  # задаем функцию на нажатие кнопки
cont_files = form.select160.clicked.connect(open_file_160)  # задаем функцию на нажатие кнопки
route_files = form.selectRoute.clicked.connect(open_file_route)  # задаем функцию на нажатие кнопки
form.startBatton.clicked.connect(start_program)


app.exec()


ну и модуль где он обрывается. Остальным кодом думаю не стоит Вас грузить.
def import_csv_orders(orders_file):  # импорт csv в базу данных
    con = sqlite3.connect('razbor.db')
    cur = con.cursor()
    orders = orders_file
    with open(orders, newline='') as csvfile:  # чтение файла
        rows = csv.reader(csvfile, delimiter=';')  # чтение файла
        counter = 0
        for row in rows:  # разбор файла
            print(row)
            # присваеваем запрос переменной
            sqlite_insert_query = """INSERT INTO orders
                                    (supply, customer_name, customer, code_ps_d, material, scope_of_delivery, unit, quantity_in_pieces, picking_date, batch, fresh, vsd, Transporting_the_second_arm)
                                VALUES
                                    (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"""

            cur.executemany(sqlite_insert_query, rows)     # запрос совместно с кортежем данных из csv файла
            counter += 1
            con.commit()
    color_txt_print('База Orders загружена успешно', 'система')
  • Вопрос задан
  • 44 просмотра
Решения вопроса 1
tamaz1987
@tamaz1987 Автор вопроса
Умный, красивый
В общем решил вопрос. Как мне кажется жутким костылем.
Я в функции которая получает адрес файла вызвал функцию которая обрабатывает этот же файл и передал ему переменную с адресом файла.
Заработало.
Выглядит вот так.

Подскажите это прям жуткий костыль? Или приемлемое решение?

Функция которая обрабатывает файл:
def import_csv_orders(orders_file):  # импорт csv в базу данных
    con = sqlite3.connect('razbor.db')
    cur = con.cursor()
    print(f'ордер файл {orders_file}')
    orders = orders_file
    with open(orders, newline='') as csvfile:  # чтение файла
        rows = csv.reader(csvfile, delimiter=';')  # чтение файла
        counter = 0
        for row in rows:  # разбор файла
            print(row)
            # присваеваем запрос переменной
            sqlite_insert_query = """INSERT INTO orders
                                    (supply, customer_name, customer, code_ps_d, material, scope_of_delivery, unit, quantity_in_pieces, picking_date, batch, fresh, vsd, Transporting_the_second_arm)
                                VALUES
                                    (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"""

            cur.executemany(sqlite_insert_query, rows)     # запрос совместно с кортежем данных из csv файла
            counter += 1
            con.commit()
    color_txt_print('База Orders загружена успешно', 'система')


Функция которая получает путь и в ней же вызвана функция обработки файла:
def open_file_orders(): # выбор файла Ордерс
    app = QtWidgets.QApplication([])
    path_file = QtWidgets.QFileDialog.getOpenFileName(None, directory=r'C:\Users\tomhu\Desktop', filter="Data Base (*.csv)")[0]
    print(path_file)
    form.ordersLine.setText(path_file)
    print(f"Выбран ордерс путь {path_file}")
    print(type(path_file))
    import_csv_orders(path_file)  # вызываем функцию обработки файла и передаем в параметры путь до файла
    print('База ордерс загружена')
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы