【发布时间】:2015-11-14 02:49:55
【问题描述】:
感谢以下帖子 (Python Qt: How to catch "return" in qtablewidget),我找到了如何继承 QTableWidget 以连接 ENTER 键事件。我的问题是,从这个子类中,我找不到到达所有其他小部件的方法。
这就是我所做的。
使用 QtDesigner,我用QTableWidget 和TextField 构建了这个简单的界面。我将QTableWidget 提升为我自己的MyTableWidget(来自上面的帖子)。
主要代码如下:
import sys
from PyQt4 import QtGui, QtCore, Qt
from my_interface import Ui_MainWindow
class AppTemplateMain(QtGui.QMainWindow):
variable1 = 'my variable 1'
#initialize app
def __init__(self, parent=None):
QtGui.QMainWindow.__init__(self, parent)
self.ui = Ui_MainWindow()
self.ui.setupUi(self)
if __name__=="__main__":
app = QtGui.QApplication(sys.argv)
myapp = AppTemplateMain()
myapp.show()
exit_code=app.exec_()
sys.exit(exit_code)
而QTableWidget的子类定义在自己的文件mytablewidget.py
from PyQt4 import QtGui
from PyQt4.QtCore import Qt
class MyTableWidget(QtGui.QTableWidget):
def __init__(self, parent=None):
self.parent = parent
super(MyTableWidget, self).__init__(parent)
def keyPressEvent(self, event):
key = event.key()
if key == Qt.Key_Return or key == Qt.Key_Enter:
print('clicked enter')
else:
super(MyTableWidget, self).keyPressEvent(event)
当我在表格中单击时,我按预期得到消息“单击输入”按预期打印。但我想从这个子类访问 GUI 的其他小部件......以及在AppTemplateMain 中定义的variable1。
我觉得我错过了一些明显的东西,但不知道是什么。有人可以在这里帮助我。
非常感谢。
【问题讨论】:
-
您在主代码中的何处创建表?您可以在表格中创建一个自定义信号,在 keyPressEvent 中发出,然后将此信号连接到主代码中的函数。
-
另外,我不确定你想像这样创建 variable1。现在它是一个静态变量,具有特定的行为。请参阅此问题的两个第一个答案:stackoverflow.com/questions/68645/…
-
我尝试像这样创建自己的 keyPressEvent:QtCore.QObject.connect(self.ui.tableWidget,QtCore.SIGNAL("keyPressEvent()"), self.myYo) def myYo(self, event): print("my yo") 没有成功!
标签: python user-interface pyqt subclass qtablewidget