我的目标是将multiple QPushButton
设置为cellwidget
中的QTableWidget
,每当用户单击这些按钮中的任何一个,它都会打印出表中的Row
和Column
个数。
所以,对于1QPushButton
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
以容纳多个按钮时:
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)
它不再打印正确的行和列编号。相反,它只会根据按钮的位置打印(0,0)或(0,1)。
我试图打印出QtGui.qApp.focusWidget()
,它给了我<PyQt4.QtGui.QPushButton object at 0x014B56F0>
据我所知,focus小部件是我正在单击的实际QPushButton
,而不是名为QWidget
的buttons_widget
。
我唯一的怀疑是.pos()
方法返回相对于其父小部件的位置,即QWidget (buttons_widget)
,而不是QTableWidget
本身。但我似乎找不到.pos()
方法的文档。
所以,我如何修改我的代码,以便每当用户单击3个按钮中的任何一个,它都会打印出当前按钮所在的行和列的编号。
我使用的是windows xp SP3和Python 2.7.3
山姆的回答很有魅力。RITZ XAVI,它的工作原理如下:
buttonClicked=self.sender()-检测发送信号的小部件
positionOfWidget=buttonClicked.pos()-获取此发件人的x,y坐标
index=self.table.index(positionofwidget)-qtablewidget中具有该坐标的项
qtablewidget中该项的index.row()行
山姆,我真是太感谢你了:-)
我找到了解决办法。
我应该检查父对象的位置,而不是检查父对象的位置
相关问题 更多 >
编程相关推荐