最近項目要用到tkinter,中間經過一些坑,寫下來避免大家踩雷。
先貼一下我做的GUI窗口示例:
完成的主要功能是,尋找機器中存在的問題並顯示,提供解決方案,如果提供的解決方案無法解決當前的問題,就要求外部輸入新的解決方案,同時會更新到數據庫中。
其中需要重點注意的是,如何從一個按鈕跳轉到下一個窗口,這裏用到的是''command=xx'';如果建立用戶輸入界面,用到的是"entry"; 如何和數據庫相連接,這裏需要用到python xlrd,我的數據庫是一個excel。
1. tkinter是什麼:
Tkinter 是 Python 的標準 GUI 庫。Python 使用 Tkinter 可以快速的創建 GUI 應用程序。
2. 創建最基本的GUI程序
import tkinter as tk
myWindow = tk.Tk() # 根窗口的實例
myWindow.title('Tester Troubleshooter')
myWindow.mainloop() # 窗口的主事件循環,必須的
3. 讓窗口居中
width = 380
height = 200
screenwidth = myWindow.winfo_screenwidth()
screenheight = myWindow.winfo_screenheight()
alignstr = '%dx%d+%d+%d' % (width, height, (screenwidth-width)/2, (screenheight-height)/2)
myWindow.geometry(alignstr)
4. 窗口添加文字
label = tk.Label(myWindow, text="Solution provided:", font=('Arial', 12), width=20, height=2).grid(row=5, column=3)
5. 窗口添加按鈕
普通按鈕:
Button(myWindow, text='EXIT', command=close_window).grid(row=8, column=1)
like this:
選擇按鈕:
checkbutton1 = Checkbutton(myWindow, text='YES', onvalue='YES', variable=v, command=close_yes)
like this:
選擇按鈕需要注意的點,我的程序會默認全部選中,所以要加
checkbutton1.deselect() #初始狀態全不選
checkbutton1.grid(row=7, column=5)#確定按鈕的位置
6. 怎麼自動關閉窗口(如果沒有寫這個函數就需要點“X”才能關閉)
def close_finish():
myWindow.destroy()
Button(myWindow, text='EXIT', command=close_finish).pack()
寫一個關閉窗口的函數,然後在button語句中加上command指向這個關閉窗口的函數。
7. 怎麼通過點擊按鈕指向另一個函數
command 很好用
checkbutton1 = Checkbutton(myWindow, text='YES', onvalue='YES', variable=v, command=close_yes)
8. 一個困擾了我很久的問題,爲什麼get()不到entry的內容。
雖然糾結到最後也不知道什麼原因,但是在各種嘗試下解決了。
就是把get()寫成一個函數。
起初直接在後面加上get()是拿不到輸入的內容的。
def close_window():
global txt
txt = entry1.get()
myWindow.destroy()
finish()
Label(myWindow, text="Please provide new solution:", font=('Arial', 10), width=20, height=2, padx=30, pady=30).grid(row=1, column=0)
entry1 = Entry(myWindow)
entry1.grid(row=1, column=1)
Button(myWindow, text='EXIT', command=close_window).grid(row=8, column=1)
9. 一個看起來和tk無關但是我也要加上的內容。
關於update excel
workbook = xlrd.open_workbook("C:\Tester\Error_List.xls")
oldws = workbook.sheet_by_index(0)
workbook1 = copy(workbook)
ws = workbook1.get_sheet(0)
ws.write(index_insert, 4, 1)
workbook1.save("C:\Tester\Error_List.xls")
使用擴展名xlsx運行之後打不開excel,後來查了知道需要改成xls
細節很重要啊...