Как закодить динамическое(по кнопке) изменение свойств таблицы в PyQT5? Дано: 2 QLineEdit'а и 1 кнопка.
Необходимо:
1) Необходимо по нажатию кнопки считать данные из QLineEdit'ов, привести их к типу int(потому что подозреваю, что считаются они в str) и запихнуть в команды table.setRowCount() и table.setColumnCount(). То есть изменить вид таблицы, основываясь на введённых данных.
Желательно:
2) Пояснять нерадивому автору заметки информацию о создании "кривых" таблиц. То есть в первом столбце такой таблицы будет, например, 5 строк. Во втором столбце каждой из строк первого столбца будут соответствовать ещё некоторое количество строк (т.е. первой строке первого столбца будет одно поле, а в первой строке второго столбца их будет 5 или 3). Примерно так же по отношению к 3-му столбцу относительно 2-го столбца. То есть, если идти в обратном порядке и проводить параллель с Excel - это объединение нескольких ячеек в одну.
В коде предпринималась попытка создать(НЕ показать) таблицу по нажатию на клавишу (что, я так понимаю, или очень сложно или почти невозможно), поэтому не обращайте пожалуйста на это внимания.Под катом код.#!/usr/bin/python3
# -*- coding: utf-8 -*-
import sys
from PyQt5.QtWidgets import QLabel, QWidget, QMessageBox, QApplication, QToolTip, QPushButton, QHBoxLayout, QVBoxLayout, QLineEdit, QDesktopWidget, QTableWidget
from PyQt5.QtGui import QIcon, QFont
from PyQt5.QtCore import pyqtSlot
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# задаём параметры окна, имя, иконку в корне
self.resize(730, 486)
self.setWindowTitle('Message box')
self.setWindowIcon(QIcon('icon.png'))
# определяем лейблы с расположением и размерами
l1 = QLabel('Количество экспертов', self)
l1.setGeometry(10, 0, 121, 21)
l2 = QLabel('Количество кандидатов', self)
l2.setGeometry(10, 60, 131, 16)
# определяем textbox'ы с расположением и размерами
txb1 = QLineEdit(self)
txb1.setGeometry(10, 30, 113, 20)
txb2 = QLineEdit(self)
txb2.setGeometry(10, 80, 113, 20)
# определяем кнопку, её подсказку, размер и прочее
btn1 = QPushButton('Сфомировать таблицу', self)
btn1.setToolTip('This is a QPushButton widget')
btn1.setGeometry(140, 80, 131, 23)
#определяем ещё не видную таблицу
t1 = QTableWidget(self)
btn1.clicked.connect(self.on_click)
self.show()
# происходит троллинг (нажатие клавиши)
@pyqtSlot()
def on_click(self):
txbVal1 = self.txb1.text()
txbVal2 = self.txb2.text()
t1.setRowCount(self, txbVal1)
t1.setColumnCount(self, txbVal2)
t1.SetGeomety(10, 130)
self.t1.show()
def closeEvent(self, event):
reply = QMessageBox.question(self, 'Message',
"Are you sure to quit?", QMessageBox.Yes |
QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
sys.exit(app.exec_())

21 Авг 2019 в 06:58
285 +1
0
Ответы
1

Исправленный и дополненный код:

import sys
from PyQt5.QtWidgets import QLabel, QWidget, QMessageBox, QApplication, QPushButton, QLineEdit, QTableWidget, QTableWidgetItem, QVBoxLayout, QHBoxLayout
class Example(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
self.resize(730, 486)
self.setWindowTitle('Message box')
l1 = QLabel('Количество экспертов', self)
l2 = QLabel('Количество кандидатов', self)
txb1 = QLineEdit()
txb2 = QLineEdit()
btn1 = QPushButton('Сформировать таблицу', self)
btn1.clicked.connect(self.on_click)
v_layout = QVBoxLayout()
v_layout.addWidget(l1)
v_layout.addWidget(txb1)
v_layout.addWidget(l2)
v_layout.addWidget(txb2)
v_layout.addWidget(btn1)
self.setLayout(v_layout)
self.table = QTableWidget(self)
def on_click(self):
txbVal1 = int(self.layout().itemAt(1).widget().text())
txbVal2 = int(self.layout().itemAt(3).widget().text())
self.table.setRowCount(txbVal1)
self.table.setColumnCount(txbVal2)
for i in range(txbVal1):
for j in range(txbVal2):
item = QTableWidgetItem(f'Row {i+1}, Col {j+1}')
self.table.setItem(i, j, item)
self.table.setGeometry(10, 130, 500, 300)
self.table.show()
def closeEvent(self, event):
reply = QMessageBox.question(self, 'Message', "Are you sure to quit?", QMessageBox.Yes | QMessageBox.No, QMessageBox.No)
if reply == QMessageBox.Yes:
event.accept()
else:
event.ignore()
if __name__ == '__main__':
app = QApplication(sys.argv)
ex = Example()
ex.show()
sys.exit(app.exec_())

1) Используется один объект table вместо t1 для таблицы.
2) Исправлены ошибки с получением и использованием данных из QLineEdit.
3) Создана таблица на основе введенных данных с присвоением текста в ячейки.
4) Исправлены ошибки с вызовом методов setRowCount(), setColumnCount(), setGeometry() и show() для таблицы.
5) Название переменной для таблицы изменено с t1 на self.table.
6) Подправлен код размещения виджетов на форме на вертикальный layout и отображение окна при запуске.

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