<acronym id="s8ci2"><small id="s8ci2"></small></acronym>
<rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
<acronym id="s8ci2"></acronym>
<acronym id="s8ci2"><center id="s8ci2"></center></acronym>
0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

將Python腳本集成到GUI工具包

roborobo_0706 ? 來源:AllTests軟件測試 ? 2023-02-15 16:40 ? 次閱讀

1、前言

測試組合生成器-allpairspy中,作者介紹了allpairspy工具,用于進行測試參數的組合。

隨后發現,如果每次要對新的參數進行組合,都要打開腳本,編寫后再執行,之后還要手動將參數值拷貝到Excel表里,還是有些麻煩,在這里應該要如何進行優化,節約不必要的工作量?

本篇將此腳本進行優化,將集成到Python的GUI工具包(Tkinter),并且可以將結果數據導入到Excel和TXT文件里。

2、簡介

Tkinter(即tkinterface,簡稱“Tk”)本質上是對Tcl/Tk軟件包的Python接口封裝,它是Python官方推薦的GUI工具包,屬于Python自帶的標準庫模塊,當安裝好Python后,就可以直接使用它,而無須另行安裝。

作為一款PythonGUI工具,Tkinter擁有良好的跨平臺性,支持Windows、Linux、Mac平臺,它傳承了Python語法簡潔、代碼易讀的基本特點。

3、快速上手

使用TkinterGUI工具包,快速創建自定義界面。

代碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公眾號:AllTests軟件測試

importtkinter astk

window = tk.Tk()
# 設置窗口title
window.title('公眾號:AllTests軟件測試')
# 設置窗口大小:寬x高
window.geometry('400x200')
# 獲取電腦屏幕大小
print("電腦分辨率 %dx%d "% (window.winfo_screenwidth(), window.winfo_screenheight()))
# 獲取窗口大小,必須先刷新一下屏幕
window.update()
print("窗口分辨率 %dx%d "% (window.winfo_width(), window.winfo_height()))
# 改變背景顏色
window.config(background="#B3B3B3")
# 設置窗口處于頂層
window.attributes('-topmost', True)
# 設置窗口透明度
window.attributes('-alpha', 1)
# 設置窗口被允許最大調整范圍
window.maxsize(600, 600)
# 設置窗口被允許最小調整范圍
window.minsize(50, 50)
# 更改左上角窗口icon圖標
window.iconbitmap('C:/Users/wangmeng/Desktop/mytest/tupian.ico')
# 添加文本內容,并對字體添加相應的格式 font(字體,字號,"字體類型")
tk.Label(window, text="公眾號:AllTests軟件測試", bg="yellow", fg="red", font=('Times', 15, 'bold italic underline')).place(x=80, y=60)
# 添加按鈕,以及按鈕的文本,并通過command參數設置關閉窗口的功能
tk.Button(window, text="關閉", command=window.quit).place(x=200, y=120)
# 進入主循環,顯示主窗口
window.mainloop()
運行腳本,彈出GUI界面。

e87da548-ad0a-11ed-bfe3-dac502259ad0.png

控制臺輸出獲取到的分辨率。

e8971e38-ad0a-11ed-bfe3-dac502259ad0.png

4、測試組合生成器腳本優化

需求點:一個輸入框(將參數組合輸入進去)、一個輸出框(將參數組合分組后打印出來)、分隔符下拉選擇項(用于匹配輸入的參數分隔符)、操作按鈕(運行、導出Excel、導出TXT、刪除、關閉)

代碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公眾號:AllTests軟件測試

fromtkinter importfiledialog
fromtkinter importttk, scrolledtext
fromtkinter importmessagebox
fromtkinter import*
fromallpairspy importAllPairs
importdatetime
importopenpyxl
importos

"""
測試參數組合生成器
"""

# 獲取桌面路徑
defget_path():
returnos.path.join(os.path.expanduser('~'), "Desktop")

# 退出操作
defbutton_quit():
window.quit()

# 刪除操作
defbutton_delete():
scr1.delete('0.0', END)
scr2.delete('0.0', END)

# 運行操作
defbutton_run():
scr2.delete('0.0', END)

globall_key
globaloutput_content
globalexport_content

l_key = []
l_value = []
output_content = []
export_content = []

# 判斷輸入數據是否為空
ifscr1.get('1.0', 'end-1c') != "":
print("輸入數據 "+ "
"+ scr1.get('1.0', 'end-1c'))
# 數據分割
scr_list = scr1.get('0.0', 'end-1c').split("
")
# 判斷是否有空值在列表中,如果有就直接通過remove刪除
while''inscr_list:
scr_list.remove('')
print('列表數據 '+ str(scr_list))
# 共有幾組數據
print(len(scr_list))

iflen(scr_list) != 1:
fori inscr_list:
try:
l = i.split(srclanguage1.get())
# 因素
l_key.append(l[0].strip())
l2 = l[1].split(srclanguage2.get())
# 選擇值
l_value.append(l2)
exceptException asex:
error = str(ex)
messagebox.showerror(title='操作錯誤', message='運行失敗,請檢查輸入數據!'+ "
"+ error)
break

print("數據參數 "+ str(l_value))
print("PAIRWISE:")
fori, pairs inenumerate(AllPairs(l_value)):
# 輸出內容
output_content = "{:2d}: {}".format(i + 1, pairs)
# print(output_content)
scr2.insert(END, output_content)
scr2.insert(END, "
")
# 導出內容
print(pairs)
export_content.append(pairs)
print(export_content)
else:
messagebox.showwarning(title='操作提示', message='輸入數據至少為2組!')
else:
messagebox.showwarning(title='操作提示', message='請輸入正確的數據,再運行!')

# 導出Excel
defbutton_export_excel():
excel_columns = ['A1', 'B1', 'C1', 'D1', 'E1', 'F1', 'G1', 'H1', 'I1', 'J1', 'K1', 'L1', 'M1', 'N1', 'O1',
'P1', 'Q1', 'R1', 'S1', 'T1', 'U1', 'V1', 'W1', 'X1', 'Y1', 'Z1', 'AA1', 'AB1', 'AC1',
'AD1', 'AE1', 'AF1', 'AG1', 'AH1', 'AI1', 'AJ1', 'AK1', 'AL1', 'AM1', 'AN1', 'AO1',
'AP1', 'AQ1', 'AR1', 'AS1', 'AT1', 'AU1', 'AV1', 'AW1', 'AX1', 'AY1', 'AZ1']

# 判斷輸出數據是否為空
ifscr2.get('1.0', 'end-1c') != "":
print("輸出數據 "+ "
"+ scr2.get('1.0', 'end-1c'))

try:
wb = openpyxl.Workbook()
sheet = wb.active
fori, j inzip(l_key, excel_columns):
sheet[j] = i
foritem_tree inexport_content:
value = item_tree
# print(value)
values = [str(strvalue) forstrvalue invalue]
# print(values)
sheet.append(values)

# 將文件直接保存到桌面
# wb.save(f'{get_path()}/case' + datetime.datetime.now().strftime('%Y%m%d%H%M%S') + '.xlsx')
# wb.close()
# messagebox.showinfo(title='導出成功', message='已將Excel文件導出到桌面!')

# 對話框保存文件
filepath = filedialog.asksaveasfilename(initialfile='默認文件名.xlsx', filetypes=[("Excel文件", ".xlsx")])
iffilepath != "":
# print("filepath " + filepath)
wb.save(filepath)
wb.close()
messagebox.showinfo(title='導出成功', message='已導出Excel文件!')
else:
pass
# print("filepath " + filepath)

exceptException asex:
error = str(ex)
messagebox.showerror(title='導出失敗', message='導出失??!'+ "
"+ error)

else:
messagebox.showwarning(title='操作提示', message='請先運行后,再進行導出!')

# 導出TXT
defbutton_export_txt():
# 判斷輸出數據是否為空
ifscr2.get('1.0', 'end-1c') != "":
print("輸出數據 "+ "
"+ scr2.get('1.0', 'end-1c'))

try:
# 將文件直接保存到桌面
# filepath = f'{get_path()}/case' + datetime.datetime.now().strftime('%Y%m%d%H%M%S') + '.txt'
# info_txt = "到桌面"

# 對話框保存文件
filepath = filedialog.asksaveasfilename(initialfile='默認文件名.txt', filetypes=[("txt文件", ".txt")])
info_txt = ""

# 文件路徑是否為空
iffilepath != "":
# print("filepath " + filepath)
# 寫入文件
withopen(filepath, 'w') asfile_object:
file_object.write(",".join(l_key))
foritem_tree inexport_content:
print(",".join(item_tree))
file_object.write('
'+ ",".join(item_tree))
file_object.close()
messagebox.showinfo(title='導出成功', message='已導出TXT文件'+ info_txt + '!')
else:
pass
# print("filepath " + filepath)

exceptException asex:
error = str(ex)
messagebox.showerror(title='導出失敗', message='導出失??!'+ "
"+ error)

else:
messagebox.showwarning(title='操作提示', message='請先運行后,再進行導出!')


window = Tk()
# 設置窗口title
window.title("測試參數組合生成器")
# 設置窗口大小:寬x高
window.geometry("850x600")

srclanguage1 = StringVar()
srclanguage1.set('=')
# 標簽
Label(window, text="因素分隔", font=("隸書", 12, 'bold')).place(x=690, y=80)
language1 = ('=', '#')
# 復選框
ttk.Combobox(window, values=language1, width=3, textvariable=srclanguage1, state='readonly').place(x=770, y=80)

srclanguage2 = StringVar()
srclanguage2.set('/')
# 標簽
Label(window, text="內分隔符", font=("隸書", 12, 'bold')).place(x=690, y=110)
language2 = ('/', '+')
# 復選框
ttk.Combobox(window, values=language2, width=3, textvariable=srclanguage2, state='readonly').place(x=770, y=110)

# 標簽
Label(window, text="---輸入數據---", font=("隸書", 14, 'bold italic')).place(x=270, y=1)
# 滾動文本框
scr1 = scrolledtext.ScrolledText(window, width=80, height=15, font=("隸書", 12))
scr1.place(x=15, y=25)

# 標簽
Label(window, text="---輸出結果---", font=("隸書", 14, 'bold italic')).place(x=265, y=270)
# 滾動文本框
scr2 = scrolledtext.ScrolledText(window, width=80, height=15, font=("隸書", 12))
scr2.place(x=15, y=300)

# 按鈕
button1 = Button(window, text="運行", bg="green", font=("隸書", 15), command=button_run)
button1.place(x=560, y=560, width=80, height=30)

# 按鈕
button2 = Button(window, text="導出Excel", bg="yellow", font=("隸書", 15), command=button_export_excel)
button2.place(x=370, y=560, width=100, height=30)

# 按鈕
button3 = Button(window, text="導出TXT", bg="yellow", font=("隸書", 15), command=button_export_txt)
button3.place(x=200, y=560, width=100, height=30)

# 按鈕
button4 = Button(window, text="刪除", bg="red", font=("隸書", 15), command=button_delete)
button4.place(x=40, y=560, width=80, height=30)

# 按鈕
button5 = Button(window, text="關閉", font=("隸書", 15), command=button_quit)
button5.place(x=710, y=560, width=80, height=30)

# 標簽
Label(window, text="輸入數據示例", font=("隸書", 12, 'bold')).place(x=690, y=350)
Label(window, text="因素=A/B/C", font=("隸書", 11)).place(x=690, y=380)
Label(window, text="因素=1/2/3", font=("隸書", 11)).place(x=690, y=410)
Label(window, text="因素=D/E/F", font=("隸書", 11)).place(x=690, y=440)
Label(window, text="公眾號:AllTests軟件測試", font=("微軟雅黑", 10, 'bold'), fg='#EC3832').place(x=680, y=10)

# 顯示窗口
window.mainloop()
運行腳本,彈出GUI界面。

e8a9be62-ad0a-11ed-bfe3-dac502259ad0.png

接下來開始簡單測試一下,先準備一下測試數據:

品牌=X品牌/Y品牌
系統=Windows10/macOS
時間=按天/按周/按月/按年

將測試數據輸入到輸入框中,之后點擊運行,輸出框顯示運行后的結果,總共生成了8條用例。

點擊刪除按鈕,會將輸入和輸出框內的數據都刪除掉。

點擊關閉按鈕,會關閉掉GUI界面。

e8c04dee-ad0a-11ed-bfe3-dac502259ad0.png

代碼里可以設置將文件直接保存到桌面或者彈出對話框自定義保存,這里使用了對話框保存的方式。

點擊導出Excel,文件保存后,會提示導出成功。

e8de0280-ad0a-11ed-bfe3-dac502259ad0.png

打開Excel,顯示的結果數據。

e8f33d62-ad0a-11ed-bfe3-dac502259ad0.png

代碼里可以設置將文件直接保存到桌面或者彈出對話框自定義保存,這里使用了對話框保存的方式。

導出TXT,文件保存后,會提示導出成功。

e90c0b94-ad0a-11ed-bfe3-dac502259ad0.png

打開TXT,顯示的結果數據。

e91d95e4-ad0a-11ed-bfe3-dac502259ad0.png

除了成功的提示信息外,也添加了一些提示與錯誤的信息。

當沒有輸入數據,直接點擊運行按鈕時,會提示:

e930ef0e-ad0a-11ed-bfe3-dac502259ad0.png

當沒有運行,而直接點擊導出Excel或導出TXT時,會提示:

e941c52c-ad0a-11ed-bfe3-dac502259ad0.png

當輸入的參數數據只有一組時,會提示:

e974993e-ad0a-11ed-bfe3-dac502259ad0.png

當輸入的數據格式不對,點擊運行時,會提示:

e9875e70-ad0a-11ed-bfe3-dac502259ad0.png

如上,大概的功能點已經測試完成,可以滿足所要的需求,但是還有一點需要改進,那就是每次打開都要執行腳本,需要改為直接雙擊可運行的文件。

步驟如下:

1、安裝pyinstaller

2、將腳本與圖片放到同一個文件夾目錄

e99813a0-ad0a-11ed-bfe3-dac502259ad0.png

3、執行轉換腳本

pyinstaller -F -i tupian.ico combination_generator.py -w

4、執行完成后,dist目錄里是.exe可執行文件






審核編輯:劉清

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 生成器
    +關注

    關注

    7

    文章

    306

    瀏覽量

    20432
  • GUI
    GUI
    +關注

    關注

    3

    文章

    618

    瀏覽量

    38975
  • python
    +關注

    關注

    52

    文章

    4698

    瀏覽量

    83614

原文標題:將Python腳本集成到GUI工具包-Tkinter

文章出處:【微信號:ExASIC,微信公眾號:ExASIC】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    LabVIEW 2011模塊和工具包(圖像和信號處理)

    `數百種特定應用程序的圖像和信號處理函數集成NI LabVIEW應用程序中。 可將NI LabVIEW擴展至特定的應用,如:聲音和振動測量、機器視覺、RF通信、瞬時與短時信號分析等。 包括NI LabVIEW高級信號處理
    發表于 08-02 15:27

    LabVIEW 2011模塊和工具包(報表生成與數據存儲)

    `通過NI LabVIEW,采集的數據導出至第三方軟件工具 (如:Microsoft Office和工業標準的數據庫),并在網上發布信息。包括NI LabVIEW SignalExpress、用于Microsoft Office的報告生成
    發表于 08-02 15:30

    PID工具包

    新手求助:PID工具包怎么用?
    發表于 05-06 09:57

    Labview2010如何加載工具包

    本帖最后由 eehome 于 2013-1-5 09:41 編輯 Labview2010如何加載工具包?安裝了2010以后沒看到工具包的激活選項或者安裝選項請教前輩下如何選擇加載工具包
    發表于 12-31 15:36

    PIC 語言工具包問題

    大家好,PIC 我是新手,有個簡單的問題請教一下,就是我導入一個mcp的,mplab會報語言工具包不對,這個要如何處理,因我導的是網上下下來的,所以不知道之前用的是什么語言工具包
    發表于 04-19 14:00

    fastrbf工具包

    求matlab中fastrbf的工具包 ,有誰有這個工具包呢?求分享?急需
    發表于 03-05 20:05

    工具包

    誰有 Excel和MS Office Report專用工具包。
    發表于 04-08 19:55

    關于labview工具包

    請問各位大神一個問題,LabVIEW的工具包如何下載,比如聲音和振動工具包,官網上只有下載界面。
    發表于 09-04 19:27

    工具包

    誰有labview視覺工具包2013適用的??分享一下,不勝感激
    發表于 04-27 23:28

    Python人工智能學習工具包+入門與實踐資料集錦

    ,之后漸漸成為我工作中的第一輔助腳本語言,雖然開發語言是C/C++,但平時的很多文本數據處理任務都交給了Python。這些年來,接觸和使用了很多Python工具包,特別是在文本處理,科
    發表于 11-22 14:46

    模擬集成電路設計所需要的軟件工具包有哪些?

    模擬集成電路設計中有哪些設計工具包?
    發表于 12-21 06:30

    如何訪問已與eIQ工具包一起安裝的python版本?

    1.7.3 Ubuntu 安裝程序并將該工具包安裝在遠程板上。 但是,我想知道如何訪問該工具包的命令行工具,以及如何訪問已與eIQ 工具包一起安裝的
    發表于 06-07 06:46

    分享Perl和Python腳本輕量實用的調試工具

    Perl和Python作為目前芯片開發流程中最為流行的腳本語言,本文將分別介紹它們輕量且實用的調試工具(Debugger),讓你在調試腳本的時候不再抓瞎。
    的頭像 發表于 01-21 17:25 ?1370次閱讀
    分享Perl和<b class='flag-5'>Python</b><b class='flag-5'>腳本</b>輕量實用的調試<b class='flag-5'>工具</b>

    如何把Python腳本集成GUI工具包-Tkinter

    Tkinter(即 tk interface,簡稱“Tk”)本質上是對 Tcl/Tk 軟件包的 Python 接口封裝,它是 Python 官方推薦的 GUI 工具包,屬于
    的頭像 發表于 05-05 15:02 ?424次閱讀
    如何把<b class='flag-5'>Python</b><b class='flag-5'>腳本集成</b>到<b class='flag-5'>GUI</b><b class='flag-5'>工具包</b>-Tkinter

    OneCommand x64的企業應用程序工具包(GUI)

    電子發燒友網站提供《OneCommand x64的企業應用程序工具包(GUI).exe》資料免費下載
    發表于 08-04 09:19 ?0次下載
    OneCommand x64的企業應用程序<b class='flag-5'>工具包</b>(<b class='flag-5'>GUI</b>)
    亚洲欧美日韩精品久久_久久精品AⅤ无码中文_日本中文字幕有码在线播放_亚洲视频高清不卡在线观看
    <acronym id="s8ci2"><small id="s8ci2"></small></acronym>
    <rt id="s8ci2"></rt><rt id="s8ci2"><optgroup id="s8ci2"></optgroup></rt>
    <acronym id="s8ci2"></acronym>
    <acronym id="s8ci2"><center id="s8ci2"></center></acronym>