精品国产人成在线_亚洲高清无码在线观看_国产在线视频国产永久2021_国产AV综合第一页一个的一区免费影院黑人_最近中文字幕MV高清在线视频

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

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

jf_78858299 ? 來(lái)源:AllTests軟件測(cè)試 ? 作者:AllTests軟件測(cè)試 ? 2023-05-05 15:02 ? 次閱讀

1、前言

在上一篇文章 [ 測(cè)試組合生成器-allpairspy ]中,作者介紹了 allpairspy 工具,用于進(jìn)行測(cè)試參數(shù)的組合。

隨后發(fā)現(xiàn),如果每次要對(duì)新的參數(shù)進(jìn)行組合,都要打開(kāi)腳本,編寫(xiě)后再執(zhí)行,之后還要手動(dòng)將參數(shù)值拷貝到 Excel 表里,還是有些麻煩,在這里應(yīng)該要如何進(jìn)行優(yōu)化,節(jié)約不必要的工作量?

本篇將此腳本進(jìn)行優(yōu)化,將集成到 Python 的 GUI 工具包(Tkinter),并且可以將結(jié)果數(shù)據(jù)導(dǎo)入到 Excel 和 TXT 文件里。

2、簡(jiǎn)介

Tkinter(即 tk interface,簡(jiǎn)稱(chēng)“Tk”)本質(zhì)上是對(duì) Tcl/Tk 軟件包的 Python 接口封裝,它是 Python 官方推薦的 GUI 工具包,屬于 Python 自帶的標(biāo)準(zhǔn)庫(kù)模塊,當(dāng)安裝好 Python 后,就可以直接使用它,而無(wú)須另行安裝。

作為一款 Python GUI 工具,Tkinter 擁有良好的跨平臺(tái)性,支持 Windows、Linux、Mac 平臺(tái),它傳承了 Python 語(yǔ)法簡(jiǎn)潔、代碼易讀的基本特點(diǎn)。

3、快速上手

使用 Tkinter GUI 工具包,快速創(chuàng)建自定義界面。

代碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公眾號(hào):AllTests軟件測(cè)試

import tkinter as tk

window = tk.Tk()
# 設(shè)置窗口title
window.title('公眾號(hào):AllTests軟件測(cè)試')
# 設(shè)置窗口大小:寬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")
# 設(shè)置窗口處于頂層
window.attributes('-topmost', True)
# 設(shè)置窗口透明度
window.attributes('-alpha', 1)
# 設(shè)置窗口被允許最大調(diào)整范圍
window.maxsize(600, 600)
# 設(shè)置窗口被允許最小調(diào)整范圍
window.minsize(50, 50)
# 更改左上角窗口icon圖標(biāo)
window.iconbitmap('C:/Users/wangmeng/Desktop/mytest/tupian.ico')
# 添加文本內(nèi)容,并對(duì)字體添加相應(yīng)的格式 font(字體,字號(hào),"字體類(lèi)型")
tk.Label(window, text="公眾號(hào):AllTests軟件測(cè)試", bg="yellow", fg="red", font=('Times', 15, 'bold italic underline')).place(x=80, y=60)
# 添加按鈕,以及按鈕的文本,并通過(guò)command參數(shù)設(shè)置關(guān)閉窗口的功能
tk.Button(window, text="關(guān)閉", command=window.quit).place(x=200, y=120)
# 進(jìn)入主循環(huán),顯示主窗口
window.mainloop()

運(yùn)行腳本,彈出 GUI 界面。

控制臺(tái)輸出獲取到的分辨率。

4、測(cè)試組合生成器腳本優(yōu)化

需求點(diǎn):一個(gè)輸入框(將參數(shù)組合輸入進(jìn)去)、一個(gè)輸出框(將參數(shù)組合分組后打印出來(lái))、分隔符下拉選擇項(xiàng)(用于匹配輸入的參數(shù)分隔符)、操作按鈕(運(yùn)行、導(dǎo)出Excel、導(dǎo)出TXT、刪除、關(guān)閉)

代碼如下:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# 公眾號(hào):AllTests軟件測(cè)試

from tkinter import filedialog
from tkinter import ttk, scrolledtext
from tkinter import messagebox
from tkinter import *
from allpairspy import AllPairs
import datetime
import openpyxl
import os

"""
測(cè)試參數(shù)組合生成器
"""

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

# 退出操作
def button_quit():
    window.quit()

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

# 運(yùn)行操作
def button_run():
    scr2.delete('0.0', END)

    global l_key
    global output_content
    global export_content

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

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

        if len(scr_list) != 1:
            for i in scr_list:
                try:
                    l = i.split(srclanguage1.get())
                    # 因素
                    l_key.append(l[0].strip())
                    l2 = l[1].split(srclanguage2.get())
                    # 選擇值
                    l_value.append(l2)
                except Exception as ex:
                    error = str(ex)
                    messagebox.showerror(title='操作錯(cuò)誤', message='運(yùn)行失敗,請(qǐng)檢查輸入數(shù)據(jù)!' + "\\n" + error)
                    break

            print("數(shù)據(jù)參數(shù) " + str(l_value))
            print("PAIRWISE:")
            for i, pairs in enumerate(AllPairs(l_value)):
                # 輸出內(nèi)容
                output_content = "{:2d}: {}".format(i + 1, pairs)
                # print(output_content)
                scr2.insert(END, output_content)
                scr2.insert(END, "\\n")
                # 導(dǎo)出內(nèi)容
                print(pairs)
                export_content.append(pairs)
            print(export_content)
        else:
            messagebox.showwarning(title='操作提示', message='輸入數(shù)據(jù)至少為2組!')
    else:
        messagebox.showwarning(title='操作提示', message='請(qǐng)輸入正確的數(shù)據(jù),再運(yùn)行!')

# 導(dǎo)出Excel
def button_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']

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

        try:
            wb = openpyxl.Workbook()
            sheet = wb.active
            for i, j in zip(l_key, excel_columns):
                sheet[j] = i
            for item_tree in export_content:
                value = item_tree
                # print(value)
                values = [str(strvalue) for strvalue in value]
                # 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='導(dǎo)出成功', message='已將Excel文件導(dǎo)出到桌面!')

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

        except Exception as ex:
            error = str(ex)
            messagebox.showerror(title='導(dǎo)出失敗', message='導(dǎo)出失敗!' + "\\n" + error)

    else:
        messagebox.showwarning(title='操作提示', message='請(qǐng)先運(yùn)行后,再進(jìn)行導(dǎo)出!')

# 導(dǎo)出TXT
def button_export_txt():
    # 判斷輸出數(shù)據(jù)是否為空
    if scr2.get('1.0', 'end-1c') != "":
        print("輸出數(shù)據(jù) " + "\\n" + 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 = "到桌面"

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

            # 文件路徑是否為空
            if filepath != "":
                # print("filepath " + filepath)
                # 寫(xiě)入文件
                with open(filepath, 'w') as file_object:
                    file_object.write(",".join(l_key))
                    for item_tree in export_content:
                        print(",".join(item_tree))
                        file_object.write('\\n' + ",".join(item_tree))
                file_object.close()
                messagebox.showinfo(title='導(dǎo)出成功', message='已導(dǎo)出TXT文件' + info_txt + '!')
            else:
                pass
                # print("filepath " + filepath)

        except Exception as ex:
            error = str(ex)
            messagebox.showerror(title='導(dǎo)出失敗', message='導(dǎo)出失敗!' + "\\n" + error)

    else:
        messagebox.showwarning(title='操作提示', message='請(qǐng)先運(yùn)行后,再進(jìn)行導(dǎo)出!')


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

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

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

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

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

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

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

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

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

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

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

# 顯示窗口
window.mainloop()

運(yùn)行腳本,彈出 GUI 界面。

接下來(lái)開(kāi)始簡(jiǎn)單測(cè)試一下,先準(zhǔn)備一下測(cè)試數(shù)據(jù):

品牌=X品牌/Y品牌
系統(tǒng)=Windows10/macOS
時(shí)間=按天/按周/按月/按年

將測(cè)試數(shù)據(jù)輸入到輸入框中,之后點(diǎn)擊運(yùn)行,輸出框顯示運(yùn)行后的結(jié)果,總共生成了8條用例。

點(diǎn)擊刪除按鈕,會(huì)將輸入和輸出框內(nèi)的數(shù)據(jù)都刪除掉。

點(diǎn)擊關(guān)閉按鈕,會(huì)關(guān)閉掉 GUI 界面。

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

點(diǎn)擊導(dǎo)出Excel,文件保存后,會(huì)提示導(dǎo)出成功。

打開(kāi)Excel,顯示的結(jié)果數(shù)據(jù)。

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

導(dǎo)出TXT,文件保存后,會(huì)提示導(dǎo)出成功。

打開(kāi)TXT,顯示的結(jié)果數(shù)據(jù)。

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

當(dāng)沒(méi)有輸入數(shù)據(jù),直接點(diǎn)擊運(yùn)行按鈕時(shí),會(huì)提示:

當(dāng)沒(méi)有運(yùn)行,而直接點(diǎn)擊導(dǎo)出Excel或?qū)С鯰XT時(shí),會(huì)提示:

當(dāng)輸入的參數(shù)數(shù)據(jù)只有一組時(shí),會(huì)提示:

當(dāng)輸入的數(shù)據(jù)格式不對(duì),點(diǎn)擊運(yùn)行時(shí),會(huì)提示:

如上,大概的功能點(diǎn)已經(jīng)測(cè)試完成,可以滿足所要的需求,但是還有一點(diǎn)需要改進(jìn),那就是每次打開(kāi)都要執(zhí)行腳本,需要改為直接雙擊可運(yùn)行的文件。

可以參考這篇文章 [ 將Python腳本轉(zhuǎn)換為可執(zhí)行文件 ]

步驟如下:

1、安裝 pyinstaller

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

3、執(zhí)行轉(zhuǎn)換腳本

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

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

雙擊可執(zhí)行文件即可,自動(dòng)打開(kāi) GUI 界面。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • TCL
    TCL
    +關(guān)注

    關(guān)注

    10

    文章

    1715

    瀏覽量

    88468
  • GUI
    GUI
    +關(guān)注

    關(guān)注

    3

    文章

    648

    瀏覽量

    39549
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4782

    瀏覽量

    84453
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    Python人工智能學(xué)習(xí)工具包+入門(mén)與實(shí)踐資料集錦

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

    Python是如何使用Tkinter快速創(chuàng)建GUI應(yīng)用程序的

    Tkinter是什么?Python是如何使用Tkinter快速創(chuàng)建GUI應(yīng)用程序的?
    發(fā)表于 12-23 07:15

    如何訪問(wèn)已與eIQ工具包一起安裝的python版本?

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

    并口開(kāi)發(fā)調(diào)試工具包 (推薦)

    并口開(kāi)發(fā)調(diào)試工具包 (推薦):
    發(fā)表于 05-27 10:15 ?35次下載
    并口開(kāi)發(fā)調(diào)試<b class='flag-5'>工具包</b> (推薦)

    固件工具包

    固件工具包 修改工具包 高興向大家公布這個(gè)信息! 首先介紹一下這個(gè)工具地用途: 1、修改固件 - 通過(guò)此工具能夠修改固件中絕大多數(shù)地信息及配置。 2、...
    發(fā)表于 03-16 14:49 ?71次下載

    WEBENCH 設(shè)計(jì)工具包綜合概述

    WEBENCH 設(shè)計(jì)工具包綜合概述
    發(fā)表于 09-15 09:28 ?6次下載
    WEBENCH 設(shè)計(jì)<b class='flag-5'>工具包</b>綜合概述

    Python基礎(chǔ)-圖像處理工具包

    PythonWare公司提供了免費(fèi)的圖像處理工具包PIL(Python Image Library),該軟件提供了基本的圖像處理功能,如:改變圖像大小,旋轉(zhuǎn)圖像,圖像格式轉(zhuǎn)換,色場(chǎng)空間轉(zhuǎn)換,圖像
    發(fā)表于 03-30 14:09 ?17次下載

    Python基礎(chǔ)-GUI

    目前Python已經(jīng)選擇支持Tkinter作為它的正式GUI實(shí)現(xiàn)。Tkinter是一個(gè)成熟的跨平臺(tái)接口,它為GUI應(yīng)用程序提供小型的配件集。
    發(fā)表于 03-30 15:26 ?23次下載

    Microchip宣布推出全新的GUI開(kāi)發(fā)工具包

    優(yōu)化后的代碼占用更少的內(nèi)存,節(jié)省物料清單成本。相對(duì)于其他依賴高性能內(nèi)核和3D圖形加速的圖形解決方案,新工具包的高效性能幫助開(kāi)發(fā)人員為Microchip的節(jié)能微處理器創(chuàng)建豐富的GUI
    的頭像 發(fā)表于 10-22 16:27 ?2481次閱讀

    Cypherbridge uMODBUS工具包

      uMODBUS 工具包專(zhuān)為與各種 SCADA、工業(yè)和樓宇控制系統(tǒng)集成而設(shè)計(jì)。它與標(biāo)準(zhǔn)系統(tǒng)級(jí)解決方案兼容,包括:
    的頭像 發(fā)表于 06-30 09:23 ?1043次閱讀

    Python腳本集成GUI工具包

    本篇將此腳本進(jìn)行優(yōu)化,將集成 PythonGUI 工具包
    的頭像 發(fā)表于 02-15 16:40 ?1081次閱讀

    Python寫(xiě)機(jī)器人上位機(jī)

    Python使用 Tkinter 可以快速的創(chuàng)建 GUI 應(yīng)用程序。由于 Tkinter 是內(nèi)置 p
    發(fā)表于 05-09 11:10 ?0次下載
    <b class='flag-5'>Python</b>寫(xiě)機(jī)器人上位機(jī)

    OneCommand x64的企業(yè)應(yīng)用程序工具包(GUI)

    電子發(fā)燒友網(wǎng)站提供《OneCommand x64的企業(yè)應(yīng)用程序工具包(GUI).exe》資料免費(fèi)下載
    發(fā)表于 08-04 09:19 ?0次下載
    OneCommand x64的企業(yè)應(yīng)用程序<b class='flag-5'>工具包</b>(<b class='flag-5'>GUI</b>)

    OneInstall工具包

    電子發(fā)燒友網(wǎng)站提供《OneInstall工具包.exe》資料免費(fèi)下載
    發(fā)表于 08-18 14:54 ?0次下載
    OneInstall<b class='flag-5'>工具包</b>

    python如何打開(kāi)gui界面

    Python中打開(kāi)GUI界面,可以使用多種庫(kù)或框架,如Tkinter、PyQt、wxPython等。下面將詳細(xì)介紹如何使用Tkinter創(chuàng)建一個(gè)G
    的頭像 發(fā)表于 11-22 14:12 ?941次閱讀