前提・実現したいこと
下のようなGUIにおいて,AzimuthとDistanceに値を入力してCalculateを押すと緯距と経距の計算ができるプログラムを作りました.
これにおいて,AzimuthとDistanceの入力欄で入力がなかった場合は,0が入力されたとして計算できるようにしたいです.
発生している問題・エラーメッセージ
今のプログラムでは,入力がなければ以下のようなエラーメッセージが出ます.
PS C:\Users\survey\Documents\traum\py_calc_lat_lon> python .\factorial_latlon.py Traceback (most recent call last): File ".\factorial_latlon.py", line 102, in calc min = int(self.inputMinute.text()) ValueError: invalid literal for int() with base 10: ''
該当のソースコード
python
1#!/usr/bin/env python 2#have to convert to radian 3 4from PyQt5.QtWidgets import (QApplication, QWidget, 5 QGridLayout, QVBoxLayout, QHBoxLayout, 6 QLabel, QLineEdit, QPushButton) 7from math import * 8from decimal import Decimal, ROUND_HALF_UP 9 10 11#how2calculate 12def conv2deg(deg,min,sec): 13 go_deg = deg+min/60+sec/3600 14 return go_deg 15 16def deg2rad(deg): 17 rad = radians(deg) 18 return rad 19 20def calc_lat(distance,rad): 21 lat = distance * cos(rad) 22 return lat 23 24def calc_lon(distance,rad): 25 lon = distance * sin(rad) 26 return lon 27 28def factorial(n): 29 if n < 0: 30 return -1 31 elif n == 0: 32 return 1 33 else: 34 return n * factorial(n-1)#calcuation 35#GUI 36class MainWindow(QWidget): 37 def __init__(self, parent=None): 38 super(MainWindow, self).__init__(parent) 39 #input 40 self.inputDegree = QLineEdit() 41 self.inputMinute = QLineEdit() 42 self.inputSecond = QLineEdit() 43 self.inputDistance = QLineEdit() 44 #output 45 self.outputLat = QLineEdit() 46 self.outputLat.setReadOnly(True) 47 self.outputLon = QLineEdit() 48 self.outputLon.setReadOnly(True) 49 #button 50 self.calcButton = QPushButton("&Calculate") 51 self.calcButton.clicked.connect(self.calc) 52 #place_input for Azimuth 53 lineLayout_1 = QGridLayout() 54 lineLayout_1.addWidget(QLabel("Azimuth"), 0, 0) 55 lineLayout_1.addWidget(self.inputDegree, 0, 1) 56 lineLayout_1.addWidget(QLabel("°"), 0, 2) 57 lineLayout_1.addWidget(self.inputMinute, 0, 3) 58 lineLayout_1.addWidget(QLabel("'"), 0, 4) 59 lineLayout_1.addWidget(self.inputSecond, 0, 5) 60 lineLayout_1.addWidget(QLabel("''"), 0, 6) 61 #place_input for Distance 62 lineLayout_3 = QGridLayout() 63 lineLayout_3.addWidget(QLabel("Distance"),0,0) 64 lineLayout_3.addWidget(self.inputDistance, 0, 1) 65 66 lineLayout_2 = QGridLayout() 67 lineLayout_2.addWidget(QLabel("緯距(X)"), 0, 0) 68 lineLayout_2.addWidget(self.outputLat, 0, 1) 69 lineLayout_2.addWidget(QLabel("経距(Y)"), 0, 2) 70 lineLayout_2.addWidget(self.outputLon, 0, 3) 71 72 buttonLayout = QVBoxLayout() 73 # buttonLayout = QHBoxLayout() 74 # buttonLayout.addLayout(lineLayout_1) 75 # buttonLayout.addLayout(lineLayout_2) 76 buttonLayout.addWidget(self.calcButton) 77 78 # mainLayout = QHBoxLayout() 79 mainLayout = QVBoxLayout() 80 mainLayout.addLayout(lineLayout_1) 81 mainLayout.addLayout(lineLayout_3) 82 mainLayout.addLayout(lineLayout_2) 83 # mainLayout.addLayout(buttonLayout) 84 85 # buttonLayout = QVBoxLayout() 86 AllLayout = QHBoxLayout() 87 AllLayout.addLayout(mainLayout) 88 AllLayout.addLayout(buttonLayout) 89 # buttonLayout.addLayout(lineLayout_2) 90 # buttonLayout.addWidget(self.calcButton) 91 92 self.setLayout(AllLayout) 93 self.setWindowTitle("緯距・経距計算") 94 95 # def calc(self): 96 # n = int(self.inputLine.text())##input 97 # r = factorial(n) 98 # self.outputLine.setText(str(r)) 99 100 def calc(self): 101 deg = int(self.inputDegree.text()) 102 min = int(self.inputMinute.text()) 103 sec = int(self.inputSecond.text()) 104 distance = float(self.inputDistance.text()) 105 # n = int(self.inputLine.text())##input 106 all_deg = conv2deg(deg,min,sec) 107 # r = factorial(n) 108 rad = deg2rad(all_deg) 109 lat = calc_lat(distance,rad) 110 lon = calc_lon(distance,rad) 111 round_lat = round(lat,3) 112 round_lon = round(lon,3) 113 round_lat = Decimal(round_lat).quantize(Decimal('0.001'), rounding=ROUND_HALF_UP) 114 round_lon = Decimal(round_lon).quantize(Decimal('0.001'), rounding=ROUND_HALF_UP) 115 self.outputLat.setText(str(round_lat)) 116 self.outputLon.setText(str(round_lon)) 117 # self.outputLat.setText(Decimal(str(round_lat)).quantize(Decimal('0.001',rounding = ROUND_HALF_UP))) 118 # self.outputLon.setText(str(round_lon)) 119 120if __name__ == '__main__': 121 import sys 122 app = QApplication(sys.argv) 123 main_window = MainWindow() 124 125 main_window.show() 126 sys.exit(app.exec_())
補足情報(FW/ツールのバージョンなど)
Windows10 64bit, Python 3.5.5
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/18 00:37