我的目標是爲multiple QPushButton
爲cellwidget
在QTableWidget
,每當在任何一個按鈕的用戶點擊,就會打印出和Column
數字表是在。如何檢測在PyQt4中點擊QTableWidget的cellwidget用戶的行號和列號?
因此,對於1 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
以適應多個按鈕:
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>
從而據我瞭解,重點部件是實際QPushButton
我點擊的不是命名buttons_widget
的QWidget
。
我唯一的懷疑是.pos()
方法返回相對於它的父窗口小部件,這是QWidget (buttons_widget)
而不是QTableWidget
本身的位置。但我似乎無法找到.pos()
方法的文檔。
所以,我如何修改我的代碼,這樣,每當在任何3個按鍵的用戶點擊,它目前在打印出的行數和列數的按鈕。
我使用Windows XP SP3和Python 2.7。 3
這將是很好,如果你可以提供你的代碼片段的簡短說明。 。 –