python之gui-tkinter可視化編輯界面 自動生成代碼

首先提供資源連接 http://pan.baidu.com/s/1kVLOrIn#list/path=%2Fpython

此工具是基於VB的一個插件,能夠輸出python的tk代碼,依次安裝便可小程序

 

0.簡介
    這是一個VB6的ADDIN(外接程序),用於使用VB6開發工具直接拖放控件,直接可視化完成Python的TKinter的GUI佈局和設計,能夠在VB界面上設置
    控件的一些屬性,最終自動生成必要的代碼(包括回調函數框架),代碼生成後僅須要在對應的回調函數中增長相應的邏輯功能代碼便可。
    這個工具支持絕大部分TKiner控件,可應付通常GUI的需求。(列表參見下面的控件說明)。

1.適用對象
    適用於學習了TKinter並不想太麻煩寫GUI代碼,也不想用其餘工具和框架,好比wxPython,PyQt4的同窗。
    適用於界面不太複雜的小程序開發,界面複雜的仍是適用wxPython等框架吧。由於TKinter爲Python標準庫,使用TKinter完成的Python程序能夠稱爲
    「綠色軟件」,不須要目標機器上安裝wxPython,PyQt4等框架,只要有Python的機器就能運行。
  若是軟件邏輯不是很複雜,一般一個*.py搞定,不像其餘框架,須要幾個文件。 2.使用方法簡介 2.1 首先註冊此插件,可使用自帶的安裝程序,或本身手動完成。 2.2 打開VB6,新建一個標準EXE工程,在窗體上設計本身的GUI佈局,這個 工做估計沒有VB基礎的同窗均可以完成,同時能夠設置相應的控件屬性。 2.3 若是使用自帶安裝程序安裝了插件,如今VB的工具條上應該有一個新 圖標(一片橙紅色羽毛),若是沒有,到菜單"外接程序"|"外接程序管理器" 裏面啓動Visual Tkinter,Visual Tkinter圖標和菜單應該會出現。 2.4 啓動Visual Tkinter後,先按「刷新窗體列表」按鈕,列出當前工程的全部 窗體和控件列表。 2.5 逐個確認各控件的輸出屬性,在要輸出的選項前打鉤,若是必要, 能夠在屬性列表中雙擊修改屬性的值。(通常狀況不須要再修改控件屬性)。 VisualTkinter儘可能的將VB控件屬性翻譯成Tkinter控件屬性,好比字體、顏色 初始值、外觀、狀態等,甚至包括按鈕類和菜單的快捷鍵設置等待。 固然了,若是部分屬性沒有對應關係的,須要在VisualTkinter界面上設置。 2.6 按「生成代碼」按鈕則在代碼預覽窗口生成代碼,能夠雙擊代碼預覽窗口 放大閱讀,也能夠直接修改代碼。 2.7 確認完成後能夠將代碼拷貝到剪貼板或保持到文件。 佈局可使用百分比定位(相對定位)或絕對座標定位(按像素定位), 百分比定位爲有一個好處,主界面大小變化後,控件也能夠相對變化大小。 若是不但願主界面大小變化後控件跟隨變化,能夠選擇絕對座標定位。 注:若是修改了之前設計的界面,能夠選擇僅輸出main函數或界面生成類。 不影響外部已經實現的邏輯代碼。 2.8 若是程序有多個GUI界面,能夠在VB工程中添加窗體,就能夠選擇產生 哪一個窗體的對應代碼。 2.9 針對結構化代碼,若是要在Python代碼中引用和修改其餘控件的值, 可使用全局字典gComps,這個字典保存了全部的GUI元素和一些對應的 控件變量,能夠直接使用形如gComps["Text1Var"].set("new Text")的代碼 來訪問對應控件。 若是輸出的是面向對象代碼,則能夠在界面派生類Application中直接訪問 對應的控件。 2.10 通常的GUI框架都會將UI部分和邏輯代碼部分分別放在不一樣的文件中,在 邏輯代碼文件中導入UI文件,實現修改UI不影響邏輯代碼。由於對於實現 簡單的程序來講,我偏心單文件,因此我將UI類和邏輯代碼類都放在同一個 文件中,在修改界面後,你能夠直接覆蓋對應的Application_ui類便可實現 界面的變動,不過若是增長了新的事件回調函數,須要在子類Application 中增長才行。 3.目前支持的控件列表 3.1 Label 標籤條在VB和Python中基本同樣。若是不啓用ttk,則在文本中插入\n來換行, 若是啓用了ttk,則只支持單行文本(多行可使用Message控件實現)。 3.2 TextBox Python文本框有兩種:Entry和Text,若是VB的TextBox的MultiLine=False,則 生成Entry,不然生成Text。 3.3 Frame 對應Python的LabelFrame控件,作爲其餘控件的容器,或作爲界面元素視覺分類。 3.4 CommandButton 對應Python的Button,沒有太多區別。 爲了代碼簡潔,窗體的退出按鈕能夠設置Cancel屬性爲True,而後程序自動生成 對應Tkinter的destroy回調,這樣就不須要再實現一個回調函數。 在VB裏面字母前增長一個"&"符號能夠直接綁定一個快捷鍵Alt+對應字母, VisualTkinter也支持此設置,自動生成對應的事件綁定代碼。 其餘控件好比Checkbox等有"標題"屬性的控件同樣如此處理。 3.5 CheckBox 多選按鈕對應Python的Checkbutton。 3.6 OptionButton 單選按鈕對應Python的Radiobutton。 3.7 ComboBox 組合框在Tkinter中沒有對應的控件,比較相似的只有OptionMenu,相似ComboBox 的Style=2 (Dropdown List)時的表現,一個下拉列表,只能在列表中選擇一個值, 不能直接輸入。因此建議在VB的ComboBox中寫下全部的下拉列表值。 若是啓用了TTK主題擴展庫支持,則直接對應到TTK的Combobox,外形和行爲基本 一致。 3.8 ListBox 列表框對應Python的Listbox,行爲也相似,能夠在設計階段設置初始列表。 若是須要滾動,則在適當位置建立滾動條,而後在Addin界面選擇其xscrollcommand 和yscrollcommand屬性爲對應滾動條的.set方法。 3.9 HScrollBar, VScrollBar 滾動條在Python中爲Scrollbar,經過設置orient來控制水平仍是垂直。 3.10 Slider 相似對應Python中的Scale。 3.11 PictureBox 簡單對應到Python中的Canvas,用作其餘控件的容器或畫圖容器使用。 若是須要滾動,則在適當位置建立滾動條,而後在Addin界面選擇其xscrollcommand和 yscrollcommand屬性爲對應滾動條的.set方法。 3.12 Menu 可使用VB的菜單編輯器來設計Python的菜單。 在VB中的菜單標題爲"-"是分隔條。 也能夠在正常的菜單標題中增長(&+字母)的方式添加快捷鍵。 3.13 Line 能夠用於組織複雜界面,僅支持水平或垂直線。 =================================================== 如下的控件須要在VB的'控件工具箱'中按右鍵添加'部件',選擇 'Microsoft Windows Common Controls 6.0' ==================================================== 3.14 ProgressBar 對應到Python的Progressbar,須要啓用TTK主題擴展(默認) 3.15 TreeView 對應到Python的Treeview,樹形顯示控件,能夠選擇是否顯示標題行, 須要啓用TTK主題擴展(默認) 若是須要滾動,則在適當位置建立滾動條,而後在Addin界面選擇其xscrollcommand 和yscrollcommand屬性爲對應滾動條的.set方法。 3.16 TabStrip 選項卡控件,對應到Python的Notebook,須要啓用TTK主題擴展(默認)。 若是要佈局各個頁面內的控件,按如下步驟: 1.每一個選項頁對應一個Frame或PictureBox,命名爲:TabStrip的名字 加'__Tab'(雙下劃線),再加一個序號,從1開始,好比TabStrip的名字爲TabStrip1, 則你能夠建立一個PictureBox,命名爲'TabStrip1__Tab1'(注意大小寫)。 2.而後在PictureBox/Frame內擺放你須要的其餘控件,生成代碼後此容器內自動添加 到對應的選項頁,VisualTkinter會在後臺爲您作這一切。 標籤頁對應的PictureBox/Frame能夠放置在窗體的可視範圍外,也就是說設計好 對應的選項頁後,縮小IDE中的窗體爲你須要的大小。 注意: 1. 你須要使用相對座標,PictureBox或Frame容器的大小請和TabStrip內部大小一致或 接近,不然選項頁內的控件將會經過拉伸或收縮來適配可伸縮來適配可用空間,這樣有些 控件看起來會比較怪。若是使用絕對座標,則PictureBox/Frame能夠不用和TabStrip 同樣大,PictureBox/Frame內的控件將以TabStrip的左上角爲原點放置,大小和長寬比例 會和設計時一致。 因此仍是建議若是有TabStrip控件的話,使用絕對座標。 2. Frame和PictureBox都可做爲容器,若是使用Frame做爲容器,則其標題能夠做爲選項頁 標題,若是你沒有設置選項頁標題的話。(選項卡控件的標題設置優先) ----------------------------------------------------- 3.17 CommonDialog 這個控件也算支持,若是VB窗體中有這個控件,則在Python代碼中導入 filedialog、simpledialog、colorchooser這三個模塊,這三個模塊提供簡單的 文件選擇、輸入框、顏色選擇對話框功能。 須要在控件工具箱增長"Microsoft Common Dialog Control 6.0" 4. 其餘建議 1. 不支持使用控件數組,界面能夠顯示,可是後面的同名控件名會覆蓋前面定義的。 2. 窗體的ScaleMode建議保持默認值(vbTwips),若是要設置爲其餘值,則Frame控件 內就不要再放Frame控件了,不然其內部的控件佈局錯誤。 3. 若是僅須要簡體漢字界面,則能夠刪掉Language.lng文件,僅需VisualTkinter.dll 一個文件。 5. ttk庫額外說明 ttk主題擴展看起來很漂亮,在不一樣操做系統下界面呈現爲本地化風格,建議使用, 只是要注意如下幾個ttk的BUG: 1. TTK的Entry和Combobox控件背景色設置無效(能夠設置,不報錯,可是界面不變)。 2. TTK的Label中的文本不能換行,可是tkinter的Label控件能夠經過插入'\n'來換行。 3. LabelFrame和Notebook控件的字體設置無效。 4. Python 2.7.3附帶的ttk中的Treeview字體設置無效,但3.2.3的Treeview的字體 設置有效。

以上是介紹,能夠看到,支持的組件仍是挺多的,足夠平常使用了數組

下面就簡單的測試下框架

感受回到了初中上微機課,老師教怎麼畫按鈕,而後顯示什麼,挺懷念的界面編輯器

點生成便可ide

能夠看出生成的界面和以前畫的同樣函數

代碼以下工具

#!/usr/bin/env python
#-*- coding:utf-8 -*-

import os, sys
try:
    from tkinter import *
except ImportError:  #Python 2.x
    PythonVersion = 2
    from Tkinter import *
    from tkFont import Font
    from ttk import *
    #Usage:showinfo/warning/error,askquestion/okcancel/yesno/retrycancel
    from tkMessageBox import *
    #Usage:f=tkFileDialog.askopenfilename(initialdir='E:/Python')
    #import tkFileDialog
    #import tkSimpleDialog
else:  #Python 3.x
    PythonVersion = 3
    from tkinter.font import Font
    from tkinter.ttk import *
    from tkinter.messagebox import *
    #import tkinter.filedialog as tkFileDialog
    #import tkinter.simpledialog as tkSimpleDialog    #askstring()


#全部控件和控件綁定變量引用字典,使用這個字典是爲了方便在其餘函數中引用全部控件。
gComps = {}




def main(argv):
    top = Tk()
    top.title('Form3')
    top.geometry('445x278')
    gComps['top'] = top

    style = Style()
    gComps['style'] = style

    style.configure('Label1.TLabel',anchor='w')
    Label1 = Label(top, text='採集連接:', style='Label1.TLabel')
    Label1.place(x=0, y=8, width=81, height=25)
    gComps['Label1'] = Label1

    Text1Var = StringVar(value='Text1')
    Text1 = Entry(top, text='Text1', textvariable=Text1Var)
    Text1.place(x=88, y=8, width=313, height=18)
    gComps['Text1'] = Text1
    gComps['Text1Var'] = Text1Var

    top.mainloop()
    try: top.destroy()
    except: pass



if __name__ == "__main__":
    main(sys.argv)

 今天的分享就到這裏,若是你們以爲還能夠呀,記得打賞呦oop

相關文章
相關標籤/搜索