卡在 Qt Designer 中 - 连接按钮

Stuck in Qt Designer - hooking up buttons

我正在尝试使用 python 创建一个 phone 拨号器,我正在使用 QT Designer 来完成它。

我已经布置了一个简单的 UI 并且我还将 .ui 文件的代码导出到 python 代码(参见此处的代码:https://pastebin.com/bPYjnU0k ).

我遇到的问题是,当按下键盘上的按钮时,我不知道如何让 "phone number" 显示在 QLineEdit 中。 这是我的代码片段,显示了按钮对话框(同样:上面 link 中 pastebin 的完整代码):

def retranslateUi(self, Dialog):
        Dialog.setWindowTitle(_translate("Dialog", "Dialog", None))
        self.pushButton_numZero.setText(_translate("Dialog", "0", None))
        self.pushButton_num4.setText(_translate("Dialog", "4", None))
        self.pushButton_num3.setText(_translate("Dialog", "3", None))
        self.pushButton_num5.setText(_translate("Dialog", "5", None))
        self.pushButton_num6.setText(_translate("Dialog", "6", None))
        self.pushButton_num1.setText(_translate("Dialog", "1", None))
        self.pushButton_num9.setText(_translate("Dialog", "9", None))
        self.pushButton_num2.setText(_translate("Dialog", "2", None))
        self.pushButton_num7.setText(_translate("Dialog", "7", None))
        self.pushButton_num8.setText(_translate("Dialog", "8", None))
        self.pushButton_numStar.setText(_translate("Dialog", "*", None))
        self.pushButton_numPound.setText(_translate("Dialog", "#", None))
        self.pushButton_del.setText(_translate("Dialog", "DEL", None))
        self.pushButton_call.setText(_translate("Dialog", "Call", None))
        self.number_display.setPlaceholderText(_translate("Dialog", "Dial Number ...", None))
        self.pushButton_Contacts.setText(_translate("Dialog", "Plp", None))

if __name__ == "__main__":
    import sys
    app = QtGui.QApplication(sys.argv)
    Dialog = QtGui.QDialog()
    ui = Ui_Dialog()
    ui.setupUi(Dialog)
    Dialog.show()
    sys.exit(app.exec_())

当我按下 "dial" phone 号码的按钮时,如何连接拨号盘按钮以显示 "phone number"?

谢谢。

正如 PyQt 在 the docs 中指出的那样,不建议修改 Qt Designer 生成的文件,因此我假设此文件名为 ui_dialog.py。正题,必须连接每个按钮的clicked信号,根据按钮,实现增删文本等逻辑

main.py

from PyQt4 import QtCore, QtGui
from ui_dialog import Ui_Dialog

class Dialog(QtGui.QDialog, Ui_Dialog):
    def __init__(self, parent=None):
        super(Dialog, self).__init__(parent)
        self.setupUi(self)

        buttons = (
            self.pushButton_num1, self.pushButton_num2, self.pushButton_num3, 
            self.pushButton_num4, self.pushButton_num5, self.pushButton_num6, 
            self.pushButton_num7, self.pushButton_num8, self.pushButton_num9,
            self.pushButton_numStar, self.pushButton_numZero, self.pushButton_numPound,
            self.pushButton_call, self.pushButton_del, self.pushButton_Contacts)
        for btn in buttons:
            btn.clicked.connect(self.on_clicked)

    @QtCore.pyqtSlot()
    def on_clicked(self):
        current_text = self.number_display.text()
        t = self.sender().text()
        if t in ("0", "1", "2", "3", "4", "5", "6", "7", "8", "9", "*", "#"):
            self.number_display.setText(current_text + t)
        elif t == "DEL":
            self.number_display.setText(current_text[:-1])
        elif t == "Call":
            print("Call to: "+ current_text)
        elif t == "Plp":
            print("Plp")

if __name__ == '__main__':
    import sys
    app = QtGui.QApplication(sys.argv)
    w = Dialog()
    w.show()
    sys.exit(app.exec_())