Python PyQt5 CreateTable класс, наследующий QtWidgets.QTableWidget для добавления функции add_row - PullRequest
0 голосов
/ 18 февраля 2020

Я пытаюсь создать приложение с таблицей в нем для отображения строк данных. Когда поступит больше данных, я бы хотел добавить строку и ввести данные. Тем не менее, я застрял при добавлении строки. Также работает мой собственный класс CreateTable, который наследует QtWidgets.QTableWidget, но я не понимаю, почему требуется строка

self = QTableWidget(win)

. Я старался сделать код как можно более простым, пока я не получу таблицу с объектом с пользовательскими функциями (add_row, delete_row ...). Вот мой код:

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem
import sys

class CreateTable(QTableWidget):

    def __init__(self, win):
        super().__init__()
        # Doesn't display table without the next line. I don't understand why it is required.
        self = QTableWidget(win)
        # 
        self.setGeometry(50, 50, 1820, 920)
        self.setRowCount(10) 
        self.setColumnCount(10)

    def add_row(self):
        rowcount = self.rowCount()
        self.insertRow(rowcount)

class MainWindow(QMainWindow):

    def __init__(self):
        """MainWindow constructor."""
        super().__init__()
        # Main UI code
        self.setGeometry(0, 0, 1920, 1040)
        self.setWindowTitle("Order Manager")

        table = CreateTable(self)
        table.add_row()


# Main code
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())

Этот код открывает окно и отображает таблицу с 10 строками, но не добавляет строку, чтобы получить 11 рядов. Я новичок в OOP и PyQt5, но пытаюсь узнать больше!

Новый рабочий код:

from PyQt5 import QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow, QTableWidget, QTableWidgetItem
import sys

class MainWindow(QMainWindow):

    def __init__(self):
        """MainWindow constructor."""
        super().__init__()
        # Main UI code
        self.setGeometry(0, 0, 1920, 1040)
        self.setWindowTitle("Order Manager")

        self.table = CreateTable(self)
        self.table.add_row()


class CreateTable(QTableWidget):

    def __init__(self, win):
        super().__init__(win)
        self.setGeometry(50, 55, 1820, 920)
        self.setRowCount(10) 
        self.setColumnCount(10)

    def add_row(self):
        rowcount = self.rowCount()
        self.insertRow(rowcount)


# Main code
app = QApplication(sys.argv)
win = MainWindow()
win.show()
sys.exit(app.exec_())
...