繁体   English   中英

PyQt5:如何使用QComboBox从QTableWidget获取信号?

[英]PyQt5: How to get the signal from a QTableWidget with QComboBox?

我了解这是一个初学者的问题,我进行了搜索但找不到答案。

在应用程序中,有一个QTableWidget ,其中包含QComboBoxQDoubleSpinBox和一些QDoubleSpinBox项。

通过更改任何单元格,我想激活on_change方法并打印一些内容。

下面的代码未从QComboBoxQDoubleSpinBox获取更改信号。 我该如何纠正代码?

import sys
from PyQt5.QtWidgets import *
from PyQt5.QtGui import *
from PyQt5.QtCore import *

list_text = ["a", "b", "c"]

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

    def initUI(self):
        self.createTable()

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

        self.show()

    def createTable(self):
        # Create table
        self.tableWidget = QTableWidget()
        self.tableWidget.setRowCount(6)
        self.tableWidget.setColumnCount(2)
        self.tableWidget.setItem(0, 0, QTableWidgetItem("Text0"))
        self.tableWidget.setItem(0, 1, QTableWidgetItem("Text1"))
        self.tableWidget.setItem(1, 0, QTableWidgetItem("Text2"))
        self.tableWidget.setItem(1, 1, QTableWidgetItem("Text3"))

        self.cbx = QComboBox()
        self.cbx.addItems(list_text)
        self.tableWidget.setCellWidget(2, 0, self.cbx)


        self.dsb = QDoubleSpinBox(self)
        self.dsb.setDecimals(0)
        self.dsb.setMinimum(1)
        self.dsb.setMaximum(100)
        self.dsb.setSingleStep(1)
        self.dsb.setValue(50)
        self.tableWidget.setCellWidget(3, 0, self.dsb)


        # table selection change
        self.tableWidget.itemChanged.connect(self.on_change)

    def on_change(self):
        print("any item was changed. ")


if __name__ == '__main__':
    app = QApplication(sys.argv)
    ex = App()
    sys.exit(app.exec_())

谢谢您的帮助!

QComboboxQSpinbox上进行QCombobox切换时,您无需“更改项目”,而可以更改“项目内容”。

因此,他们需要自己的连接:

# table selection change
self.tableWidget.itemChanged.connect(self.on_change)    
# adding with this
self.dsb.valueChanged.connect(self.on_change)
self.cbx.currentTextChanged.connect(self.on_change)

如果您要向基本单元中添加新内容,则会触发信号,但是在您的设置中,单元中只有一个对象,它根本没有变化(因为它是孩子在做的)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM