pyinstaller -F demo.py 參數 含義 -F 指定打包後只生成一個exe格式的文件 -D –onedir 建立一個目錄,包含exe文件,但會依賴不少文件(默認選項) -c –console, –nowindowed 使用控制檯,無界面(默認選項) -w –windowed, –noconsole 使用窗口,無控制檯 -p 添加搜索路徑,讓其找到對應的庫。 -i 改變生成程序的icon圖標
pyinstaller -F -w -noconsole Annual_awards_main.py --distpath=C:\Users\FrankLi\xxxx\dist --icon="./start.ico"
uploading-image-149426.pngpython
# -*- coding: utf-8 -*- __author__ = 'Frank Li' __version__ = 1.0 import pygame from pygame.locals import * from sys import exit import xlrd import random FULLSCREEN = False MUSIC_FILE = './music/月之門 - 白龍口.mp3' DRUM_STICK = './frontimgs/gc_cz.png' font_file = './fonts/simhei.ttf' excel_file = './employee/name_file.xlsx' clock = pygame.time.Clock() mode = 1 if FULLSCREEN else 0 # default 0 <--> Full Screen mouse_range = dict(top=460,bottom=560,left=970,right=1030) def get_name_list_from_excel(file_name): '''"解析 人員.xlsx 文件,獲得人員名單列表"''' name_list = [] excelFile = xlrd.open_workbook(file_name) sheet = excelFile.sheet_by_name('employee') #print sheet.name, sheet.nrows, sheet.ncols job_num = sheet.cell(0, 0).value job_name = sheet.cell(0, 1).value for row in range(1, sheet.nrows): job_num = sheet.cell(row, 0).value job_name = sheet.cell(row, 1).value name_list.append((job_num, job_name)) return job_num, job_name, name_list def handle_mouse_event(index,drum_stick_obj,pause_flag): if pygame.mouse.get_pressed()[0]: x, y = pygame.mouse.get_pos() x -= drum_stick_obj.get_width() / 2 y -= drum_stick_obj.get_height() / 2 if all((mouse_range.get('top')-50 < y < mouse_range.get('bottom'),mouse_range.get('left')-50 < x < mouse_range.get('right'))): print('coming ...') pause_flag = not pause_flag if pause_flag: pygame.mixer.music.stop() print('暫停') if pause_flag else print('播放') else: pygame.mixer.music.play() print('暫停') if pause_flag else print('播放') if name_list: del name_list[index] return index,pause_flag if __name__ == '__main__': job_num, job_name, name_list = get_name_list_from_excel(file_name=excel_file) pygame.init() if not FULLSCREEN: screen = pygame.display.set_mode((1200,673),0,32) bgImage = './bgimgs/bg_1366x768.png' else: screen = pygame.display.set_mode((1200, 673), 0, 32) bgImage = './bgimgs/bg_1366x768.png' # 這裏替換一下 bgImageObj = pygame.image.load(bgImage).convert() screen.blit(bgImageObj, (0, 0)) drum_stick_obj = pygame.image.load(DRUM_STICK).convert_alpha() pygame.display.set_caption("年會抽獎小程序") pygame.mixer.init() pygame.mixer.music.load(MUSIC_FILE) pygame.time.delay(1000) # 等待 1 s 鍾 pygame.mixer.music.set_volume(0.5) # 設置播放音量 pygame.mixer.music.play(-1) # 循環播放 pause_flag = False if len(name_list): index = random.randint(0,len(name_list)-1) else: prompt = '請檢查員工信息表是否爲空!' while True: clock.tick(60) for event in pygame.event.get(): if event.type == pygame.QUIT or event.type == pygame.KEYDOWN and event.key == pygame.K_ESCAPE: pygame.quit() exit() if event.type == pygame.MOUSEBUTTONDOWN: x,y = pygame.mouse.get_pos() print(x,',',y) index,pause_flag = handle_mouse_event(index,drum_stick_obj,pause_flag) # 暫停完成實際上是將index再次返回重繪時候又用同樣的 if not pause_flag: # 若沒有按下暫停鍵,那麼每次循環都隨機 if len(name_list): index = random.randint(0, len(name_list)-1) # 寫字 pno = name_list[index][0] pname = name_list[index][1] text_context = '恭喜工號 {} 姓名{} 喜提特等獎!'.format(pno, pname) else: text_context = ' 年會抽獎完滿結束,祝你們新年萬事如意,闔家歡樂!' # if not pygame.mixer.music.get_busy(): # pygame.mixer.music.play() # 從新刷新背景圖片 防止重影 screen.blit(bgImageObj, (0, 0)) # 獲取鼠標位置,使用 圖片替代 x, y = pygame.mouse.get_pos() x -= drum_stick_obj.get_width() / 2 y -= drum_stick_obj.get_height() / 2 pygame.mouse.set_visible(False) screen.blit(drum_stick_obj,(x,y)) # 抽獎結果展現 font = pygame.font.Font(font_file, 40) text_obj = font.render(text_context, True, (255, 255, 255), (0, 0, 0)) text_pos = text_obj.get_rect() text_pos.center = (500, 50) screen.blit(text_obj, text_pos) # 做者以及版本信息 font2 = pygame.font.Font(font_file, 10) text_obj = font2.render('軟件做者 {} , 版本號: {}'.format(__author__,__version__), True, (255, 255, 255), (255, 0, 0)) text_pos = text_obj.get_rect() text_pos.center = (1000, 650) screen.blit(text_obj, text_pos) pygame.display.update()
# 使用 pyinstaller 打包 pyinstaller -F -w -noconsole AnnualGame.py --distpath=C:\Users\FrankLi\PycharmProjects\jdquickbuy.py\game\dist --icon="./favicon.ico"
Python下各類GUI簡介、使用優缺點對比 GUI編程對比 簡介特色 優缺點 PyQt Python 對跨平臺的 GUI 工具集 Qt 的包裝實現了 440 個類以及 6000 個函數或者方法 ,PyQt 是做爲 Python 的插件實現的。 比較流行的一個 Tkinter 的替代品,功能 很是強大,能夠用Qt開發多美漂亮的界面,也就能夠用PyQt開發多麼漂亮的界面。 跨平臺的支持很好,不過在商業受權上彷佛存在一些問題。 Tkinter 綁定了 Python 的 Tk GUI 工具集 ,就是Python 包裝的Tcl代碼,經過內嵌在 Python 解釋器內部的 Tcl 解釋器實現, Tkinter的調用轉換成 Tcl 命令,而後交給 Tcl 解釋器進行解釋,實現 Python 的 GUI 界面。 對比Tk和其它語言的綁定,好比 PerlTk ,是直接由 Tk 中的 C 庫實現的。 歷史最悠久, Python 事實上的標準 GUI , Python 中使用 Tk GUI 工具集的標準接口,已經包括在標準的 Python Windows 安 裝中,著名的 IDLE 就是使用 Tkinter 實現 GUI 的建立的 GUI 簡單,學起來和用起來也簡單。 wxPython Python 對跨平臺的 GUI 工具集 wxWidgets ( C++ 編寫)的包裝,做爲 Python 的一個 擴展模塊實現。 比較流行的一個 Tkinter 的替代品,在 各類平臺下都表現挺好。 PyGTK 一系列的 Python 對 GTK+ GUI 庫的包裝。 比較流行的一個 Tkinter 的替代品,許多 Gnome 下的著名應用程序的 GUI 都是使用 PyGTK 實現的,好比 BitTorrent , GIMP和 Gedit 都有可選的實現,在 Windows 平臺 彷佛表現不太好,這點也無可厚非,畢竟使用的是GTK 的 GUI 庫。 PySide 另外一個 Python 對跨平臺的 GUI 工具集 Qt 的包裝,捆綁在 Python 當中,最初由 BoostC++ 庫實現,後來遷移到 Shiboken。 比較流行的一個 Tkinter 的替代品,和上 面相似,至於二者的區別,這裏 有一個介紹。 PyQt 的介紹 : http://en.wikipedia.org/wiki/PyQt Tkinter 的介紹 : http://en.wikipedia.org/wiki/Tkinter wxPython 的介紹 : http://en.wikipedia.org/wiki/WxPython PyGTK 的介紹 : http://en.wikipedia.org/wiki/PyGTK PySide 的介紹 : http://en.wikipedia.org/wiki/PySide
主流GUI編程