【发布时间】:2020-09-18 18:24:54
【问题描述】:
我正在尝试创建一个简单的桌面应用程序,它可以获取 IP 地址并使用 REST API(包括国家、城市、isp、regionName 和时区)显示其位置。我的表单中有 5 个复选框,以便用户可以决定将显示哪些数据(城市、国家/地区、isp 等)。
我这样做的方法是为每个复选框使用 5 个 If 语句,这似乎不是一个好方法。 此外,为了将 API 的返回值设置为 lineEdits,我不得不再次为每个 lineEdit 使用 5 个 if 语句。
是否有任何其他方法可以检查哪些复选框被选中,以便我可以使用与这些复选框相关的数据调用 API? 我的sn-p:
def set_params(self,IP):
try:
socket.inet_aton("%s" %IP)
except:
pass #for now
else:
if self.ui.checkBox_City.isChecked():
city = "city"
else:
city = None
if self.ui.checkBox_Country.isChecked():
country = "country"
else:
country = None
if self.ui.checkBox_Rname.isChecked():
Rname = "regionName"
else:
Rname = None
if self.ui.checkBox_ISP.isChecked():
ISP = "isp"
else:
ISP = None
if self.ui.checkBox_Time.isChecked():
time = "timezone"
else:
time = None
param = {"fields": "{},{},{},{},{}".format(country,city,ISP,Rname,time)}
r = requests.get("http://ip-api.com/json/{}".format(IP), params=param)
resdict = r.json()
#print(resdict)
if "country" in resdict.keys():
self.ui.lineEdit_Country.setText(resdict["country"])
if "city" in resdict.keys():
self.ui.lineEdit_City.setText(resdict["city"])
if "isp" in resdict.keys():
self.ui.lineEdit_ISP.setText(resdict["isp"])
if "timezone" in resdict.keys():
self.ui.lineEdit_Time.setText(resdict["timezone"])
if "regionName" in resdict.keys():
self.ui.lineEdit_Country.setText(resdict["regionName"])
【问题讨论】:
标签: python api user-interface checkbox pyqt5