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
376 +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 Апр 2024 в 13:09
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Гарантированные бесплатные доработки в течение 1 года
Быстрое выполнение от 2 часов
Проверка работы на плагиат
Поможем написать учебную работу
Прямой эфир