我的目标是在multiple QPushButton
中将cellwidget
设置为QTableWidget
,每当用户点击其中任何一个按钮时,它都会打印出Row
和{{ 1}}它所在的表数。
因此,对于1 Column
,
QPushButton
当我点击每个按钮时,它会打印出行数和列号。但当我更改函数import sys
from PyQt4 import QtGui,QtCore
def CurrentPos():
clickme = QtGui.qApp.focusWidget()
index = table.indexAt(clickme.pos())
if index.isValid():
print (index.row(), index.column())
def AddValues():
table.setRowCount(5)
for i in range(5):
button = QtGui.QPushButton('Click1')
table.setCellWidget(i,1,button)
button.clicked.connect(CurrentPos)
if __name__ == "__main__":
app = QtGui.QApplication(sys.argv)
table = QtGui.QTableWidget()
table.setFixedSize(QtCore.QSize(330,250))
table.setEditTriggers(QtGui.QTableWidget.NoEditTriggers)
table.setSelectionBehavior(QtGui.QTableWidget.SelectRows)
table.setSelectionMode(QtGui.QTableWidget.NoSelection)
table.horizontalHeader().setStretchLastSection(True)
table.setFocusPolicy(QtCore.Qt.NoFocus)
table.setColumnCount(3)
table.setHorizontalHeaderLabels(['A','B','C'])
table.setColumnWidth(0,50)
table.setColumnWidth(1,200)
table.show()
AddValues()
app.exec_()
以容纳多个按钮时:
AddValues
它不再打印出正确的行号和列号。相反,它只会打印(0,0)或(0,1),具体取决于按钮的位置。
我尝试打印出def AddValues():
table.setRowCount(5)
for i in range(5):
button1 = QtGui.QPushButton('Click1')
button2 = QtGui.QPushButton('Click2')
button3 = QtGui.QPushButton('Click3')
button_layout = QtGui.QHBoxLayout()
button_layout.addWidget(button1)
button_layout.addWidget(button2)
button_layout.addWidget(button3)
buttons_widget = QtGui.QWidget()
buttons_widget.setLayout(button_layout)
table.setCellWidget(i,1,buttons_widget)
button1.clicked.connect(CurrentPos)
button2.clicked.connect(CurrentPos)
button3.clicked.connect(CurrentPos)
并且它给了我QtGui.qApp.focusWidget()
所以据我所知,焦点小部件是实际<PyQt4.QtGui.QPushButton object at 0x014B56F0>
我点击而不是{{1名为QPushButton
。
我唯一怀疑的是QWidget
方法返回相对于它的父窗口小部件的位置,即buttons_widget
而不是.pos()
本身。但我似乎无法找到QWidget (buttons_widget)
方法的文档。
那么,我如何修改我的代码,以便每当用户点击3个按钮中的任何一个时,它就会打印出当前所在按钮的行号和列号。
我使用的是Windows XP SP3和Python 2.7.3
答案 0 :(得分:4)
buttonClicked = self.sender()
index = self.table.indexAt(buttonClicked.pos())
print index.row()
答案 1 :(得分:3)
我找到了解决方案。
index = table.indexAt(clickme.parent().pos())
我应该检查父QWidget
而不是QPushButton
答案 2 :(得分:0)
buttonClicked = self.sender() - 检测发送信号的小部件
postitionOfWidget = buttonClicked.pos() - 获取此发件人的x,y坐标
index = self.table.indexAt(postitionOfWidget) - 带有该坐标的qtablewidget中的项目
index.row()该qtablewidget内的项目行
山姆,我不能为此感谢你: - )