PyQt 回车时改变focus 没找到答案

maniachhz 2013-05-01 02:24:14
RT, 当在lineEdit等控件上回车时, 如何实现focus 到下一个控件?
默认使用tab键正常,但我想改变为回车键, 搜索了下,只有Qt方面提到这个问题, 但还是没搞清楚如何使用Qt来实现这个问题.
...全文
427 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
maniachhz 2013-05-05
  • 打赏
  • 举报
回复
引用 7 楼 openXMPP 的回复:
[quote=引用 6 楼 maniachhz 的回复:] 可以感谢openXMPP, 以后在学习PyQt不懂的时候,麻烦多指教啊 你的代码已经验证, 大键盘使用Qt.Key_Return就好. 请问哪里可以找到Python 绑定 类似keyPressEvent事件的源码? 方便以后改变其它事件.
QtAssistant里就有 在windows下,可以运行->程序->PyQt GPL xxx for Pytonxx下有 一般PyQt里的类组织结构跟Qt一样的[/quote] 只安装了PyQt, QtAssistant里面是没内容的. 在windows下,可以运行->程序->PyQt GPL xxx for Pytonxx下面的html文档,只介绍类与方法,并没提到源码.就像我在4楼发的那样.
乔巴好萌 2013-05-03
  • 打赏
  • 举报
回复
引用 6 楼 maniachhz 的回复:
可以感谢openXMPP, 以后在学习PyQt不懂的时候,麻烦多指教啊 你的代码已经验证, 大键盘使用Qt.Key_Return就好. 请问哪里可以找到Python 绑定 类似keyPressEvent事件的源码? 方便以后改变其它事件.
QtAssistant里就有 在windows下,可以运行->程序->PyQt GPL xxx for Pytonxx下有 一般PyQt里的类组织结构跟Qt一样的
maniachhz 2013-05-02
  • 打赏
  • 举报
回复
可以感谢openXMPP, 以后在学习PyQt不懂的时候,麻烦多指教啊 你的代码已经验证, 大键盘使用Qt.Key_Return就好. 请问哪里可以找到Python 绑定 类似keyPressEvent事件的源码? 方便以后改变其它事件.
maniachhz 2013-05-02
  • 打赏
  • 举报
回复
我以前无意中看到过, linux下的回车键大小键盘有差异, 一个是return_key, 一个是enter_key.
maniachhz 2013-05-02
  • 打赏
  • 举报
回复
引用 3 楼 openXMPP 的回复:
from PyQt4.QtCore import * from PyQt4.QtGui import * class MyWidget(QWidget): def __init__(self,parent=None): super(QWidget,self).__init__(parent) self.resize(600,400) self.setStyleSheet(QString.fromLatin1("background:black")) layout = QHBoxLayout() self.btn1 = QPushButton() self.btn2 = QPushButton() self.btn3 = QPushButton() layout.addWidget(self.btn1) layout.addWidget(self.btn2) layout.addWidget(self.btn3) self.setLayout(layout) def keyPressEvent(self, event): keyEvent = QKeyEvent(event) if keyEvent.key() == Qt.Key_Enter: self.focusNextChild() if __name__ == "__main__": import sys app = QApplication(sys.argv) MainWidget = QWidget() MainWidget.resize(800,600) childWidget = MyWidget(MainWidget) MainWidget.show() childWidget.show() app.exec_() 写了下 应该可以 不过键盘有的键位映射不一样 我这个用小键盘里的Enter是可以的 不过大Enter好像被映射到别的值上去了 你可以根据你的键位映射稍微改下 重载KeyPressEvent
非常感谢!!!!!! 我知道要重写EVENT事件,但不知道怎么写. 请问你是从哪里找到PyQt的keyPreeEvent()源码啊?安装PyQt时带的文档里只介绍下面内容, 不知道如何找它的源码?
QLineEdit.keyPressEvent (self, QKeyEvent)

Reimplemented from QWidget.keyPressEvent().

Converts the given key press event into a line edit action.

If Return or Enter is pressed and the current text is valid (or can be made valid by the validator), the signal returnPressed() is emitted.

我以前无意中看到过, linux下的回车键大小键盘有差异, 一个是return_key, 一个是enter_key. 


The default key bindings are listed in the class's detailed description.
乔巴好萌 2013-05-02
  • 打赏
  • 举报
回复
from PyQt4.QtCore import * from PyQt4.QtGui import * class MyWidget(QWidget): def __init__(self,parent=None): super(QWidget,self).__init__(parent) self.resize(600,400) self.setStyleSheet(QString.fromLatin1("background:black")) layout = QHBoxLayout() self.btn1 = QPushButton() self.btn2 = QPushButton() self.btn3 = QPushButton() layout.addWidget(self.btn1) layout.addWidget(self.btn2) layout.addWidget(self.btn3) self.setLayout(layout) def keyPressEvent(self, event): keyEvent = QKeyEvent(event) if keyEvent.key() == Qt.Key_Enter: self.focusNextChild() if __name__ == "__main__": import sys app = QApplication(sys.argv) MainWidget = QWidget() MainWidget.resize(800,600) childWidget = MyWidget(MainWidget) MainWidget.show() childWidget.show() app.exec_() 写了下 应该可以 不过键盘有的键位映射不一样 我这个用小键盘里的Enter是可以的 不过大Enter好像被映射到别的值上去了 你可以根据你的键位映射稍微改下 重载KeyPressEvent
乔巴好萌 2013-05-02
  • 打赏
  • 举报
回复
如果你的控件父子关系没有指定 也可以手动的设置哪个控件去截获按键消息 用grabKeyboard来设置子控件截获消息
乔巴好萌 2013-05-02
  • 打赏
  • 举报
回复
重载mousePressEvent 在里面判断是否为Enter 如果是的话,则设置下一个focus

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧