Как выводить значение в функции в Label
Возникла проблема, я подключаю файл с функцией и вызываю функцию на исполнение в программе по нажатию кнопки. Но дело в том что программа вылетает.Функция отрабатывается отлично и без ошибок, но как связать это с графическим интерфейсом.Может есть где почитать об этом или подскажите? Это основной код на питон
# -*- coding: utf-8 -*-
from PyQt5 import QtWidgets,QtCore
import pars_xml
class MyWindow(QtWidgets.QWidget):
def __init__(self,parent = None):
QtWidgets.QWidget.__init__(self,parent)
#создание Text viev
self.label = QtWidgets.QLabel()
self.label.setAlignment(QtCore.Qt.AlignCenter)
self.label.resize(50,50)
#создание кнопок
self.btnQuit = QtWidgets.QPushButton("&Закрыть окно")
self.btnInf = QtWidgets.QPushButton("Вывести в Group Box")
#Создание контейнера основного окна
self.vbox = QtWidgets.QVBoxLayout()# создается вертикальный контейнер при добавлении обьектов будут распологаться вертекально по мер добавления
self.vbox.addWidget(self.label)
self.vbox.addWidget(self.btnInf)
self.vbox.addWidget(self.btnQuit)
self.setLayout(self.vbox)#добавление vbox в основное окно.Таким образом контейнер становиттся потоком основного окна
#Создание обработчика кнопок
self.btnQuit.clicked.connect(QtWidgets.qApp.quit)
self.btnInf.clicked.connect(self.clickinf)
def clickinf(self):
self.label.config(text = pars_ex.pars())
self.btnInf.setDisabled(True)
if __name__ == "__main__":
import sys
app = QtWidgets.QApplication(sys.argv)
win = MyWindow()
win.setWindowTitle("Парс Excel")
win.resize(700,700)
win.show()
sys.exit(app.exec_())
А это код с самой функцией
import openpyxl
from openpyxl import load_workbook
from datetime import datetime
def pars():
dj = openpyxl.Workbook()#создание открытого файла
dj = load_workbook(filename ="main.xlsx")#открытие и указания на файл
sheets = dj.sheetnames#получение имён листов
sheet_ranges = dj['Лист1']#указания на лист в котормо мы работает
day = int(datetime.strftime(datetime.now(),"%d"))
i=0
while i<=16:#создание цикла
i+=1
#print(sheet_ranges['A' + str(i)].value + ' ' + str(sheet_ranges['F' + str(i)].value))
if i%2!= 0:
if i == 1:
print("===========================")
else:
j = i-1
#print(str(sheet_ranges['B' + str(j)].value) + "," + str(sheet_ranges['C'+str(j)].value) + "," + str(sheet_ranges['D'+str(j)].value) + "," + str(sheet_ranges['E'+str(j)].value))
#print("===========================")
b1 = sheet_ranges['B' + str(j)].value
c1 = sheet_ranges['C'+str(j)].value
e1 = sheet_ranges['E'+str(j)].value
if b1==day or c1 == day or e1 == day:
name = str(sheet_ranges['A' + str(i)].value + ' ' + str(sheet_ranges['F' + str(i)].value))
#print(name)
name1 = str(sheet_ranges['A' + str(i+1)].value + ' ' + str(sheet_ranges['F' + str(i+1)].value))
#print(name1)
#print("===========================")
return name,name1
print(pars())
Ответы (2 шт):
Автор решения: Alexander Chernin
→ Ссылка
Делайте так, - на clickinf вызывайте диалог выбора файла:
def clickinf(self):
# getOpenFileName - можно вызвать с
# параметром options=QtGui.QFileDialog.DontUseNativeDialog
# Если нативный диалог будет долго грузиться
filename = QtGui.QFileDialog.getOpenFileName(filter='*.xlsx')
# Если с файлом все в порядке, то
if filename:
# Передаем его в качестве аргумента в функцию парсинга
# Которая возвращает тупл
name1, name2 = pars_ex.pars(filename)
# Теперь показываем наши значения в label методом setText!
self.label.setText('{}/{}'.format(name1, name2))
Метод pars должен быть таким:
def pars(filename):
...
dj = load_workbook(filename=filename) #открытие и указания на файл
...
while(i <= 16):
...
if b1==day or c1 == day or e1 == day:
...
return name, name1
# Если ничего не найдено, то возвращаем пустой тупл
return '', ''
Автор решения: Sheva12
→ Ссылка
Код полностью рабочий который написан выше только строка
filename = QtGui.QFileDialog.getOpenFileName(filter='*.xlsx')
Должна быть заменена на :
filename = QtWidgets.QFileDialog.getOpenFileName(filter='*.xlsx')
А так у меня ошибка переполнение буфера стека!