【问题标题】:How to Make a Button Perform Single Click Instead of Double Click如何使按钮执行单击而不是双击
【发布时间】:2017-07-31 15:37:52
【问题描述】:

我正在尝试 PyQt5。当我输入一个值并单击按钮以传递在我的行编辑中输入的值时,我注意到它需要单击 2 次鼠标才能传递,并在我的纯文本编辑中显示该值。

我将如何更改我的代码以允许只需单击 1 次即可传递行编辑中输入的值?

from PyQt5 import QtCore, QtGui, QtWidgets
from functools import partial

class Ui_Form(object):
    def setupUi(self, Form):
        Form.setObjectName("Form")
        Form.resize(640, 480)
        self.label = QtWidgets.QLabel(Form)
        self.label.setGeometry(QtCore.QRect(40, 80, 151, 31))
        self.label.setObjectName("label")
        self.lineEdit = QtWidgets.QLineEdit(Form)
        self.lineEdit.setGeometry(QtCore.QRect(190, 90, 113, 20))
        self.lineEdit.setObjectName("lineEdit")
        self.label_2 = QtWidgets.QLabel(Form)
        self.label_2.setGeometry(QtCore.QRect(40, 170, 181, 16))
        self.label_2.setObjectName("label_2")
        self.plainTextEdit = QtWidgets.QPlainTextEdit(Form)
        self.plainTextEdit.setGeometry(QtCore.QRect(220, 170, 104, 71))
        self.plainTextEdit.setReadOnly(True)
        self.plainTextEdit.setObjectName("plainTextEdit")
        self.pushButton = QtWidgets.QPushButton(Form)
        self.pushButton.setGeometry(QtCore.QRect(310, 90, 75, 23))
        self.pushButton.setObjectName("pushButton")


        self.pushButton.clicked.connect(self.Pass)


        self.retranslateUi(Form)
        QtCore.QMetaObject.connectSlotsByName(Form)

    def retranslateUi(self, Form):
        _translate = QtCore.QCoreApplication.translate
        Form.setWindowTitle(_translate("Form", "Form"))
        self.label.setText(_translate("Form", "Pass the value entered here:"))
        self.label_2.setText(_translate("Form", "Accept and display the passed value:"))
        self.pushButton.setText(_translate("Form", "PASS"))



    def Pass(self):

        accept = self.lineEdit.text()

        self.pushButton.clicked.connect(partial(self.Get, accept))

    def Get(self, getA):

        self.plainTextEdit.setPlainText(getA)




if __name__ == "__main__":
    import sys
    app = QtWidgets.QApplication(sys.argv)
    Form = QtWidgets.QWidget()
    ui = Ui_Form()
    ui.setupUi(Form)
    Form.show()

    ui.Get(ui.Pass())

    sys.exit(app.exec_())

【问题讨论】:

  • 没有原因是你第二次才添加Get方法...
  • 您能进一步解释一下吗?

标签: python-3.x user-interface pyqt mouseevent pyqt5


【解决方案1】:

.clicked 在您第一次点击按钮时触发。但是问题是您将Pass 注册到按钮:

self.pushButton.clicked.connect(self.Pass)

现在Pass 定义为:

def Pass(self):
    accept = self.lineEdit.text()
    # connect a new event
    self.pushButton.clicked.connect(partial(self.Get, accept))

所以当你第一次点击按钮时,你会读取accept,并且只有connectself.Get方法到按钮,这样下一次你点击按钮self.Get确实会被调用。

为了立即处理请求,您可以简单地将Pass 方法修改为:

def Pass(self):
    accept = self.lineEdit.text()
    self.Get(accept)

【讨论】:

  • 谢谢!这消除了很多困惑。我从来不知道它是如此简单。向你致敬!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-05-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-04
  • 1970-01-01
相关资源
最近更新 更多