如何使用PyQt5創建可編輯的表格

一、基本概念

在GUI編程中,表格是一個常用的控制項之一。在PyQt5中,我們可以通過QTableWidget和QTableWidgetItem創建可編輯的表格。

QTableWidget是一個用於顯示數據的小部件。它是基於模型/視圖架構的,其數據存儲在QTableWidget自身的模型中,我們通過自定義QTableWidgetItem在視圖中展示。每一個QTableWidgetItem代表著一個單元格中的數據。

通過使用QTableWidget,我們可以創建一個二維表格。

二、創建可編輯的表格

我們可以通過以下代碼創建一個可編輯的表格:

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

class Table(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('表格')
        self.setGeometry(300, 300, 500, 300)
        self.createTable()
        self.show()

    def createTable(self):
        self.table = QTableWidget()
        self.table.setRowCount(4)
        self.table.setColumnCount(2)
        self.table.setHorizontalHeaderLabels(['姓名', '年齡'])

        for i in range(4):
            for j in range(2):
                item = QTableWidgetItem()
                item.setText('({}, {})'.format(i, j))
                self.table.setItem(i, j, item)

        self.table.cellChanged.connect(self.printTable)

        layout = QVBoxLayout()
        layout.addWidget(self.table)
        self.setLayout(layout)

    def printTable(self, row, column):
        item = self.table.item(row, column)
        print(item.text())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    table = Table()
    sys.exit(app.exec_())

在這個例子中,我們創建了一個4行2列的表格,並且設置了水平表頭。我們通過循環設置每一個單元格的數據,最終在GUI中呈現出來。

同時我們也設置了cellChanged事件的監聽,可以在單元格數據發生變化時觸發事件並列印出變化後的文本。

三、在表格中插入控制項

QTableWidgetItem支持在單元格中插入控制項。我們可以通過以下代碼創建一個帶有QCheckBox的單元格:

import sys
from PyQt5.QtWidgets import QApplication, QWidget, QTableWidget, QTableWidgetItem, QCheckBox, QHBoxLayout, QVBoxLayout

class Table(QWidget):
    def __init__(self):
        super().__init__()
        self.initUI()

    def initUI(self):
        self.setWindowTitle('表格')
        self.setGeometry(300, 300, 500, 300)
        self.createTable()
        self.show()

    def createTable(self):
        self.table = QTableWidget()
        self.table.setRowCount(4)
        self.table.setColumnCount(2)
        self.table.setHorizontalHeaderLabels(['姓名', '選項'])

        for i in range(4):
            for j in range(2):
                if j == 0:
                    item = QTableWidgetItem()
                    item.setText('({}, {})'.format(i, j))
                    self.table.setItem(i, j, item)
                else:
                    cb = QCheckBox('選項{}'.format(i+1))
                    layout = QHBoxLayout()
                    layout.addWidget(cb)
                    layout.setAlignment(cb, QtCore.Qt.AlignCenter)
                    widget = QWidget()
                    widget.setLayout(layout)
                    self.table.setCellWidget(i, j, widget)

        self.table.cellChanged.connect(self.printTable)

        layout = QVBoxLayout()
        layout.addWidget(self.table)
        self.setLayout(layout)

    def printTable(self, row, column):
        if column == 1:
            widget = self.table.cellWidget(row, column)
            cb = widget.children()[0]
            print(cb.isChecked())

if __name__ == '__main__':
    app = QApplication(sys.argv)
    table = Table()
    sys.exit(app.exec_())

在這個例子中,我們創建了一個帶有QCheckBox的表格。我們通過QHBoxLayout創建一個帶有一個QCheckBox的控制項,並設置為單元格中的Widget。

在cellChanged事件中,我們可以通過cellWidget獲取單元格中的Widget,並進一步獲取QCheckBox控制項的狀態值。

四、總結

在PyQt5中,我們可以通過QTableWidget和QTableWidgetItem創建可編輯的表格,同時也可以在單元格中插入控制項,豐富表格的展示形式。

以上是如何使用PyQt5創建可編輯的表格的詳細闡述,希望可以對你有所幫助。

原創文章,作者:ULZF,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/138292.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
ULZF的頭像ULZF
上一篇 2024-10-04 00:19
下一篇 2024-10-04 00:19

相關推薦

  • 如何使用Python獲取某一行

    您可能經常會遇到需要處理文本文件數據的情況,在這種情況下,我們需要從文本文件中獲取特定一行的數據並對其進行處理。Python提供了許多方法來讀取和處理文本文件中的數據,而在本文中,…

    編程 2025-04-29
  • 使用Treeview顯示錶格

    在web開發中,顯示錶格數據是一項很常見的需求。當我們需要在頁面上顯示大量數據時,除了使用傳統的表格樣式外,還可以使用Treeview這種可摺疊的表格樣式,以便更好地展示數據。本文…

    編程 2025-04-29
  • 如何使用jumpserver調用遠程桌面

    本文將介紹如何使用jumpserver實現遠程桌面功能 一、安裝jumpserver 首先我們需要安裝並配置jumpserver。 $ wget -O /etc/yum.repos…

    編程 2025-04-29
  • Hibernate註解聯合主鍵 如何使用

    解答:Hibernate的註解方式可以用來定義聯合主鍵,使用@Embeddable和@EmbeddedId註解。 一、@Embeddable和@EmbeddedId註解 在Hibe…

    編程 2025-04-29
  • 如何使用Python讀取CSV數據

    在數據分析、數據挖掘和機器學習等領域,CSV文件是一種非常常見的文件格式。Python作為一種廣泛使用的編程語言,也提供了方便易用的CSV讀取庫。本文將介紹如何使用Python讀取…

    編程 2025-04-29
  • 如何使用random生成不重複的隨機數

    在編程開發中,我們經常需要使用隨機數來模擬一些場景或生成一些數據。但是如果隨機數重複,就會造成數據的不準確性。這時我們就需要使用random庫來生成不重複且隨機的數值。下面將從幾個…

    編程 2025-04-29
  • Python根據表格數據生成折線圖

    本文將介紹如何使用Python根據表格數據生成折線圖。折線圖是一種常見的數據可視化圖表形式,可以用來展示數據的趨勢和變化。Python是一種流行的編程語言,其強大的數據分析和可視化…

    編程 2025-04-29
  • 如何使用HTML修改layui內部樣式影響全局

    如果您想要使用layui來構建一個美觀的網站或應用,您可能需要使用一些自定義CSS來修改layui內部組件的樣式。然而,修改layui組件的樣式可能會對整個頁面產生影響,甚至可能破…

    編程 2025-04-29
  • 如何使用GPU加速運行Python程序——以CSDN為中心

    GPU的強大性能是眾所周知的。而隨著深度學習和機器學習的發展,越來越多的Python開發者將GPU應用於深度學習模型的訓練過程中,提高了模型訓練效率。在本文中,我們將介紹如何使用G…

    編程 2025-04-29
  • Python 圖片轉表格

    本文將詳細介紹如何使用Python將圖片轉為表格。大家平時在處理一些資料的時候難免會遇到圖片轉表格的需求。比如從PDF文檔中提取表格等場景。當然,這個功能也可以通過手動複製、粘貼,…

    編程 2025-04-29

發表回復

登錄後才能評論