Tkinter :是 Python 的标准 GUI 库。Python 使用 Tkinter 可以快速的创建 GUI 应用程序。
由于 Tkinter 是内置到 python 的安装包中、只要安装好 Python 之后就能 import Tkinter 库、而且 IDLE 也是用 Tkinter 编写而成、对于简单的图形界面 Tkinter 还是能应付自如。(官方文档)
简单编写一个评分检测系统,实现多人同时评分:
首先需要导入TKinter库(Python2.7)
from Tkinter import *
import tkFileDialog, Tkconstants
import os
当然根据编码习惯也可以这样导入
import Tkinter
区别就是在使用Tkinter内部函数时要不要再加上Tkinter.
个人习惯我比较喜欢第一种(简单方便,最主要代码少,额。。。),相对来说第二种看起来代码更规范,可阅读性高(个人理解)。
创建窗口并初始化
设置窗口大小(注意是使用“x”乘号不是‘*’)
进入消息循环
运行下面代码可以创建一个300x400的窗口
root = Tk()
root.geometry('300x400')
root.mainloop()
构造一个函数用来写主界面内容,采用grid布局,因为需要放置内容需要合理的编排位置就没采用pack布局。
def MainShow(root):
Label(root, text='file:').grid(row=0, column=0)
Button(root, text='文件1', command=FileName1).grid(row=1, column=3)
Button(root, text='文件2', command=FileName2).grid(row=2, column=3)
Button(root, text='文件3', command=FileName3).grid(row=3, column=3)
Button(root, text='检测', command=accuracyRate).grid(row=4, column=3)
第一个button点击事件
def FileName1():
sys_dict= {}
sys_dict['defaultextension'] = '.txt'
sys_dict['initialdir'] = 'E:/A/'
sys_dict['parent'] = root
sys_dict['title'] = '文件1'
filename = tkFileDialog.askopenfilename(**sys_dict)
t1 = StringVar()
t1.set(filename)
Entry(root, textvariable=t1).grid(row=1, column=4, sticky=W, columnspan=2)
path['filename'] = filename
第二、第三个button事件与之类似
运行结果图片为
点击文件1可选择文件,效果图为
界面已然做好,接下来要实现自动评分,需要有正确答案来辅助,由于所做任务为挑选任务(需要或不需要,两种结果),无标准答案,采用少数服从多数法(类似举手表决),每一种结果三人中超过两人选择的认为是正确的。
def accuracyRate():
datalist = []
test_data = []
rel_name = os.listdir(path['pic_path'])
with open(path['filename'], 'r')as f:
while True:
data = f.readline().strip()
# print data[0]
if not data:
break
datalist.append(data.split(' ')[0])
with open(path['filename1'], 'r')as fs:
while True:
tdata = fs.readline().strip()
if not tdata:
break
test_data.append(tdata.split(' ')[0])
file_inter = set(datalist).intersection(set(test_data))
file_union = set(test_data).union(set(datalist))
file_cha = file_union - file_inter
path['union'] = list(file_cha)
accry_xiugai()
accuracy_file = list(file_inter) + path['re_name']
print len(datalist), len(accuracy_file), len(test_data)
filename = float(len(datalist)) / len(accuracy_file)
filename1 = float(len(test_data)) / len(accuracy_file)
Label(root, text='file 1 的准确率:').grid(row=5, column=3)
t1 = StringVar()
t1.set(filename)
Entry(root, textvariable=t1).grid(row=5, column=4)
Label(root, text='file 2 的准确率:').grid(row=6, column=3)
t2 = StringVar()
t2.set(filename1)
Entry(root, textvariable=t2).grid(row=6, column=4)
代码完成,使用集合的交集,差集等性质实现统计正确值。
点击检测按钮即可输出文件1,文件2,文件3的准确率(由于样本过少,姑且认为这样检测为正确的。当然样本多的话也不会采用这种一个文件一个文件的输入,那估计的找n个屏幕才能放下这么多按钮,此时就可以采用输入文件夹,自动读取文件夹下文本内容列出每个文件的正确率,这样的准确率才更接近实际情况。)。
接下来,就等着他们筛选,来给她们计算正确率了,嘿嘿。。。