Загрузка QTableWidgets в области прокрутки при нажатии кнопки - PullRequest
0 голосов
/ 03 июля 2018

У меня есть метод с именем 'test ()', который загружает 3 таблицы из одной строки в полосу прокрутки.

По какой-то причине я не могу понять, однако, хотя он работает, если я просто активирую test () при загрузке, он не работает, если я закомментирую его, а затем попытаюсь активировать его нажатием кнопки .

Вот основной модуль (с тестом ())

from PyQt5 import QtCore, QtWidgets
from design import Ui_MainWindow

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        QtWidgets.QMainWindow.__init__(self, *args, **kwargs)
        self.setupUi(self)
        #test(self)

def test(self):
    from random import randint
    x = randint(0, 99)
    print(x)
    height = 30
    yPos = 0
    for i in range(3):

        rowVals = ['test%s' % str(x + i)]

        qTbl = QtWidgets.QTableWidget(self.sawDoc)
        qTbl.setObjectName("tbl%s" % (i))
        qTbl.setGeometry(QtCore.QRect(0, yPos, 880, height))
        qTbl.horizontalHeader().setVisible(False)
        qTbl.verticalHeader().setVisible(False)
        yPos += height

        qTbl.setRowCount(1)
        qTbl.setColumnCount(len(rowVals))
        for r, cell in enumerate(rowVals):
            item = QtWidgets.QTableWidgetItem()
            item.setText(str(cell))
            qTbl.setItem(0, r, item)

if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    w = MainWindow()
    w.show()
    sys.exit(app.exec_())

А вот и модуль дизайна (с кнопкой)

from PyQt5 import QtCore, QtGui, QtWidgets

class Ui_MainWindow(object):
    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(896, 453)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.scrDoc = QtWidgets.QScrollArea(self.centralwidget)
        self.scrDoc.setGeometry(QtCore.QRect(0, 0, 891, 391))
        self.scrDoc.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOn)
        self.scrDoc.setHorizontalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
        self.scrDoc.setWidgetResizable(False)
        self.scrDoc.setObjectName("scrTest")
        self.sawDoc = QtWidgets.QWidget()
        self.sawDoc.setGeometry(QtCore.QRect(0, 0, 869, 300))
        self.sawDoc.setObjectName("sawDoc")
        self.scrDoc.setWidget(self.sawDoc)
        self.btnTest = QtWidgets.QPushButton(self.centralwidget)
        self.btnTest.setGeometry(QtCore.QRect(430, 400, 80, 15))
        self.btnTest.setObjectName("btnTest")
        MainWindow.setCentralWidget(self.centralwidget)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

        self.btnTest.clicked.connect(self.test)

    def test(self):
        import main
        main.test(self)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "昊珩のCAT工具"))
        self.btnTest.setText(_translate("MainWindow", "Test"))



if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    MainWindow = QtWidgets.QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

Просто ничего не происходит, когда я нажимаю кнопку (за исключением того, что распечатка работает успешно).

Может кто-нибудь сказать, что не так?

1 Ответ

0 голосов
/ 03 июля 2018

Родители вначале показывают детей, но потом дети должны показать себя, простое решение - использовать show():

qTbl = QtWidgets.QTableWidget(self.sawDoc)
qTbl.show()

Но я вижу, что вы реализуете решение не элегантным способом, соединение делает это в main.py, не модифицируйте файл, сгенерированный Qt Designer (удалите соединение и метод тестирования в design.py) Вы должны использовать макет и там добавить QTableWidget.

class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
    def __init__(self, *args, **kwargs):
        QtWidgets.QMainWindow.__init__(self, *args, **kwargs)
        self.setupUi(self)
        self.btnTest.clicked.connect(self.test)

    def test(self):
        from random import randint
        x = randint(0, 99)

        lay = QtWidgets.QVBoxLayout(self.sawDoc)
        for i in range(3):
            rowVals = ['test%s' % str(x + i)]
            qTbl = QtWidgets.QTableWidget()
            qTbl.setObjectName("tbl%s" % (i))
            qTbl.horizontalHeader().hide()
            qTbl.verticalHeader().hide()
            qTbl.setRowCount(1)
            qTbl.setColumnCount(len(rowVals))
            for r, cell in enumerate(rowVals):
                item = QtWidgets.QTableWidgetItem()
                item.setText(str(cell))
                qTbl.setItem(0, r, item)
            qTbl.resize(qTbl.sizeHint())
            lay.addWidget(qTbl)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...