如何获取QTableWidget中ButtonWidget的行?
How to get the row of a ButtonWidget in a QTableWidget?
我正在尝试动态填充 QTable 小部件 (table_proj)。
到目前为止,Table 已填满并且看起来正确。
Table中项目的代码:
for row in range(nb_row):
for col in range(nb_col):
item = QtWidgets.QTableWidgetItem(str(data[row][col]))
self.table_proj.setItem(row, 0, item)
self.table_proj.setCellWidget(row, 1, EditButtonWidget())
其中 nb_col 总是两个,而 nb_row 是 len(data)。数据是获取所有信息的字典。
结果如下:
EditButton 的代码如下所示:
class EditButtonWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(EditButtonWidget,self).__init__(parent)
###
self.dw = DockWidget()
###Layout###
self.layout = QtWidgets.QHBoxLayout(self)
self.layout.setContentsMargins(0,0,0,0)
self.layout.setSpacing(0)
self.b1 = QtWidgets.QPushButton()
self.b1.setText('Webseite')
self.b1.clicked.connect(self.doButtonB1)
self.b2 = QtWidgets.QPushButton()
self.b2.setText('Link kopieren')
self.b2.clicked.connect(self.doButtonB2)
self.layout.addWidget(self.b1)
self.layout.addWidget(self.b2)
self.setLayout(self.layout)
def doButtonB1(self):
row = self.dw.table_proj.currentRow()
print(row)
def doButtonB2(self):
pass
我的问题是,当我点击按钮“Webseite”时,它没有给我正确的行,而是我只收到 -1。
因此,如果有人能给我提示,指出我的错误所在,那就太好了。
按照 Qt 论坛 here.
上的建议,将该行设为 EditButtonWidget
class 的成员
例如:
class EditButtonWidget(QtWidgets.QWidget):
def __init__(self, row, parent=None):
super(EditButtonWidget,self).__init__(parent)
self.row = row
### etc ...
def doButtonB1(self):
print(self.row)
和
for row in range(nb_row):
for col in range(nb_col):
item = QtWidgets.QTableWidgetItem(str(data[row][col]))
self.table_proj.setItem(row, 0, item)
self.table_proj.setCellWidget(row, 1, EditButtonWidget(row))
如果您允许用户 insert/delete/move 行,这可能不起作用。在那种情况下,您可能需要像在 qt 论坛 post 中那样使用 indexAt
或将更多信息(在您的情况下是网站 url)传递给 EditButtonWidget
.
我正在尝试动态填充 QTable 小部件 (table_proj)。
到目前为止,Table 已填满并且看起来正确。 Table中项目的代码:
for row in range(nb_row):
for col in range(nb_col):
item = QtWidgets.QTableWidgetItem(str(data[row][col]))
self.table_proj.setItem(row, 0, item)
self.table_proj.setCellWidget(row, 1, EditButtonWidget())
其中 nb_col 总是两个,而 nb_row 是 len(data)。数据是获取所有信息的字典。
结果如下:
EditButton 的代码如下所示:
class EditButtonWidget(QtWidgets.QWidget):
def __init__(self, parent=None):
super(EditButtonWidget,self).__init__(parent)
###
self.dw = DockWidget()
###Layout###
self.layout = QtWidgets.QHBoxLayout(self)
self.layout.setContentsMargins(0,0,0,0)
self.layout.setSpacing(0)
self.b1 = QtWidgets.QPushButton()
self.b1.setText('Webseite')
self.b1.clicked.connect(self.doButtonB1)
self.b2 = QtWidgets.QPushButton()
self.b2.setText('Link kopieren')
self.b2.clicked.connect(self.doButtonB2)
self.layout.addWidget(self.b1)
self.layout.addWidget(self.b2)
self.setLayout(self.layout)
def doButtonB1(self):
row = self.dw.table_proj.currentRow()
print(row)
def doButtonB2(self):
pass
我的问题是,当我点击按钮“Webseite”时,它没有给我正确的行,而是我只收到 -1。
因此,如果有人能给我提示,指出我的错误所在,那就太好了。
按照 Qt 论坛 here.
上的建议,将该行设为EditButtonWidget
class 的成员
例如:
class EditButtonWidget(QtWidgets.QWidget):
def __init__(self, row, parent=None):
super(EditButtonWidget,self).__init__(parent)
self.row = row
### etc ...
def doButtonB1(self):
print(self.row)
和
for row in range(nb_row):
for col in range(nb_col):
item = QtWidgets.QTableWidgetItem(str(data[row][col]))
self.table_proj.setItem(row, 0, item)
self.table_proj.setCellWidget(row, 1, EditButtonWidget(row))
如果您允许用户 insert/delete/move 行,这可能不起作用。在那种情况下,您可能需要像在 qt 论坛 post 中那样使用 indexAt
或将更多信息(在您的情况下是网站 url)传递给 EditButtonWidget
.