导语
今天刷抖音刷到了一组特别好看的星云宇宙:星星眼.jpg。
我们与那些遥远的星系息息相关
无论它们是如何与我们天各一方
那些经过数十亿年旅行到达地球的光线
终究会把我们联系在一起!后面自己查询了一些宇宙星云不同的照片等等,真的超美~
想知道你生日那天,哈勃空间望远镜观察到的宇宙是什么样的吗?
“你生日那天的宇宙”听起来非常神秘而浪漫,今天小编自己动手丰衣足食带大家做一款随时可以查询自己生日那天的宇宙星云的小软件~
正文
环境安装部分:Python版本:3.6 相关模块:PyQt5模块;requests模块;lxml模块;openpyxl模块;
pillow模块;以及一些Python自带的模块。
首先,我们可以在官网下载到一个excel表格,表格里记录了每个日期哈勃望远镜拍到的宇宙对应的介绍页链接。
(1)定义组件:按钮,日期、布局等。
# 定义组件
# --label
self.month_label = QLabel('出生月:')
self.day_label = QLabel('出生日:')
self.show_label = QLabel()
self.show_label.setScaledContents(True)
self.show_label.setMaximumSize(400, 300)
self.showLabelImage(Image.open('resources/icon/icon.jpg'))
# --显示介绍文字的text
self.text_result = QTextEdit()
# --日期选择下拉框
self.month_combobox = QComboBox()
for item in range(1, 13):
self.month_combobox.addItem(str(item).zfill(2))
self.day_combobox = QComboBox()
for item in range(1, 32):
self.day_combobox.addItem(str(item).zfill(2))
# --按钮
self.query_button = QPushButton()
self.query_button.setText('查询')
self.save_button = QPushButton()
self.save_button.setText('保存')
# 布局
self.grid = QGridLayout()
self.grid.setSpacing(12)
self.grid.addWidget(self.show_label, 0, 0, 10, 10)
self.grid.addWidget(self.text_result, 0, 10, 10, 10)
self.grid.addWidget(self.month_label, 10, 0, 1, 1)
self.grid.addWidget(self.month_combobox, 10, 1, 1, 1)
self.grid.addWidget(self.day_label, 10, 2, 1, 1)
self.grid.addWidget(self.day_combobox, 10, 3, 1, 1)
self.grid.addWidget(self.query_button, 10, 10, 1, 1)
self.grid.addWidget(self.save_button, 10, 11, 1, 1)
self.setLayout(self.grid)
# 事件绑定
self.query_button.clicked.connect(lambda _: threading.Thread(target=self.query).start())
self.save_button.clicked.connect(self.save)
self.update_signal.connect(self.update)
# 一些必要的变量
self.is_querying = False
self.full_year_data = self.loadFullYearData('resources/hubble-birthdays-full-year.xlsx')
self.data_for_save = None
(2)读取这个excel表格:
'''导入excel中的全年数据'''
def loadFullYearData(self, filepath):
full_year_data = {}
excel_data = load_workbook(filepath)
sheet = excel_data.get_sheet_by_name('365')
for idx, row in enumerate(sheet.rows):
if idx > 366: break
if idx > 0: full_year_data[row[0].value.strftime('%Y-%m-%d')[5:]] = row[4].value
return full_year_data
(3)然后根据用户输入的日期来获得对应的介绍页链接就好啦:
url = self.full_year_data.get(key)
(4)保存结果:
'''保存查询结果'''
def save(self):
if self.data_for_save:
if not os.path.exists(self.data_for_save.get('date')):
os.mkdir(self.data_for_save.get('date'))
imagepath = os.path.join(self.data_for_save.get('date'), 'hubblesee.%s' % self.data_for_save.get('ext'))
self.data_for_save.get('image').save(imagepath)
intro = '\n\n'.join(self.data_for_save.get('intro'))
f = open(os.path.join(self.data_for_save.get('date'), 'intro.txt'), 'w', encoding='utf-8')
f.write(intro)
f.close()
self.data_for_save = None
效果图:

总结
源码基地免费获取项目:#959755565#
随手发下小编生日那天的宇宙,快来晒晒你们的叭~