如何检测在PyQt4中点击QTableWidget的cellwidget用户的行号和列号?

如何检测在PyQt4中点击QTableWidget的cellwidget用户的行号和列号?,第1张

概述我的目标是在QTableWidget中将多个QPushButton设置为cellwidget,每当用户单击任何这些按钮时,它将打印出它所在的表的行号和列号. 那么,对于1个QPushButton, import sysfrom PyQt4 import QtGui,QtCoredef CurrentPos(): clickme = QtGui.qApp.focusWidget() 我的目标是在QtableWidget中将多个QPushbutton设置为cellWidget,每当用户单击任何这些按钮时,它将打印出它所在的表的行号和列号.

那么,对于1个QPushbutton,

import sysfrom PyQt4 import QtGui,QtCoredef 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,buttons_Widget)        button1.clicked.connect(CurrentPos)        button2.clicked.connect(CurrentPos)        button3.clicked.connect(CurrentPos)

它不再打印出正确的行号和列号.相反,它只会打印(0,0)或(0,1),具体取决于按钮的位置.

我试图打印出QtGui.qApp.focusWidget(),它给我< PyQt4.QtGui.QPushbutton对象在0x014B56F0>所以据我所知,焦点小部件是我点击的实际QPushbutton,而不是名为buttons_Widget的QWidget.

我唯一怀疑的是.pos()方法返回相对于它的父窗口小部件的位置,它是QWidget(buttons_Widget)而不是QtableWidget本身.但我似乎无法找到.pos()方法的文档.

那么,我如何修改我的代码,以便每当用户点击3个按钮中的任何一个时,它就会打印出当前所在按钮的行号和列号.

我使用的是windows XP SP3和Python 2.7.3

解决方法
buttonClicked = self.sender()    index = self.table.indexAt(buttonClicked.pos())    print index.row()
总结

以上是内存溢出为你收集整理的如何检测在PyQt4中点击QTableWidget的cellwidget用户的行号和列号?全部内容,希望文章能够帮你解决如何检测在PyQt4中点击QTableWidget的cellwidget用户的行号和列号?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1193108.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存