-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpyqtcalc.py
137 lines (124 loc) · 3.16 KB
/
pyqtcalc.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
#!/usr/bin/python3
#pyqtcalc
#(c) lasermtv07,2024
#under WTFPL (essentially equivalent to public domain)
from PyQt5.QtWidgets import *
from PyQt5.QtGui import QFont
import math
def romanToInt(num):
s=0
values={"m":1000,"d":500,"c":100,"l":50,"x":10,"v":5,"i":1}
for j in values.keys():
v=values[j]
for i in values.keys():
if (i+j) in num and i!=j:
s+=(v-values[i])*num.count((i+j))
num=num.replace(i+j,"")
if j in num:
s+=v*num.count(j)
num=num.replace(j,"")
return s
def intToRoman(num):
o=""
for i in range(math.floor(num/1000)): o+="m"
num-=1000*o.count("m")
for i in range(math.floor(num/500)): o+="d"
num-=500*o.count("d")
for i in range(math.floor(num/100)): o+="c"
num-=100*o.count("c")
for i in range(math.floor(num/50)): o+="l"
num-=50*o.count("l")
for i in range(math.floor(num/10)): o+="x"
num-=10*o.count("x")
for i in range(math.floor(num/5)): o+="v"
num-=5*o.count("v")
for i in range(num): o+="i"
return o
app=QApplication([])
window=QWidget()
window.setGeometry(100,100,500,200)
window.setWindowTitle("mathin time")
layout=QVBoxLayout()
label=QLabel(window)
label.setText("mathin time")
label.setFont(QFont("Arial",16))
layout.addWidget(label)
isArabic=True
radLayout=QHBoxLayout()
dl=QLabel(window)
dl.setText("Numerical Script: ")
radLayout.addWidget(dl)
ar=QRadioButton("Arabic")
ar.setChecked(True)
ar.script="Arabic"
def arabic():
global isArabic
isArabic=True
ar.toggled.connect(arabic)
radLayout.addWidget(ar)
ar=QRadioButton("Roman")
ar.script="Roman"
def roman():
global isArabic
isArabic=False
ar.toggled.connect(roman)
radLayout.addWidget(ar)
layout.addLayout(radLayout)
res=QLabel(window)
res.setText("0")
res.setFont(QFont("Arial",16))
proLayout=QHBoxLayout()
inpt1=QLineEdit("")
proLayout.addWidget(inpt1)
op=QComboBox()
op.addItems(['+','-','*','/'])
proLayout.addWidget(op)
inpt2=QLineEdit("")
proLayout.addWidget(inpt2)
def handleProblem():
global isArabic
global inpt1
global op
global inpt2
global res
i1=inpt1.text()
o=op.currentText()
i2=inpt2.text()
if isArabic:
try:
i1=float(i1)
i2=float(i2)
if o=='+':
res.setText(str(i1+i2))
elif o=='-':
res.setText(str(i1-i2))
elif o=='*':
res.setText(str(i1*i2))
elif o=='/':
res.setText(str(i1/i2))
except:
res.setText("Error!")
else:
i1=romanToInt(i1.lower())
print(i1)
i2=romanToInt(i2.lower())
print(i2)
if o=='+':
res.setText(intToRoman(i1+i2))
elif o=='-':
res.setText(intToRoman(i1-i2))
elif o=='*':
res.setText(intToRoman(i1*i2))
elif o=='/':
if i2==0:
res.setText("Error!")
else:
res.setText(intToRoman(i1/i2))
eq=QPushButton("=")
proLayout.addWidget(eq)
eq.clicked.connect(handleProblem)
layout.addLayout(proLayout)
layout.addWidget(res)
window.setLayout(layout)
window.show()
app.exec_()