上一篇詳細(xì)介紹了xmind用例轉(zhuǎn)為禪道用例轻要,本期是對該工具的優(yōu)化椭懊!
- 將py文件轉(zhuǎn)為exe格式宇立,放在桌面隨時可用踪宠。
- 此外針對部分參數(shù)每次都不一樣的問題,專門做了一個GUI圖形界面泄伪,打開exe文件殴蓬,即可進行補充,帶入到py腳本中蟋滴。
完全做到隨用隨點染厅,方便快捷
查看效果
本篇代碼用到python標(biāo)準(zhǔn)庫模塊——tkinter
本次因為邊學(xué)tkinter邊寫這個界面,故用到tkinter的很多控件津函,其實可以寫得更簡化些
如果你對tkinter不太了解肖粮,在下方為你準(zhǔn)備了零基礎(chǔ)tkinter自學(xué)教程,保證學(xué)半天就可以掌握一個簡單的窗口尔苦!
下面看看代碼的講解~
# 導(dǎo)入tkinter包涩馆,定義別名為tk
import os.path
import tkinter as tk
from tkinter.filedialog import askopenfilename
from tkinter.messagebox import showinfo
from xmind_cd import XmindToXsl
from tkinter import messagebox
# 定義Application類表示應(yīng)用/窗口,繼承Frame類
class Application(tk.Frame):
# Application構(gòu)造函數(shù)允坚,master為窗口的父控件
# __init__有兩個參數(shù)魂那,一個self,即Application對象本身稠项;一個master涯雅;
#一個控件可能屬于另外一個控件,默認(rèn)一個窗口沒有master展运,即為None
def __init__(self,master=None):
# 調(diào)用Application的父類Frame的__init__函數(shù)活逆,初始化Application類的Frame類部分
# __init__(self, master=None, cnf={}, **kw)
tk.Frame.__init__(self,master)
# 顯示窗口并使用grid布局,grid方法從Frame繼承來拗胜,布局就是控件的排列方式蔗候,有g(shù)rid、pack等
self.grid()
self.path = tk.StringVar()
self.projectCode = tk.StringVar()
# 創(chuàng)建控件埂软,調(diào)用后面定義的createWidgets方法
self.createWidgets()
一锈遥、封裝窗口采取固定的模式:
1、首先定義Application類表示應(yīng)用/窗口勘畔,繼承Frame類
2迷殿、Application構(gòu)造函數(shù),master為窗口的父控件咖杂;init_有兩個參數(shù),一個self蚊夫,即Application對象本身诉字;一個master,默認(rèn)一個窗口沒有master,即為None
3壤圃、初始化Application類的Frame類部分陵霉,格式如下: init(self, master=None, cnf={}, **kw)
4、顯示窗口并使用grid布局伍绳,grid方法從Frame繼承來踊挠,布局就是控件的排列方式,有g(shù)rid冲杀、pack等
5效床、StringVar(),使用界面編程的時候权谁,有些時候是需要跟蹤變量的值的變化剩檀,以保證值的變更隨時可以顯示在界面上
6、創(chuàng)建控件旺芽,調(diào)用后面定義的createWidgets方法
# def selectPath(self):
# """選擇要轉(zhuǎn)換成excel的xmind地址"""
# self.path__ = askopenfilename()
# self.path.set(self.path__)
def selectPath(self):
# 從本地選擇一個xmind文件沪猴,并返回文件的目錄
self.filename = tk.filedialog.askopenfilename()
if self.filename.endswith('xmind'):
self.path.set(self.filename)
else:
showinfo(title="提示",message="請選擇正確的xmind文件")
二、獲取本地的xmind文件
1采章、askopenfilename 是用來選擇獲取Windows文件路徑的运嗜,具體用法:
from tkinter.filedialog import askopenfilename
filepath = filedialog.askopenfilename() # 打開文件,返回該文件的完整路徑
2悯舟、showinfo是用來彈出提示框的担租,如下
showinfo(title="提示",message="請選擇正確的xmind文件")
# 創(chuàng)建控件
def createWidgets(self):
"""生成gui界面"""
# 創(chuàng)建一個標(biāo)簽,輸出要顯示的內(nèi)容
self.firstLabel = tk.Label(self,text="目標(biāo)路徑")
# 設(shè)定使用grid布局
self.firstLabel.grid(row=0,column=0)
#創(chuàng)建一個輸入框
self.firstEntry = tk.Entry(self,textvariable=self.path)
self.firstEntry.grid(row=0,column=1)
self.firstLabel1 = tk.Label(self,text='禪道項目編碼')
self.firstLabel1.grid(row=2,column=0)
# 創(chuàng)建輸入框图谷,并獲取輸入的內(nèi)容
self.firstEntry1 = tk.Entry(self,textvariable=self.projectCode)
self.firstEntry1.grid(row=2,column=1)
print(self.firstEntry1.get())
#創(chuàng)建一個按鈕翩活,觸發(fā)執(zhí)行操作
self.clickButton = tk.Button(self,text="路徑選擇",command=self.selectPath)
#設(shè)定使用grid布局
self.clickButton.grid(row=0,column=2)
# 創(chuàng)建提交按鈕
self.clickButton = tk.Button(self,text="提交",command=self.getvalue)
# 設(shè)定使用grid布局
self.clickButton.grid(row=4,column=1)
三、添加控件:
1便贵、創(chuàng)建標(biāo)簽菠镇,可設(shè)置樣式
label = tk.Label(win, text="網(wǎng)址:c.biancheng.net",font=('宋體',20, 'bold italic'),bg="#7CCD7C",
# 設(shè)置標(biāo)簽內(nèi)容區(qū)大小
width=30,height=5,
# 設(shè)置填充區(qū)距離、邊框?qū)挾群推錁邮剑ò枷菔剑?br>
padx=10, pady=15, borderwidth=10, relief="sunken")
2承璃、創(chuàng)建Button按鈕:
點擊按鈕時執(zhí)行的函數(shù)
button = tk.Button(window,text='點擊前往',bg='#7CCD7C',width=20, height=5,command=click_button).pack()
3利耍、創(chuàng)建輸入框控件
entry1 = tk.Entry(win)
得到輸入框字符串
print(entry1.get())
def getvalue(self):
"""執(zhí)行轉(zhuǎn)換excel函數(shù)"""
xmindPath =self.path.get()
# 獲取文件名
#xmindName = os.path.join(os.path.dirname(__file__),'xmind_excel.xmind')
projectCode = self.projectCode.get()
self.xmind_to_xls = XmindToXsl(xmindPath)
self.xmind_to_xls.write_excel('新公務(wù)云(#10)', projectCode, '功能測試', '正常')
四、傳參盔粹,執(zhí)行上一篇的xmind轉(zhuǎn)禪道代碼
xmindPath隘梨、projectCode
if __name__ == '__main__':
# 創(chuàng)建一個Application對象app
app = Application()
# 設(shè)置窗口標(biāo)題
app.master.title = 'xmind轉(zhuǎn)excel用例'
# 設(shè)置窗口大小
app.master.geometry("300x200")
# 定義回調(diào)函數(shù),當(dāng)用戶點擊窗口×退出時舷嗡,執(zhí)行用戶自定義的函數(shù)
def QueryWindow():
# 顯示一個警告信息轴猎,點擊確認(rèn),銷毀窗口
if messagebox.showwarning("二次確認(rèn)", "確認(rèn)關(guān)閉嗎进萄?"):
# 這里必須使用destory()關(guān)閉窗口
# root_window.destory()
app.master.quit()
# 使用協(xié)議機制與窗口交互捻脖,并回調(diào)用戶自定義的函數(shù)
app.master.protocol('WM_DELETE_WINDOW', QueryWindow)
# 主循環(huán)開始
app.mainloop()
五锐峭、啟動GUI,設(shè)置窗口樣式
結(jié)果,效果如下:
關(guān)于如何做各種GUI窗口可婶?
點擊查看 從零開始學(xué)Tkinter系列