Первым делом необходимо спроектировать классы, в случае PunchWindow у вас должен быть метод для обновления txtDataField и сигнал, который отправляет данные в MainWindow.С другой стороны, в MainWindow каждый раз, когда вы нажимаете на кнопки, вы должны обновлять txtDataField, используя метод, который был упомянут изначально, а затем в слоте, связанном с signalPassDataToMainForm, вы должны различать соответствующее поле.
import sys
from functools import partial
from PyQt5 import QtCore, QtWidgets, uic
qtCreatorFile = "MainWinForm.ui"
Ui_MainWindow, QtBaseClass = uic.loadUiType(qtCreatorFile)
qtCreatorFileKeyPad = "NumPadForm.ui"
Ui_KeyPad, QtBaseClass = uic.loadUiType(qtCreatorFileKeyPad )
class PunchWindow(QtWidgets.QMainWindow, Ui_KeyPad):
signalPassDataToMainForm = QtCore.pyqtSignal(str, str)
def __init__(self, parent=None):
super(PunchWindow, self).__init__(parent)
self.setupUi(self)
self.move(850, 200) #Center Screen
buttons = (self.btnOne, self.btnTwo, self.btnThree, self.btnFour,
self.btnFive, self.btnSix, self.btnSeven, self.btnEight,
self.btnNine, self.btnZero, self.btnDot, self.btnBackSpace,
self.btnClear)
vals = (1, 2, 3, 4, 5, 6, 7, 8, 9, 0, ".", "BS", "Clear")
for button, val in zip(buttons, vals):
button.clicked.connect(partial(self.numberPad, val))
self.btnEnter.clicked.connect(self.enter)
@QtCore.pyqtSlot(str)
def setCurrentField(self, text):
self.txtDataField.setPlainText(text)
def numberPad(self, n):
strField = self.txtDataField.toPlainText()
if strField in ("Field1", "Field2", "Field3"):
strValue = self.txtDataToPass.toPlainText()
strN = str(n)
if strN == "BS":
self.txtDataToPass.setPlainText(strValue[:-1])
elif strN == "Clear":
self.txtDataToPass.clear()
else:
strValue += strN
self.txtDataToPass.setPlainText(strValue)
@QtCore.pyqtSlot()
def enter(self):
strFieldNo = self.txtDataField.toPlainText()
strSendData = self.txtDataToPass.toPlainText()
self.signalPassDataToMainForm.emit(strFieldNo, strSendData)
class MainWindow(QtWidgets.QMainWindow, Ui_MainWindow):
def __init__(self, parent=None):
super(MainWindow, self).__init__(parent)
self.setupUi(self)
self.move(450, 200) #Center Screen
buttons = (self.btnField1, self.btnField2, self.btnField3)
fields = ("Field1", "Field2", "Field3")
for button, field in zip(buttons, fields):
button.clicked.connect(partial(self.updatePunch, field))
self.punch = PunchWindow()
self.punch.signalPassDataToMainForm.connect(self.updateField)
@QtCore.pyqtSlot(str, str)
def updateField(self, strField, strData):
if strField == "Field1":
self.txtData1.setText(strData)
elif strField == "Field2":
self.txtData2.setText(strData)
elif strField == "Field3":
self.txtData3.setText(strData)
@QtCore.pyqtSlot()
def updatePunch(self, field):
self.punch.setCurrentField(field)
self.punch.show()
if __name__ == '__main__':
app = QtWidgets.QApplication(sys.argv)
MW = MainWindow()
MW.show()
sys.exit(app.exec_())