Python自動化之實現(xiàn)桌面壁紙下載器
隨著計算機(jī)性能的提升,人們對計算機(jī)個性化的要求也越來越高了,自己使用的計算機(jī)當(dāng)然要設(shè)置成自己喜歡的風(fēng)格!
網(wǎng)站上的壁紙分類主要有美圖、動漫、今日熱圖、壁紙等等類型的高清圖片供我們下載。
若是喜歡其中的一些壁紙我們可以手動進(jìn)行下載,但是對于熱衷于python的我們當(dāng)然要實現(xiàn)懶人操作-自動化批量下載。
于是就有了接下來的這個批量桌面壁紙下載器,首先將使用到的技術(shù)棧全部列舉出來供大佬們參考。
- 操作系統(tǒng):windows7
- GUI工具:PyQt5
- 頁面爬蟲:requests
- 系統(tǒng)文件操作庫:os
其中第三方的非標(biāo)準(zhǔn)庫PyQt5、requests需要我們使用pip的方式安裝一下。
pip?install?requests?-i?https://pypi.tuna.tsinghua.edu.cn/simple/ pip?install?PyQt5?-i?https://pypi.tuna.tsinghua.edu.cn/simple/
將代碼塊中需要的相關(guān)python模塊全部導(dǎo)入進(jìn)來。
#?It's?importing?the?traceback?module. import?traceback #?Importing?all?the?classes?from?the?QtWidgets?module. from?PyQt5.QtWidgets?import?* #?Importing?all?the?classes?from?the?QtCore?module. from?PyQt5.QtCore?import?* #?Importing?all?the?classes?from?the?QtGui?module. from?PyQt5.QtGui?import?* #?It's?importing?the?requests?module. import?requests #?It's?importing?the?os?module. import?os #?It's?importing?the?sys?module. import?sys
完成了上述的準(zhǔn)備工作之后,我們創(chuàng)建一個python類WallPaperUI作為GUI布局相關(guān)的操作,將UI布局或使用到的組件全部放到這個類中來開發(fā)。
class?WallPaperUI(QWidget): ????def?__init__(self): ????????""" ????????A?constructor.?It?is?called?when?an?object?is?created?from?a?class?and?it?allows?the?class?to?initialize?the ????????attributes?of?a?class. ????????""" ????????super(WallPaperUI,?self).__init__() ????????self.init_ui() ????def?init_ui(self): ????????""" ????????This?function?initializes?the?UI. ????????""" ????????self.setWindowTitle('批量桌面壁紙下載器??公眾號:Python 集中營') ????????self.setWindowIcon(QIcon('download.ico')) ????????self.resize(500,?200) ????????self.save_dir_path?=?QLineEdit() ????????self.save_dir_path.setPlaceholderText('桌面壁紙保存路徑') ????????self.save_dir_btn?=?QPushButton() ????????self.save_dir_btn.setText('保存路徑') ????????self.save_dir_btn.clicked.connect(self.save_dir_btn_click) ????????self.set_dwonload_num_label?=?QLabel() ????????self.set_dwonload_num_label.setText('設(shè)置下載數(shù)量:') ????????self.set_dwonload_num_in?=?QLineEdit() ????????self.set_dwonload_num_in.setPlaceholderText('例如:10') ????????self.start_btn?=?QPushButton() ????????self.start_btn.setText('立即下載') ????????self.start_btn.clicked.connect(self.start_btn_click) ????????self.brower?=?QTextBrowser() ????????self.brower.setReadOnly(True) ????????self.brower.setFont(QFont('宋體',?8)) ????????self.brower.setPlaceholderText('處理進(jìn)程展示區(qū)域...') ????????self.brower.ensureCursorVisible() ????????hbox?=?QHBoxLayout() ????????left_box?=?QVBoxLayout() ????????left_box.addWidget(self.brower) ????????right_box?=?QVBoxLayout() ????????right_form_box?=?QFormLayout() ????????right_form_box.addRow(self.save_dir_path,?self.save_dir_btn) ????????right_form_box.addRow(self.set_dwonload_num_label,?self.set_dwonload_num_in) ????????right_h_box?=?QHBoxLayout() ????????right_h_box.addWidget(self.start_btn) ????????right_box.addLayout(right_form_box) ????????right_box.addLayout(right_h_box) ????????hbox.addLayout(left_box) ????????hbox.addLayout(right_box) ????????self.download_thread?=?DownloadWork(self) ????????self.download_thread.finished.connect(self.finished) ????????self.download_thread.message.connect(self.show_message) ????????self.setLayout(hbox) ????def?show_message(self,?text): ????????cursor?=?self.brower.textCursor() ????????cursor.movePosition(QTextCursor.End) ????????self.brower.append(text) ????????self.brower.setTextCursor(cursor) ????????self.brower.ensureCursorVisible() ????def?save_dir_btn_click(self): ????????directory?=?QFileDialog.getExistingDirectory(self,?'選擇文件夾',?os.getcwd()) ????????self.save_dir_path.setText(directory) ????def?start_btn_click(self): ????????self.start_btn.setEnabled(False) ????????self.download_thread.start() ????def?finished(self,?finished): ????????if?finished?is?True: ????????????self.start_btn.setEnabled(True)
完成上面的界面組件布局以后GUI界面就出來了,可以看看界面效果如下。
接下來可以開發(fā)下載壁紙的業(yè)務(wù)過程了,為了避免影響頁面主線程的執(zhí)行過程,我們特意使用QThread的子線程來開發(fā)業(yè)務(wù)過程。
創(chuàng)建一個python類DownloadWork繼承自QThread子線程。
class?DownloadWork(QThread): ????finished?=?pyqtSignal(bool) ????message?=?pyqtSignal(str) ????def?__init__(self,?parent=None): ????????super(DownloadWork,?self).__init__(parent) ????????self.working?=?True ????????self.parent?=?parent ????def?__del__(self): ????????self.working?=?False ????def?run(self)?->?None: ????????try: ????????????save_dir_path?=?self.parent.save_dir_path.text().strip() ????????????set_dwonload_num_in?=?self.parent.set_dwonload_num_in.text().strip() ????????????self.message.emit('保存路徑:{}'.format(save_dir_path)) ????????????self.message.emit('下載數(shù)量:{}'.format(set_dwonload_num_in)) ????????????if?save_dir_path?==?'': ????????????????self.message.emit('出現(xiàn)錯誤:保存路徑不能為空!') ????????????????return ????????????if?set_dwonload_num_in?==?'': ????????????????self.message.emit('出現(xiàn)錯誤:下載數(shù)量不能為空!') ????????????????return ????????????for?n?in?range(int(set_dwonload_num_in)): ????????????????pic_url?=?f"http://bingw.jasonzeng.dev?resolution=UHD&index={n}" ????????????????self.message.emit('正在下載第{0}張壁紙!'.format(str(n))) ????????????????with?requests.get(pic_url)?as?r: ????????????????????with?open(os.path.join(save_dir_path,?str(n)?+?'.jpg'),?"wb")?as?w: ????????????????????????w.write(r.content) ????????????self.message.emit('全部壁紙下載完成!') ????????????self.finished.emit(True) ????????except: ????????????traceback.print_exc() ????????????self.message.emit('執(zhí)行錯誤,請檢查參數(shù)項是否設(shè)置正確!') ????????????self.finished.emit(True)
至此,在子線程類DownloadWork中的壁紙下載業(yè)務(wù)就開發(fā)完了。
接下來使用python模塊的mian函數(shù)調(diào)起整個應(yīng)用就大功告成了。
#?A?special?variable?in?Python?that?evaluates?to?True?if?the?module?is?being?run?as?the?main?program. if?__name__?==?'__main__': ????app?=?QApplication(sys.argv) ????main?=?WallPaperUI() ????main.show() ????sys.exit(app.exec_())
最后啟動應(yīng)用,設(shè)置好文件保存路徑,設(shè)置下載10張桌面壁紙看看效果如何?
到此這篇關(guān)于Python自動化之實現(xiàn)桌面壁紙下載器的文章就介紹到這了,更多相關(guān)Python桌面壁紙下載內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python腳本設(shè)置超時機(jī)制系統(tǒng)時間的方法
這篇文章主要介紹了python腳本設(shè)置超時機(jī)制系統(tǒng)時間的方法,感興趣的小伙伴們可以參考一下2016-02-02Pytorch之tensorboard無法啟動和顯示問題及解決
這篇文章主要介紹了Pytorch之tensorboard無法啟動和顯示問題及解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2023-09-095道關(guān)于python基礎(chǔ) while循環(huán)練習(xí)題
這篇文章主要給大家分享的是5道關(guān)于python基礎(chǔ) while循環(huán)練習(xí)題,無論學(xué)習(xí)什么語言,練習(xí)都是必不可少的,下面文章的練習(xí)題挺精湛的,需要的朋友可以參考一下2021-11-11Python使用Selenium爬取淘寶異步加載的數(shù)據(jù)方法
今天小編就為大家分享一篇Python使用Selenium爬取淘寶異步加載的數(shù)據(jù)方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2018-12-12