我为游戏构建了一个应用程序,开始很简单。这是一个系统随机选择一个数字并且游戏者(玩家)试图找出数字的游戏。一切都快完成了。该应用程序包含QLineEdit
,标签和三个按钮。一旦应用告诉玩家所需号码的范围,他/她就会输入 bet_number 并点击播放按钮。根据这个号码,他/她会收到一条消息,说明所需号码离 bet_number 的距离有多近。
但我觉得单击按钮有点恶心。相反,我想使用 Enter键进行播放。所以要实现这一点,具体来说有两个问题:
如何改变使用Enter进行播放(我的意思是我需要知道QLineEdit
检测到输入键是否被按下)?通过这种方式,我将正确编码以指出播放方法。
如果播放按钮有焦点,那么如何在此按钮上使用回车键? (make Button接受Enter键)
答案 0 :(得分:39)
对于QLineEdit
连接到returnPressed
信号,如果您在setAutoDefault
上使用QPushButton
方法,则在clicked
信号>在焦点QPushButton
上按
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import sip
sip.setapi('QString', 2)
sip.setapi('QVariant', 2)
from PyQt4 import QtGui, QtCore
class MyWindow(QtGui.QWidget):
def __init__(self, parent=None):
super(MyWindow, self).__init__(parent)
self.pushButtonOK = QtGui.QPushButton(self)
self.pushButtonOK.setText("OK")
self.pushButtonOK.clicked.connect(self.on_pushButtonOK_clicked)
self.pushButtonOK.setAutoDefault(True)
self.lineEditNumber = QtGui.QLineEdit(self)
self.lineEditNumber.returnPressed.connect(self.pushButtonOK.click)
self.layoutHorizontal = QtGui.QHBoxLayout(self)
self.layoutHorizontal.addWidget(self.pushButtonOK)
self.layoutHorizontal.addWidget(self.lineEditNumber)
@QtCore.pyqtSlot()
def on_pushButtonOK_clicked(self):
inputNumber = self.lineEditNumber.text()
if inputNumber.isdigit():
info = "You selected `{0}`"
else:
info = "Please select a number, `{0}` isn't valid!"
print info.format(inputNumber)
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
app.setApplicationName('MyWindow')
main = MyWindow()
main.show()
sys.exit(app.exec_())
答案 1 :(得分:11)
QLineEdit
将发出信号returnPressed()
:http://qt-project.org/doc/qt-4.8/qlineedit.html#signals。您可以将此信号连接到按钮的click()
插槽,也可以直接拨打按钮的clicked()
信号所连接的任何信号。
答案 2 :(得分:0)
其他答案的 C++ 略有变化,它没有显着不同,但我想我还是会包括它,因为你在 QT 代码中放置东西的方式可能会因代码库而异,我想去掉无关的东西给出最短且最容易理解的代码摘录。
QLineEdit *TextSend = new QLineEdit("");
QPushButton *SendPB = new QPushButton("Send!");
connect(TextSend, &QLineEdit::returnPressed, this, &CLITab::SendCommand);
connect(SendPB, &QPushButton::released, this, &CLITab::SendCommand);
所以我们要做的是创建一个 QLineEdit 文本框和一个 QPushbutton。
我们做一些装饰性的事情,比如为它们设置字符串标签并将它们添加到我们的布局中。
然后我们设置一个回调处理程序,当QLineEdit返回“returnPressed”时会触发它,然后它会自动调用到我写的一个名为“CLITab::SendCommand()”的函数中,然后由这个函数来提取从 QLineEdit 中取出数据并做任何需要做的事情。实际上,TextSend 和 SendPB 指针将位于父类中,因此 SendCommand() 可以查看这些对象。
把它放在这里,旁边是一个按钮示例,因为本质上它们的工作方式完全相同,唯一不同的是发出的信号名称。