最近项目要用到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
细节很重要啊...