If you have PySide installed on your machine, the following will create a dialog that does what you want.
IMO, PySide is much easier to use than Tk, and you can very quickly create little applications like this which work quite nicely.
![enter image description here]()
from PySide import QtGui, QtCore
import sys
"""
This class just sets up the actual dialog widget, and puts everything in place.
It was mostly just generated by Qt Designer & pyside-uic though, so there's
no real need to understand it all.
"""
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(402, 182)
self.gridLayout = QtGui.QGridLayout(Dialog)
self.gridLayout.setObjectName("gridLayout")
self.label_formula12 = QtGui.QLabel(Dialog)
self.label_formula12.setObjectName("label_formula12")
self.gridLayout.addWidget(self.label_formula12, 3, 0, 1, 2)
self.buttonBox = QtGui.QDialogButtonBox(Dialog)
self.buttonBox.setOrientation(QtCore.Qt.Horizontal)
self.buttonBox.setStandardButtons(QtGui.QDialogButtonBox.Ok)
self.buttonBox.setObjectName("buttonBox")
self.gridLayout.addWidget(self.buttonBox, 5, 0, 1, 2)
self.label_v1 = QtGui.QLabel(Dialog)
self.label_v1.setObjectName("label_v1")
self.gridLayout.addWidget(self.label_v1, 0, 0, 1, 1)
self.lineEdit_v1 = QtGui.QLineEdit(Dialog)
self.lineEdit_v1.setObjectName("lineEdit_v1")
self.gridLayout.addWidget(self.lineEdit_v1, 0, 1, 1, 1)
self.label_v2 = QtGui.QLabel(Dialog)
self.label_v2.setObjectName("label_v2")
self.gridLayout.addWidget(self.label_v2, 1, 0, 1, 1)
self.lineEdit_v2 = QtGui.QLineEdit(Dialog)
self.lineEdit_v2.setObjectName("lineEdit_v2")
self.gridLayout.addWidget(self.lineEdit_v2, 1, 1, 1, 1)
self.label_bevel = QtGui.QLabel(Dialog)
self.label_bevel.setObjectName("label_bevel")
self.gridLayout.addWidget(self.label_bevel, 2, 0, 1, 2)
spacerItem = QtGui.QSpacerItem(20, 40, QtGui.QSizePolicy.Minimum, QtGui.QSizePolicy.Expanding)
self.gridLayout.addItem(spacerItem, 4, 0, 1, 2)
self.label_v1.setBuddy(self.lineEdit_v1)
self.label_v2.setBuddy(self.lineEdit_v2)
self.retranslateUi(Dialog)
QtCore.QObject.connect(self.buttonBox, QtCore.SIGNAL("accepted()"), Dialog.accept)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle("Formula 12")
self.label_formula12.setText("Formula 12")
self.label_v1.setText("Value &1:")
self.label_v2.setText("Vaule &2:")
self.label_bevel.setText("Bevel")
"""
Here we add the actual functionality to the widgets in the dialog. The
functionality it simple, there are just a few differences from Tk, namely the
use of `signals` and `slots`. The
"""
class MainWindow(QtGui.QDialog):
def __init__(self,parent=None):
super(MainWindow, self).__init__(parent)
self.ui = Ui_Dialog()
self.ui.setupUi(self)
self.ui.lineEdit_v1
qDoubleValidator = QtGui.QDoubleValidator()
self.ui.lineEdit_v1.setText("0.0")
self.ui.lineEdit_v2.setText("0.0")
"""
Here's the magic that forces the numbers in the `lineEdit`s to be
real numbers.
"""
self.ui.lineEdit_v1.setValidator(qDoubleValidator)
self.ui.lineEdit_v2.setValidator(qDoubleValidator)
"""
Signals and Slots. The first set wait until editing is finished - i.e.
when foucs leaves the box. The second set offer real time updating.
"""
#self.ui.lineEdit_v1.editingFinished.connect(self.updateValues)
#self.ui.lineEdit_v2.editingFinished.connect(self.updateValues)
self.ui.lineEdit_v1.textEdited.connect(self.updateValues)
self.ui.lineEdit_v2.textEdited.connect(self.updateValues)
self.updateValues()
def updateValues(self):
try:
self.value1 = float(self.ui.lineEdit_v1.text())
self.value2 = float(self.ui.lineEdit_v2.text())
self.bevel = self.calculateBevel()
self.formula12 = self.calculateFormula12()
self.ui.label_bevel.setText("Bevel = %10.5f" % self.bevel)
self.ui.label_formula12.setText("Formula12 = %10.5f" % self.formula12)
except ValueError:
print "one of the values could not be cast to a float"
def calculateBevel(self):
return 3.5 * 2 * (self.value1 + self.value2) / 100
def calculateFormula12(self):
return 2.4 * 1.1 * (self.bevel + 44 + 86.67 * self.value1 * self.value2 / 10000)
def main():
app = QtGui.QApplication(sys.argv)
myapp = MainWindow()
myapp.show()
sys.exit(app.exec_())
if __name__ == '__main__':
main()