如何在 QTextEdit 框 PYQT 中显示虚拟键盘上按下的数字

How to show the number pressed on a virtual keyboard in a QTextEdit box PYQT

如何在QTextEdit 框中显示虚拟键盘上按下的数字? (PYQT)

#!/usr/bin/python
""" Prototype code for the infusion pump
code has to be updated """

""" Imports """
import sys
from PyQt4 import QtGui, QtCore
import sys, time
from PyQt4.QtCore import QSize, SIGNAL

""" Globals """
global topTxt, midTxt, endTxt
global powerOpt, AlrmSil, bootC
global btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9
global btn0,btnDot,btnBK,btnClr,btnMain,btnChg,btnOpt,btnClrTot,btnPWR,btnAlrm,btnStrt,btnStop
global highVal, lowVal

highVal = 55
lowVal = 10
""" Globals Initialization"""
powerOpt = 0
AlrmSil = 0
class Infusion(QtGui.QMainWindow):

    def __init__(self):
        """ Constructor """
        super(Infusion, self).__init__()        
        self.initKey()
        self.initText()
        self.showUI()


    def initKey(self):   
        """   This function initializes the buttons in the UI """ 
        global btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9
        global btn0,btnDot,btnBK,btnClr,btnMain,btnChg,btnOpt,btnClrTot,btnPWR,btnAlrm,btnStrt,btnStop
        btn1 = QtGui.QPushButton("1", self)
        btn1.setFixedWidth(30)
        btn1.move(650, 50)
        btn1.setEnabled(False)

        btn2 = QtGui.QPushButton("2", self)
        btn2.setFixedWidth(30)
        btn2.move(690, 50)
        btn2.setEnabled(False)

        btn3 = QtGui.QPushButton("3", self)
        btn3.setFixedWidth(30)
        btn3.move(730, 50)

        btn4 = QtGui.QPushButton("4", self)
        btn4.setFixedWidth(30)
        btn4.move(650, 100)

        btn5 = QtGui.QPushButton("5", self)
        btn5.setFixedWidth(30)
        btn5.move(690, 100)

        btn6 = QtGui.QPushButton("6", self)
        btn6.setFixedWidth(30)
        btn6.move(730, 100)

        btn7 = QtGui.QPushButton("7", self)
        btn7.setFixedWidth(30)
        btn7.move(650, 150)

        btn8 = QtGui.QPushButton("8", self)
        btn8.setFixedWidth(30)
        btn8.move(690, 150)

        btn9 = QtGui.QPushButton("9", self)
        btn9.setFixedWidth(30)
        btn9.move(730, 150)

        btnBK = QtGui.QPushButton("Back", self)
        btnBK.setFixedWidth(40)
        btnBK.move(650, 200)

        btn0 = QtGui.QPushButton("0", self)
        btn0.setFixedWidth(30)
        btn0.move(690, 200)

        btnDot = QtGui.QPushButton(".", self)
        btnDot.setFixedWidth(30)
        btnDot.move(730, 200)

        btnMain = QtGui.QPushButton("", self)
        btnMain.setFixedWidth(70)
        btnMain.move(60, 230)


        btn3.clicked.connect(self.digitClicked)            
        btn4.clicked.connect(self.digitClicked)
        btn5.clicked.connect(self.digitClicked)            
        btn6.clicked.connect(self.digitClicked)
        btn7.clicked.connect(self.digitClicked)            
        btn8.clicked.connect(self.digitClicked)
        btn9.clicked.connect(self.digitClicked)            
        btn0.clicked.connect(self.digitClicked)

        btnDot.clicked.connect(self.digitClicked)
        btnBK.clicked.connect(self.digitClicked)
        # btnClr.clicked.connect(self.digitClicked)

        btnMain.clicked.connect(self.mainMenuClk)


        self.update()
    def initText(self):
        """ This portion initializes the Display of the UI, which is in black and green color """
        global topTxt, midTxt, endTxt


        midTxt = QtGui.QTextEdit("", self)
        midTxt.setFixedWidth(550)
        midTxt.setFixedHeight(100)
        midTxt.setReadOnly(True)
        midTxt.setStyleSheet('QTextEdit {background-color: #00FF00; color: black;}')
        midTxt.move(50, 80)
        midTxt.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)



    def showUI(self):
        """ everything initialized , now just show it """
        self.statusBar()        
        self.setGeometry(300, 300, 800, 300)
        self.setWindowTitle('InfusionUI')
        self.show()



    def digitClicked(self):
        sender = self.sender()
        self.emit(SIGNAL("sigKeyButtonClicked"), sender.text())
        print sender.text()







    def alignSecScreen(self,scrn, numScreen):
        global topTxt, midTxt, endTxt, btn1
        if numScreen == 2:
            midCsr = scrn.textCursor()
            midCsr.movePosition(QtGui.QTextCursor.End)
            self.midTxtInsert( 4 * ("\t"),8, "")

        elif numScreen == 3:
            midCsr = scrn.textCursor()
            midCsr.movePosition(QtGui.QTextCursor.End)
            self.midTxtInsert( 3 * ("\t"),8, "")

        elif numScreen == 4:            
            midCsr = scrn.textCursor()
            midCsr.movePosition(QtGui.QTextCursor.End)
            self.midTxtInsert( 2 * ("\t"),8, "")
        else:
            pass

    def mainMenuClk(self):
        """ Option 1 selection handler """
        global topTxt, midTxt, endTxt, btn1
        # topTxt.clear()
        midTxt.clear()
        # endTxt.clear()
        selection = 1
        self.midTxtInsert("\nMax:", 10, "")
        self.alignSecScreen(midTxt,2)
        self.midTxtInsert("59\n", 10, "")

        self.midTxtInsert("High:", 10, "")
        self.alignSecScreen(midTxt,2)
        self.midTxtInsert("%s\n"%highVal, 10, "")

        self.midTxtInsert("Low:\n", 10, "")  

        self.midTxtInsert("Min:\n", 10, "")  

        if(selection):
            sender = self.sender()
            selectionTxt = QtGui.QTextEdit("", self)
            selectionTxt.setFixedWidth(50)
            selectionTxt.setFixedHeight(30)
            # selectionTxt.setReadOnly(True)
            selectionTxt.setStyleSheet('QTextEdit {background-color: #000000; color: green;}')
            selectionTxt.move(500, 125)
            selectionTxt.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
            selectionTxt.show()
            selectionTxt.setAlignment(QtCore.Qt.AlignCenter)


            cursor = selectionTxt.textCursor()
            textSelected = cursor.selectedText()
            # s = textSelected.upper()
            print textSelected
            selectionTxt.setText(textSelected)


            selectionTxt.update()
            self.update()



    def midTxtInsert(self, txt,font, algmt):
        """ UI is split to three region, this is mid part which is in green """
        global topTxt, midTxt, endTxt        
        midTxt.setFontPointSize(font)        
        if algmt.upper() == "C":
            midTxt.setAlignment(QtCore.Qt.AlignCenter)
        elif algmt.upper() == "R":
            midTxt.setAlignment(QtCore.Qt.AlignRight)
        else:
            midTxt.setAlignment(QtCore.Qt.AlignLeft)  
        midTxt.insertPlainText(txt)
        self.update()         




def main():
    """ Function main """
    app = QtGui.QApplication(sys.argv)
    ex = Infusion()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

在此处添加一个片段,因为我无法共享实际代码,我正在尝试的是,

点击左按钮后->会出现一个黑色的文本编辑框。我试图在按下数字时获取输入框的数字。

我修改了你的代码如下:

#!/usr/bin/python
""" Prototype code for the infusion pump
code has to be updated """

""" Imports """
import sys
from PyQt4 import QtGui, QtCore
import sys, time
from PyQt4.QtCore import QSize, SIGNAL, pyqtSignal

""" Globals """
global topTxt, midTxt, endTxt
global powerOpt, AlrmSil, bootC
global btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9
global btn0,btnDot,btnBK,btnClr,btnMain,btnChg,btnOpt,btnClrTot,btnPWR,btnAlrm,btnStrt,btnStop
global highVal, lowVal

highVal = 55
lowVal = 10
""" Globals Initialization"""
powerOpt = 0
AlrmSil = 0
class Infusion(QtGui.QMainWindow):
    sigTextButtonClicked = pyqtSignal(QtCore.QString)

    def __init__(self):
        """ Constructor """
        super(Infusion, self).__init__()
        self.initKey()
        self.initText()
        self.showUI()


    def initKey(self):
        """   This function initializes the buttons in the UI """
        global btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9
        global btn0,btnDot,btnBK,btnClr,btnMain,btnChg,btnOpt,btnClrTot,btnPWR,btnAlrm,btnStrt,btnStop
        btn1 = QtGui.QPushButton("1", self)
        btn1.setFixedWidth(30)
        btn1.move(650, 50)
        btn1.setEnabled(False)

        btn2 = QtGui.QPushButton("2", self)
        btn2.setFixedWidth(30)
        btn2.move(690, 50)
        btn2.setEnabled(False)

        btn3 = QtGui.QPushButton("3", self)
        btn3.setFixedWidth(30)
        btn3.move(730, 50)

        btn4 = QtGui.QPushButton("4", self)
        btn4.setFixedWidth(30)
        btn4.move(650, 100)

        btn5 = QtGui.QPushButton("5", self)
        btn5.setFixedWidth(30)
        btn5.move(690, 100)

        btn6 = QtGui.QPushButton("6", self)
        btn6.setFixedWidth(30)
        btn6.move(730, 100)

        btn7 = QtGui.QPushButton("7", self)
        btn7.setFixedWidth(30)
        btn7.move(650, 150)

        btn8 = QtGui.QPushButton("8", self)
        btn8.setFixedWidth(30)
        btn8.move(690, 150)

        btn9 = QtGui.QPushButton("9", self)
        btn9.setFixedWidth(30)
        btn9.move(730, 150)

        btnBK = QtGui.QPushButton("Back", self)
        btnBK.setFixedWidth(40)
        btnBK.move(650, 200)

        btn0 = QtGui.QPushButton("0", self)
        btn0.setFixedWidth(30)
        btn0.move(690, 200)

        btnDot = QtGui.QPushButton(".", self)
        btnDot.setFixedWidth(30)
        btnDot.move(730, 200)

        btnMain = QtGui.QPushButton("", self)
        btnMain.setFixedWidth(70)
        btnMain.move(60, 230)


        btn3.clicked.connect(self.digitClicked)
        btn4.clicked.connect(self.digitClicked)
        btn5.clicked.connect(self.digitClicked)
        btn6.clicked.connect(self.digitClicked)
        btn7.clicked.connect(self.digitClicked)
        btn8.clicked.connect(self.digitClicked)
        btn9.clicked.connect(self.digitClicked)
        btn0.clicked.connect(self.digitClicked)

        btnDot.clicked.connect(self.digitClicked)
        btnBK.clicked.connect(self.digitClicked)
        # btnClr.clicked.connect(self.digitClicked)

        btnMain.clicked.connect(self.mainMenuClk)


        self.update()
    def initText(self):
        """ This portion initializes the Display of the UI, which is in black and green color """
        global topTxt, midTxt, endTxt


        midTxt = QtGui.QTextEdit("", self)
        midTxt.setFixedWidth(550)
        midTxt.setFixedHeight(100)
        midTxt.setReadOnly(True)
        midTxt.setStyleSheet('QTextEdit {background-color: #00FF00; color: black;}')
        midTxt.move(50, 80)
        midTxt.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)



    def showUI(self):
        """ everything initialized , now just show it """
        self.statusBar()
        self.setGeometry(300, 300, 800, 300)
        self.setWindowTitle('InfusionUI')
        self.show()



    def digitClicked(self):
        sender = self.sender()
        self.sigTextButtonClicked.emit(sender.text())
        print sender.text()







    def alignSecScreen(self,scrn, numScreen):
        global topTxt, midTxt, endTxt, btn1
        if numScreen == 2:
            midCsr = scrn.textCursor()
            midCsr.movePosition(QtGui.QTextCursor.End)
            self.midTxtInsert( 4 * ("\t"),8, "")

        elif numScreen == 3:
            midCsr = scrn.textCursor()
            midCsr.movePosition(QtGui.QTextCursor.End)
            self.midTxtInsert( 3 * ("\t"),8, "")

        elif numScreen == 4:
            midCsr = scrn.textCursor()
            midCsr.movePosition(QtGui.QTextCursor.End)
            self.midTxtInsert( 2 * ("\t"),8, "")
        else:
            pass

    def mainMenuClk(self):
        """ Option 1 selection handler """
        global topTxt, midTxt, endTxt, btn1
        # topTxt.clear()
        midTxt.clear()
        # endTxt.clear()
        selection = 1
        self.midTxtInsert("\nMax:", 10, "")
        self.alignSecScreen(midTxt,2)
        self.midTxtInsert("59\n", 10, "")

        self.midTxtInsert("High:", 10, "")
        self.alignSecScreen(midTxt,2)
        self.midTxtInsert("%s\n"%highVal, 10, "")

        self.midTxtInsert("Low:\n", 10, "")

        self.midTxtInsert("Min:\n", 10, "")

        if(selection):
            sender = self.sender()
            selectionTxt = QtGui.QTextEdit("", self)
            selectionTxt.setFixedWidth(50)
            selectionTxt.setFixedHeight(30)
            # selectionTxt.setReadOnly(True)
            selectionTxt.setStyleSheet('QTextEdit {background-color: #000000; color: green;}')
            selectionTxt.move(500, 125)
            selectionTxt.setVerticalScrollBarPolicy(QtCore.Qt.ScrollBarAlwaysOff)
            selectionTxt.show()
            selectionTxt.setAlignment(QtCore.Qt.AlignCenter)


            cursor = selectionTxt.textCursor()
            textSelected = cursor.selectedText()
            # s = textSelected.upper()
            print textSelected
            selectionTxt.setText(textSelected)

            self.sigTextButtonClicked.connect(selectionTxt.setText)
            selectionTxt.update()
            self.update()



    def midTxtInsert(self, txt,font, algmt):
        """ UI is split to three region, this is mid part which is in green """
        global topTxt, midTxt, endTxt
        midTxt.setFontPointSize(font)
        if algmt.upper() == "C":
            midTxt.setAlignment(QtCore.Qt.AlignCenter)
        elif algmt.upper() == "R":
            midTxt.setAlignment(QtCore.Qt.AlignRight)
        else:
            midTxt.setAlignment(QtCore.Qt.AlignLeft)
        midTxt.insertPlainText(txt)
        self.update()




def main():
    """ Function main """
    app = QtGui.QApplication(sys.argv)
    ex = Infusion()
    sys.exit(app.exec_())


if __name__ == '__main__':
    main()

而且有效。

首先,我定义信号sigTextButtonClicked = pyqtSignal(QtCore.QString), 然后将它连接到插槽 setText(您可能想定义自己的插槽,例如,在文本字段中获取多位数字):self.sigTextButtonClicked.connect(selectionTxt.setText)

每次点击数字时我都会发出这个信号:

def digitClicked(self):
    sender = self.sender()
    self.sigTextButtonClicked.emit(sender.text())
    print sender.text()

看看这里,语法很清楚:http://pyqt.sourceforge.net/Docs/PyQt4/new_style_signals_slots.html