Python Tkinter 实现评分系统(GUI)

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事件与之类似
运行结果图片为
Python Tkinter 实现评分系统(GUI)_第1张图片
点击文件1可选择文件,效果图为
Python Tkinter 实现评分系统(GUI)_第2张图片
界面已然做好,接下来要实现自动评分,需要有正确答案来辅助,由于所做任务为挑选任务(需要或不需要,两种结果),无标准答案,采用少数服从多数法(类似举手表决),每一种结果三人中超过两人选择的认为是正确的。

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个屏幕才能放下这么多按钮,此时就可以采用输入文件夹,自动读取文件夹下文本内容列出每个文件的正确率,这样的准确率才更接近实际情况。)。
接下来,就等着他们筛选,来给她们计算正确率了,嘿嘿。。。

你可能感兴趣的:(Python)