設計了一個簡易的Python GUI界面

2021-03-02 小數志
我們都知道GUI界面設計不是python的強項,但作為萬金油程式語言,python也並不是不支持GUI開發。

 

00 目標提出

設計一個支持多個招聘網站的檢索,可以通過指定目標城市、檢索職業和查詢數量,個性化輸出檢索結果,爾後將結果顯示在界面並保存於文檔中。

 

01 基本思路

 

02 核心代碼

class JobCrawler:
    def __init__(self, city, jobName, page):
        self.city = city
        self.jobName = jobName
        self.page = page

    def get_jobs_51job(self):
        citys = {'北京': '010000', }
        try :
            cityID = citys[self.city]
        except:
            cityID = "000000"
        url = "https://search.51job.com/list/{},000000,0000,00,9,99,{},2,{}.html".format(cityID, self.jobName, str(self.page))
        response = requests.get(url, headers = HEADERS)
        html = etree.HTML(response.text)
        contents = html.xpath("//div[@class='dw_table']/div[@class='el']") 
        jobs = []
        for content in contents:
            try:
                
                jobs.append(job)
            except:
                pass
        return jobs   

    def get_jobs_zhilian(self):
        url = "https://fe-api.zhaopin.com/c/i/sou?"
        params = {"start":(self.page-1)*50, "cityId":self.city, "kt":3, "kw":self.jobName, "pageSize":50}
        response = requests.get(url = url, headers = HEADERS, params = params)
        dic_results = json.loads(response.text)
        results = dic_results['data']['results']
        jobs = []
        for result in results:
            try:
                
                jobs.append(job)
            except:
                pass
        return jobs

    def get_jobs_liepin(self):
        citys = {'北京': 'city-bj/', }
        try :
            cityID = citys[self.city]
        except:
            cityID = ""
        url = "https://www.liepin.com/{0}zhaopin/pn{2}/?key={1}&pageSize=50".format(cityID, self.jobName, str(self.page-1))
        response = requests.get(url, headers = HEADERS)
        html = etree.HTML(response.text)
        joblist = html.xpath('//ul[@data-selector="result-list"]/li')
        jobs=[]
        for job in joblist:
            try:
                
                jobs.append(jobinfo)
            except:
                pass
        return jobs   


class JobHelper(object):
    def __init__(self):
        qfile_jh = QFile("ui/jobhelper.ui")
        qfile_jh.open(QFile.ReadOnly)
        qfile_jh.close()
        self.ui = QUiLoader().load(qfile_jh)
        self.ui.plainTextEdit.setReadOnly(True)
        self.ui.pushButton_search.clicked.connect(self.search)
        self.ui.pushButton_clear.clicked.connect(self.clearJobs)

    def search(self):
        Web = self.ui.comboBox_PT.currentText()
        if self.ui.radioButton_select.isChecked():
            city = self.ui.comboBox_citys.currentText()
        elif self.ui.radioButton_enter.isChecked():
            city = self.ui.lineEdit_cityInput.text()
            if not city.strip():
                QMessageBox.about(self.ui,'Warning',"請輸入城市")
                return
            else :
                try:
                    with open("ui/location.txt","r") as f:
                        citys = f.read()
                    citys = citys.split("\n")
                    if city not in citys:
                        QMessageBox.about(self.ui,'Warning',"輸入城市可能有誤…")
                        return
                except:
                    QMessageBox.about(self.ui,'Warning',"讀取城市列表失敗")
                    return
        else:
            QMessageBox.about(self.ui,'Warning',"請選擇城市")
            return
        
        jobName = self.ui.lineEdit_jobName.text()
        if not jobName.strip():
            QMessageBox.about(self.ui,'Warning',"請輸入待查詢職業")
            return
        return

    

    def clearJobs(self):
        self.ui.plainTextEdit.setPlainText("")
        return


def mylen(s):
    mylen = len(s)
    for c in s:  
        if u'\u4e00' <= c <= u'\u9fa5':
            mylen += 1
            return mylen

def setstr(s, length):
    if mylen(s) <= length:
        return s + ' ' * (length - mylen(s))
    else:
        for index in range(int(length / 2) - 4, length - 3):
            ss = s[0:index]
            if mylen(ss) >= length - 3:
                break
            return ss + "." * (length - mylen(ss))

 

03 運行情況

啟動界面

檢索結果示例

點個在看可好

相關焦點

  • Python使用tkinter製作一個簡易的繪圖程序四(Python GUI編程)
    前幾篇,我們使用Python中tkinter庫製作了一個簡易的畫圖板程序,實現了圓、橢圓、矩形、直線等圖形的繪製功能。但是,繪圖效果沒有想像中好看,我們只是拖動滑鼠實現了繪圖功能,對於滑鼠當前位置及我們要繪製的圖形的樣子是什麼?
  • python教程之十GUI界面
    前言python提供了幾個開發GUI界面的庫, wsPython是python一款優秀的GUI圖形庫,要安裝wsPython庫後才可以使用。Jython庫是Python語言在Java中的完全實現,要安裝jython庫後才可以使用。
  • Python 的圖形界面(GUI)編程?
    公眾號暱稱:一個程式設計師的日常 ,公眾號ID:smcode2016公眾號文章保持幾乎與專欄的同步,這樣方便一些平常不怎麼刷知乎的朋友使用,同時公眾號將持續更新一些免費的教程資料給大家今天的想寫的文章來源一個題目:Python 的跨平臺圖形界面編程選用哪個庫為好?
  • PyAutoGUI:自動化鍵鼠操作的Python類庫
    截圖函數操作實例首先來看看官網的一個畫圖例子,我們需要打開一個畫圖程序的窗口,然後將它放到全屏。然後運行下面的代碼,然後切換到畫圖窗口。等待3秒鐘以後就可以看到PyAutoGUI開始畫圖了。import pyautoguidistance = 100pyautogui.moveTo(400, 300)while distance > 0: pyautogui.drag(distance, 0, duration=0.1) distance -= 5 pyautogui.drag(0, distance, duration=0.1)
  • python gui 中三大框架tkinter,wxpython, pyqt如何選擇
    我們都知道當一個東西比較匱乏的時候,我們會比較苦惱,苦惱找不到好的替代。但是但一個東西比較豐富的時候,我們也會苦惱,苦惱的是如何進行選擇。就比如每天我們都面臨的一個巨大的難題就是今天中午吃什麼?python開發圖形界面也有這樣的煩惱,有很多gui框架提供我們選擇,讓我們眼花繚亂,我們很難從中選擇一個。下面我簡單介紹下主流的三個python gui框架。
  • 用 Python 打造屬於自己的GUI圖形化界面
    圖形化界面—>用於設計籤名的哦(效果如下圖),是不是感覺很好玩,是不是很想學習呢?thinter的簡單應用Thinter是python的標準GUI庫。python使用Tkinter可以快速地創建GUI應用程式。當然常用的GUI庫還有PyQt5,我們只需要知道這兩個常用的即可,如果你真的想學習的話。由於Thinter屬於python標準庫,就不需要使用pip安裝,直接導入使用即可。
  • Python使用tkinter製作一個簡易的繪圖程序一(Python GUI編程)
    但是,tkinter唯一美中不足的是它的性能問題,它不具備如QT等一些第三方庫的性能,在同一應用程式中設計了關於獲取系統性能的一些功能,tkinter就顯得非常慢(參加Python高手養成關於系統性能查看器製作的內容),雖然其性能可以通過不同的方法得到提升,但這是後話,我們後續章節進行討論。今天結合一個實例,帶大家一起見識一下tkinter的基本使用方法。
  • Python使用tkinter製作一個簡易的繪圖程序二(Python GUI編程)
    上節課,我們使用Python中tkinter庫製作了一個簡易的畫圖板程序,基本實現了圓、橢圓、矩形、直線等圖形的繪製功能。但是,效果還不是很令人滿意,我們的多邊形還不能正確繪製。這一節我們對多邊形繪製功能進行完善。
  • Python GUI項目實戰(一)登錄窗體的設計與實現
    前言前面我們學習了Python GUI 圖型化界面Tkinter的基礎知識,為了檢測我們的學習成果,學以致用。我們從今天開始做一個綜合Tkinter案例--基於Tkinter的學生信息管理系統,一方面熟悉Tkinter項目的開發,另一方面可以把我們前面的學習專輯《小雨學Python》的知識綜合在一起。
  • python辦公自動化:PyAutoGUI入門秘笈一
    學好PyAutoGUI,讓機器幫你幹活就能實現這麼舒爽的目標有同學看了以前對python辦公自動化:讓PyAutoGUI來幫你幹活,很感興趣,開始動手實踐。但是遇到很多問題,怎麼能讓大家能更快的入門PyAutoGUI呢,特地準備了以下系列,從入門到使用技巧,對PyAutoGUI做了全方位的解讀。
  • Python和Qt開發簡單的GUI應用(電子書及視頻教程)
    課程優惠連結:https://www.udemy.com/create-simple-gui-applications-with-python-and-qt/?couponCode=BLOG9電子書在線免費閱讀:https://leanpub.com/create-simple-gui-applications/read#leanpub-auto-qt-and-pyqt 配套視頻教程也可以通過編程派的微信號獲取,只需回復關鍵詞「pyvideo02」即可獲得百度網盤分享連結及提取碼。
  • 21個免費的UI界面設計工具、資源及網站
    來自51CTO的文章,本文將介紹一些UI界面與設計使用的元素、軟體和網站。
  • 給你Python程序構建一個優雅的終端CLI界面
    , file=open('chongchong.out', 'w'))我們可以利用click在命令行中實現對這些參數的輸入和解析,實現一個簡單的列印命令行界面。廢話少說直接上代碼:#!執行如下:列印文本python print.py hello,chongchong!顯示幫助python print.py –help設置分割符號python print.py -s %% hello chongchong!
  • 使用Python製作一個帶GUI界面的詞雲自動生成工具(一)
    嗯,比如老闆想讓你統計一下……);想知道一個名人一篇講話稿中的主要觀點和立場(對時局和觀點進行分析時使用),等等諸多想知道……在做引言中的這些統計時如果我們有一個稱手的工具,把文章或者講話稿放到工具裡面,簡單進行一下設置,然後輸出關於這篇文章或講話稿的詞雲(不敢想像,這樣節省了多少人力),這個工具像魔法箱一樣,是不是很酷?
  • Python快速入門的方法
    那麼,作為一個新手,如何才能快速並有效的入門呢?0.快速入門《和孩子一起學編程》這本書說是給兒童設計的,所以內容比較生動。非常非常非常簡單易懂 不用花太長時間就能看下來一遍。import一個easygui,初學者分分鐘做個圖形界面出來,對於初學python,成就感!!
  • 零基礎學習python GUI編程(PyQt)系列之一:開發軟體安裝
    在使用python進行界面編程時,很多開發者都是用了PyQt這個框架進行,PyQt是一個跨平臺的框架。它是用C ++編寫的。這是一個非常全面的庫。它包含許多工具和API。它被廣泛應用於許多行業。它涵蓋了很多平臺。PyQt是Qt庫的Python版本。
  • 教你如何用Python製造一款自動化辦公軟體腳本!下班,下班
    1 PySimpleGUI安裝在命令行/終端輸入:pip install pysimplegui,等待安裝完成後,進入python環境,輸入import
  • Python用PyQt5設計界面,如何正確顯示一幅圖片,QPixmap控制項詳解
    ,PyQt圖形界面編程之QColorDialogQt圖形界面編程之QFileDialog類,Python用PyQt5製作文件對話框如何通過Qt界面設置字體屬性,Python中PyQt5的QFontDialog類詳解今天,我們繼續掌握一個很重要的控制項QPixmap控制項
  • 使用Python製作一個帶GUI界面的詞雲自動生成工具(連載三)
    我們開始吧目標一、第一個頁面兩個方法的實現(不要問我為什麼先實現這兩個方法,因為第二個界面要和第一個界面交互)二、第二個頁面界面GUI實現的前置知識點分析一、第一個頁面的openFile方法實現的功能是彈出打開文件對話框,打開所選擇的文本文件,並將文件內容顯示在ScrolledText控制項中;nextPage方法比較簡單,當點擊按鈕時,由當前Page轉到下一個Page即可。
  • 從零開始用 PyQt5 寫一個 scihub 下載器(二)
    在上一次的教程中,我們已經設計了程序界面,並生成了界面的 .py 腳本。