Python — как реализовать ООП с PyQt (connect)? Есть окно в PyQt в нем кнопка Оpen для загрузки файла
В том же окне есть таблица, которая заполняется содержимым файл
Не могу грамотно соединить все(
Вот части программы:class open_kn(QPushButton):
def __init__(self, parent=None):
super(open_kn, self).__init__(parent)
self.setText('Open')
self.resize(self.sizeHint())
self.clicked.connect(FileDialog)

class FileDialog(QFileDialog):
def __init__(self):
super().__init__()
try:
self.fileName = self.getOpenFileName(self, 'Open file', 'D:\\')[0]
#self.textEdit.setText(self.fileName)
f = open(self.fileName, 'r')
data = []
with f as f:
for i in f.readlines():
data.append(i)
TableWidget.data = data
except IOError:
print('Не могу открыть', self.fileName)
except ImportError as err:
print('Error: импортировать файл не удалось!', err)
except ValueError as err:
print('Error: не тот формат данных!', err)
except:
print('Неожиданная ошибка:', sys.exc_info()[0])
class TableWidget(QTableWidget):
def __init__(self, parent=None, data=[]):
super(TableWidget, self).__init__(parent)
#data = []
self.setColumnCount(1)
self.setRowCount(len(data))
for i, entry in enumerate(data, start=1):
self.setRowCount(i)
item = QTableWidgetItem()
item.setText(str(entry))
Сама таблица вставляется QGridLayout:
я думала может в класс задать переменной данные с файла и там уже просто обьявить таблицу с атрибутом
но не знаю как это реализовать
Вот класс class HBox4(QGridLayout):
def __init__(self, parent=None):
super(HBox4, self).__init__(parent)
table = TableWidget()
self.addWidget(table, *(0,0))
self.addWidget(TabDemo(), *(0,1))
Я только начала изучать программирование не судите строго
Я думаю, может так вообще делать нельзя(

21 Авг 2019 в 07:02
243 +1
0
Ответы
1

Для связывания кнопки с функцией загрузки файла и заполнения таблицы, вы можете использовать сигналы и слоты в PyQt. Вот пример, как вы можете изменить ваш код:

Сделайте изменения в классе open_kn, чтобы он создавал сигнал, который будет отправляться при нажатии на кнопку:from PyQt5.QtCore import pyqtSignal
class open_kn(QPushButton):
file_loaded = pyqtSignal(object)
def __init__(self, parent=None):
super(open_kn, self).__init__(parent)
self.setText('Open')
self.resize(self.sizeHint())
self.clicked.connect(self.FileDialog)
def FileDialog(self):
file_dialog = QFileDialog()
file_name, _ = file_dialog.getOpenFileName(self, 'Open file', 'D:\\')
if file_name:
self.file_loaded.emit(file_name)В классе, который содержит таблицу, подключите сигнал к функции, которая будет заполнять таблицу:class HBox4(QGridLayout):
def __init__(self, parent=None):
super(HBox4, self).__init__(parent)
self.table = TableWidget()
self.addWidget(self.table, *(0,0))
self.addWidget(TabDemo(), *(0,1))
open_button = open_kn()
open_button.file_loaded.connect(self.load_file)
def load_file(self, file_name):
data = []
try:
with open(file_name, 'r') as f:
for line in f:
data.append(line.strip())
self.table.setRowCount(len(data))
for i, entry in enumerate(data):
item = QTableWidgetItem()
item.setText(str(entry))
self.table.setItem(i, 0, item)
except Exception as e:
print('Error:', e)

Теперь, когда пользователь нажимает на кнопку "Open", сигнал file_loaded отправляется и функция load_file вызывается для загрузки файла и заполнения таблицы данными из него.

20 Апр в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 91 947 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир