Python中文
首页
教程
问答
标签
搜索
登录
注册
如何检测用户在PyQt4中点击QTableWidget的cellwidget的行数和列数?
回答此问题可获得
20
贡献值,回答如果被采纳可获得
50
分。
<p>我的目标是将<code>multiple QPushButton</code>设置为<code>cellwidget</code>中的<code>QTableWidget</code>,每当用户单击这些按钮中的任何一个,它都会打印出表中的<code>Row</code>和<code>Column</code>个数。</p> <p>所以,对于1<code>QPushButton</code></p> <pre><code>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_() </code></pre> <p><img src="https://i.stack.imgur.com/24FNb.gif" alt="enter image description here"/></p> <p>当我单击每个按钮时,它将很好地打印出行数和列数。但是当我改变函数<code>AddValues</code>以容纳多个按钮时:</p> <pre><code>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) </code></pre> <p><img src="https://i.stack.imgur.com/3MqGv.gif" alt="enter image description here"/></p> <p>它不再打印正确的行和列编号。相反,它只会根据按钮的位置打印(0,0)或(0,1)。</p> <p>我试图打印出<code>QtGui.qApp.focusWidget()</code>,它给了我<code><PyQt4.QtGui.QPushButton object at 0x014B56F0></code>据我所知,focus小部件是我正在单击的实际<code>QPushButton</code>,而不是名为<code>QWidget</code>的<code>buttons_widget</code>。</p> <p>我唯一的怀疑是<code>.pos()</code>方法返回相对于其父小部件的位置,即<code>QWidget (buttons_widget)</code>,而不是<code>QTableWidget</code>本身。但我似乎找不到<code>.pos()</code>方法的文档。</p> <p>所以,我如何修改我的代码,以便每当用户单击3个按钮中的任何一个,它都会打印出当前按钮所在的行和列的编号。</p> <p>我使用的是windows xp SP3和Python 2.7.3</p>
0 条评论
分类:
Python问答
请先
登录
后评论
默认排序
时间排序
1 个回答
匿名
1天前
擅长:python、mysql、java
<p>我找到了解决办法。</p> <pre><code>index = table.indexAt(clickme.parent().pos()) </code></pre> <p>我应该检查父对象的位置,而不是检查父对象的位置</p>
请先
登录
后评论
针对此问题:
更多的回答
关注
89
关注
收藏
1
收藏,
216
浏览
网友 提问于 2天前
相关Python问题
如何提高Djang的410误差
6 回答
如何提高doc2vec模型中两个文档(句子)的余弦相似度?
9 回答
如何提高Docker的日志限制?|[输出已剪裁,达到日志限制100KiB/s]
4 回答
如何提高DQN的性能?
1 回答
如何提高EasyOCR的准确性/预测?
3 回答
如何提高Euler#39项目解决方案的效率?
2 回答
如何提高F1成绩进行分类
2 回答
如何提高FaceNet的准确性
10 回答
如何提高fft处理的精度?
7 回答
如何提高Fibonacci实现对大n的精度?
9 回答
如何提高Flask与psycopg2的连接时间
1 回答
如何提高FosterCauer变换的scipy.signal.invres()的数值稳定性?
8 回答
如何提高gae查询的性能?
2 回答
如何提高GANs用于时间序列预测/异常检测的结果
7 回答
如何提高gevent和tornado组合的性能?
4 回答
如何提高googleappengin请求日志的吞吐量
7 回答
如何提高googlevision文本识别的准确性
5 回答
如何提高groupby/apply效率
1 回答
如何提高Gunicorn中的请求率
10 回答
如何提高G中的文件编码转换
3 回答