<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
隨著計算機效能的提升,人們對計算機個性化的要求也越來越高了,自己使用的計算機當然要設定成自己喜歡的風格!
網站上的桌布分類主要有美圖、動漫、今日熱圖、桌布等等型別的高清圖片供我們下載。
若是喜歡其中的一些桌布我們可以手動進行下載,但是對於熱衷於python的我們當然要實現懶人操作-自動化批次下載。
於是就有了接下來的這個批次桌面桌布下載器,首先將使用到的技術棧全部列舉出來供大佬們參考。
其中第三方的非標準庫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/
將程式碼塊中需要的相關python模組全部匯入進來。
# 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
完成了上述的準備工作之後,我們建立一個python類WallPaperUI作為GUI佈局相關的操作,將UI佈局或使用到的元件全部放到這個類中來開發。
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('設定下載數量:') 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('處理程序展示區域...') 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介面就出來了,可以看看介面效果如下。
接下來可以開發下載桌布的業務過程了,為了避免影響頁面主執行緒的執行過程,我們特意使用QThread的子執行緒來開發業務過程。
建立一個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('下載數量:{}'.format(set_dwonload_num_in)) if save_dir_path == '': self.message.emit('出現錯誤:儲存路徑不能為空!') return if set_dwonload_num_in == '': self.message.emit('出現錯誤:下載數量不能為空!') 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('執行錯誤,請檢查引數項是否設定正確!') self.finished.emit(True)
至此,在子執行緒類DownloadWork中的桌布下載業務就開發完了。
接下來使用python模組的mian函數調起整個應用就大功告成了。
# 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_())
最後啟動應用,設定好檔案儲存路徑,設定下載10張桌面桌布看看效果如何?
到此這篇關於Python自動化之實現桌面桌布下載器的文章就介紹到這了,更多相關Python桌面桌布下載內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45