簡體   English   中英

如何使用按鈕在python中的PyQt5中添加一行

[英]How to add a row in a PyQt5 in python using a button

在嘗試了幾個小時來找到我遺漏的內容后在這里感到困惑,為什么在點擊“添加行”按鈕后這段代碼沒有添加行! 如果我在不點擊按鈕的情況下添加行,它可以正常工作(使用init函數),但使用按鈕時,它不會。

import sys
from PyQt5.QtWidgets import *


class TabWidget(QDialog):
    def __init__(self):
        super().__init__()
        self.table=AccountTable()

        self.setWindowTitle('Tab Widget Application')

        tabwidget = AccountTable()
        connectButton = QPushButton('add a row')
        connectButton.clicked.connect(self.onConnectButtonClicked)
        vbox=QVBoxLayout()
        vbox.addWidget(tabwidget)
        vbox.addWidget(connectButton)
        self.setLayout(vbox)

    def onConnectButtonClicked(self):
            self.table.add_trade(2)

class AccountTable(QTableWidget):
    headerls = [
        'Capital $ Value', 'Capital-Trading $ Value', 'First-Trading $ Value', 'Second-Trading $ Value',
        'Time Elapsed',  'PNL', 'Capital $ Return', 'withdrawable $ ', 'Closing Date' ]

    def __init__(self, parent=None):
        QTableWidget.__init__(self, parent)
        self.setColumnCount(len(self.headerls))
        self.setHorizontalHeaderLabels(self.headerls)
        self.setAlternatingRowColors(True)
        self.resizeColumnsToContents()



    def add_trade(self,h):
            for i in range(h):
                row = self.rowCount()
                self.insertRow(row)


if __name__ == '__main__':
    app=QApplication(sys.argv)
    tabwidget = TabWidget()
    tabwidget.show()
    app.exec()

我不確定這就是你要找的。 我更改了一些行,主要是使 tabwidget 成為類屬性。 這是完整的代碼,我在行尾用# c表示更改。

import sys
from PyQt5.QtWidgets import *


class TabWidget(QDialog):
    def __init__(self):
        super().__init__()
        self.table=AccountTable()
        self.setWindowTitle('Tab Widget Application')

        self.tabwidget = AccountTable() # c
        connectButton = QPushButton('add a row')
        connectButton.clicked.connect(self.onConnectButtonClicked)
        vbox=QVBoxLayout()
        vbox.addWidget(self.tabwidget) # c
        vbox.addWidget(connectButton)
        self.setLayout(vbox)

    def onConnectButtonClicked(self):
        self.currentRowCount = self.tabwidget.rowCount() # c
        self.tabwidget.insertRow(self.currentRowCount) # c

class AccountTable(QTableWidget):
    headerls = [
        'Capital $ Value', 'Capital-Trading $ Value', 'First-Trading $ Value', 'Second-Trading $ Value',
        'Time Elapsed',  'PNL', 'Capital $ Return', 'withdrawable $ ', 'Closing Date' ]

    def __init__(self, parent=None):
        QTableWidget.__init__(self, parent)
        self.setColumnCount(len(self.headerls))
        self.setHorizontalHeaderLabels(self.headerls)
        self.setAlternatingRowColors(True)
        self.resizeColumnsToContents()

if __name__ == '__main__':
    app = QApplication(sys.argv)
    tabwidget = TabWidget()
    tabwidget.show()
    app.exec()

Python 按鈕單擊命令有不同的方面,當您通常使用方法名稱時,它會得到它,但無法處理或從該代碼返回任何內容

connectButton.clicked.connect(self.onConnectButtonClicked)

如果您使用 lambda,它將創建與事件相關的函數,您的方法可以處理和返回任何內容,您還可以傳遞數據,屆時回調將是

connectButton.clicked.connect(lambda: self.onConnectButtonClicked())

有關更多信息,您可以通過此鏈接訪問該網站

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM