1. 如何只用一行Python代碼制作一個GUI(圖形界面)?

        共 4036字,需瀏覽 9分鐘

         ·

        2022-05-19 15:04


        GUI(圖形用戶界面),顧名思義就是用圖形的方式,來顯示計算機操作的界面,更加方便且直觀。


        一個好看又好用的GUI,可以大大提高大家的使用體驗,提高效率。


        比如你想開發(fā)一個計算器,如果只是一個程序輸入,輸出窗口的話,是沒有用戶體驗的。


        所以開發(fā)一個圖形化的小窗口,就變得很有必要。


        今天,小F就給大家介紹如何只用一行Python代碼制作一個GUI。


        主要使用Python的PySimpleGUI庫來完成這個工作。


        #?安裝PySimpleGUI
        pip?install?PySimpleGUI?-i?https://mirror.baidu.com/pypi/simple


        詳細的接口文檔地址如下。

        https://pysimplegui.readthedocs.io/en/latest/call%20reference/



        ▍1、選擇文件夾


        首先導入PySimpleGUI庫,并且用縮寫sg來表示。


        import?PySimpleGUI?as?sg

        #?窗口顯示文本框和瀏覽按鈕,?以便選擇一個文件夾
        dir_path?=?sg.popup_get_folder("Select?Folder")
        if?not?dir_path:
        ????sg.popup("Cancel",?"No?folder?selected")
        ????raise?SystemExit("Cancelling:?no?folder?selected")
        else:
        ????sg.popup("The?folder?you?chose?was",?dir_path)


        通過使用PySimpleGUI的popup_get_folder()方法,一行代碼就能實現(xiàn)選擇文件夾的操作。


        示例如下。



        點擊Browse按鈕,選擇文件夾,文本框就會顯示出文件夾的絕對路徑。


        點擊OK按鈕,顯示最終選擇的路徑信息,再次點擊OK按鈕,結(jié)束窗口。



        如果沒有選擇文件夾,而是直接點擊OK按鈕,會直接提示沒有選取文件夾。



        ▍2、選擇文件


        選擇文件操作和上面選擇文件夾的有點相似。


        不同的是,選擇文件可以設(shè)置multiple_files(是否為多個文件)和file_types(文件類型)參數(shù)。


        #?窗口顯示文本框和瀏覽按鈕,?以便選擇文件
        fname?=?sg.popup_get_file("Choose?Excel?file",?multiple_files=True,?file_types=(("Excel?Files",?"*.xls*"),),)
        if?not?fname:
        ????sg.popup("Cancel",?"No?filename?supplied")
        ????raise?SystemExit("Cancelling:?no?filename?supplied")
        else:
        ????sg.popup("The?filename?you?chose?was",?fname)


        示例如下。



        選擇了多個Excel文件,最終結(jié)果返回了所有文件的路徑地址。



        ▍3、選擇日期


        使用popup_get_date()方法,顯示一個日歷窗口。


        #?顯示一個日歷窗口,?通過用戶的選擇,?返回一個元組(月,?日,?年)
        date?=?sg.popup_get_date()
        if?not?date:
        ????sg.popup("Cancel",?"No?date?picked")
        ????raise?SystemExit("Cancelling:?no?date?picked")
        else:
        ????sg.popup("The?date?you?chose?was",?date)


        示例如下。



        選擇好日期后,點擊OK按鈕,即可返回日期元組結(jié)果。



        ▍4、輸入文本


        使用popup_get_text()方法,顯示一個文本輸入框。


        #?顯示文本輸入框,?輸入文本信息,?返回輸入的文本,?如果取消則返回None
        text?=?sg.popup_get_text("Please?enter?a?text:")
        if?not?text:
        ????sg.popup("Cancel",?"No?text?was?entered")
        ????raise?SystemExit("Cancelling:?no?text?entered")
        else:
        ????sg.popup("You?have?entered",?text)


        鍵入信息,示例如下。



        點擊OK按鈕,返回輸入的文本信息。


        如果沒有輸入,直接點擊OK按鈕,會提示沒有文本輸入。



        ▍5、彈窗無按鈕


        #?顯示一個彈窗,?但沒有任何按鈕
        sg.popup_no_buttons("You?cannot?click?any?buttons")


        結(jié)果如下。



        ▍6、彈窗無標題


        #?顯示一個沒有標題欄的彈窗
        sg.popup_no_titlebar("A?very?simple?popup")


        結(jié)果如下。




        ▍7、彈窗只有OK按鈕


        #?顯示彈窗且只有OK按鈕
        sg.popup_ok("You?can?only?click?on?'OK'")


        結(jié)果如下。




        ▍8、彈窗只有Error按鈕(紅色)


        #?顯示彈窗且只有error按鈕,?按鈕帶顏色
        sg.popup_error("Something?went?wrong")


        結(jié)果如下。




        ▍9、顯示通知窗口


        #?顯示一個“通知窗口”,?通常在屏幕的右下角,?窗口會慢慢淡入淡出
        sg.popup_notify("Task?done!")


        結(jié)果如下, Task done提示信息淡入淡出。




        ▍10、彈窗選擇


        #?顯示彈窗以及是和否按鈕,?選擇判斷
        answer?=?sg.popup_yes_no("Do?you?like?this?video?")
        sg.popup("You?have?selected",?answer)


        結(jié)果如下。




        ▍11、自定義彈窗


        上面那些彈窗都是庫自帶的,如果想自定義創(chuàng)建,可以參考下面的方法。


        #?自定義創(chuàng)建彈窗,?一行代碼完成
        choice,?_?=?sg.Window(
        ????"Continue?",
        ????[[sg.T("Do?you?want?to?subscribe?to?this?channel?")],?[sg.Yes(s=10),?sg.No(s=10),?sg.Button('Maybe',?s=10)]],
        ????disable_close=True,
        ).read(close=True)
        sg.popup("Your?choice?was",?choice)


        結(jié)果如下。



        ▍12、實戰(zhàn)


        最后來個綜合實戰(zhàn)案例,將某個文件夾下所有的Excel文件中的sheet表,一一保存為單獨的Excel文件


        代碼如下,需要安裝xlwings庫,其中pathlib庫是內(nèi)置的。


        from?pathlib?import?Path
        import?PySimpleGUI?as?sg
        import?xlwings?as?xw

        #?選擇輸入文件夾
        INPUT_DIR?=?sg.popup_get_folder("Select?an?input?folder")
        if?not?INPUT_DIR:
        ????sg.popup("Cancel",?"No?folder?selected")
        ????raise?SystemExit("Cancelling:?no?folder?selected")
        else:
        ????INPUT_DIR?=?Path(INPUT_DIR)

        #?選擇輸出文件夾
        OUTPUT_DIR?=?sg.popup_get_folder("Select?an?output?folder")
        if?not?OUTPUT_DIR:
        ????sg.popup("Cancel",?"No?folder?selected")
        ????raise?SystemExit("Cancelling:?no?folder?selected")
        else:
        ????OUTPUT_DIR?=?Path(OUTPUT_DIR)

        #?獲取輸入文件夾中所有xls格式文件的路徑列表
        files?=?list(INPUT_DIR.rglob("*.xls*"))

        with?xw.App(visible=False)?as?app:
        ????for?index,?file?in?enumerate(files):
        ????????#?顯示進度
        ????????sg.one_line_progress_meter("Current?Progress",?index?+?1,?len(files))
        ????????wb?=?app.books.open(file)
        ????????#?提取sheet表為單獨的Excel表格
        ????????for?sheet?in?wb.sheets:
        ????????????wb_new?=?app.books.add()
        ????????????sheet.copy(after=wb_new.sheets[0])
        ????????????wb_new.sheets[0].delete()
        ????????????wb_new.save(OUTPUT_DIR?/?f"{file.stem}_{sheet.name}.xlsx")
        ????????????wb_new.close()

        sg.popup_ok("Task?done!")


        首先選擇輸入文件夾和輸出文件夾的地址。


        然后通過pathlib庫對輸入文件夾進行遍歷,查找出所有xls格式文件的路徑地址。



        點擊OK按鈕后,就會開始表格轉(zhuǎn)換,操作如下。



        使用了one_line_progress_meter()方法顯示程序處理的進度。



        20表示有20次循環(huán),原始Excel文件總計有20個,需要處理20次,其他的都在上圖中標示出來咯。


        好了,今天的分享就到這里了,有興趣的小伙伴可以自行去學習。

        瀏覽 61
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
        評論
        圖片
        表情
        推薦
        點贊
        評論
        收藏
        分享

        手機掃一掃分享

        分享
        舉報
          
          

            1. 日韩在线中文字幕视频 | 和上司一夜做了4次爱电影 | 亚洲精品无码成人77777 亚洲美女天堂网 | 欧美一级婬片A片免费有限公司 | 国产免费AV一区二区三区 |