python实现一个缺陷得分计算器

python实现一个缺陷得分计算器

from tkinter import LabelFrame, Button, Text, Frame, END, IntVar, Tk, Radiobutton, Label, font as tkFont
from time import strftime, localtime, time

class MY_GUI():
    def __init__(self,init_window_name):
        self.init_window_name = init_window_name
        self.bugLevelList=[("致命",1.0),("严重", 0.7),("一般",0.4),("轻微",0.2)]        #第2个参数,得分比例
        self.bugProbabilityList = [("80%以上",1.0), ("50%~80%",0.7), ("20%~50%",0.4),("20%以下",0.2)]        #第2个参数,得分比例
        self.bugTypeList = [("功能测试",1.0), ("性能测试",0.8), ("可靠性测试",0.4), ("兼容性测试",0.2)]        #第2个参数,得分比例
        #权重定义
        self.Weight={'bugLevel': 0.6, 'bugProbability': 0.3, 'bugType': 0.1}
        #当前日志行数
        self.LOG_LINE_NUM = 0


    #设置窗口
    def set_init_window(self):

        ##@初始化窗口
        self.init_window_name.title("Hik缺陷定级工具_v0.1")           #窗口名
        self.init_window_name.geometry('610x510')
        self.init_window_name.iconbitmap('.\\bitbug_favicon.ico')
        #self.init_window_name["bg"] = "pink"                                    #窗口背景色
        #self.init_window_name.attributes("-alpha",0.9)                          #虚化,值越小虚化程度越高

        ##@创建3个frame区域和1个计算按钮,并进行布局,3个frame区域分别是: 缺陷参数设置区域、日志区域、计算结果区域
        # 定义frame title的字体
        frameFont = tkFont.Font(family='微软雅黑', size=12)
        # 创建缺陷参数设置区域,长在主window窗口上
        inputframe = LabelFrame(self.init_window_name, text="缺陷参数", font=frameFont, borderwidth=2, width=320, height=330, relief="ridge", background="#F2F2F2")
        inputframe.grid(row=0, column=0, sticky='NW', padx=10, pady=10)
        inputframe.grid_propagate(0)
        inputframe.pack_propagate(0)
        # 创建日志区域,长在主window窗口上
        logframe = LabelFrame(self.init_window_name, text="LOG日志", font=frameFont, borderwidth=2, relief="ridge", width=320, height=146, background="#F2F2F2")
        logframe.grid(row=1, column=0, sticky='NW', padx=10, pady=0)
        logframe.grid_propagate(0)
        logframe.pack_propagate(0)
        # 创建计算按钮,长在主window窗口上
        btn = Button(self.init_window_name, text="计算", width=4, height=2, borderwidth=3, relief="raised", bg="#BDBDBD", font=('宋体', 12, 'bold'), command=self.calcBugScore)
        btn.grid(row=0, column=1, sticky='NW', pady=60)
        # 创建结果展示区域,长在主window窗口上
        resultframe = LabelFrame(master=self.init_window_name, text="得分结果", font=frameFont, borderwidth=2, relief="ridge", padx=10, pady=10, width=200, height=496, background="#F2F2F2")
        resultframe.grid(row=0, column=2, rowspan=2, padx=10, pady=10)
        resultframe.grid_propagate(0)
        resultframe.pack_propagate(0)


        ##@定义缺陷参数选择区域的字体,在缺陷参数选择区域,放置各类选择按钮
        bugLevelFont = tkFont.Font(family='微软雅黑', size=9)
        # 缺陷严重程度菜单
        bugLevelMenu = [(value[0], key+1) for key, value in enumerate(self.bugLevelList)]
        self.selectedBugLevel = self.createBugPara(inputframe, "缺陷严重程度:", bugLevelMenu, bugLevelFont, gridRow=0, gridColumn=0)
        # 缺陷发生概率
        bugProbabilityMenu = [(value[0], key + 1) for key, value in enumerate(self.bugProbabilityList)]
        self.selectedBugProbability = self.createBugPara(inputframe, "缺陷发生概率:", bugProbabilityMenu, bugLevelFont, gridRow=2, gridColumn=0)
        # 缺陷类型
        bugTypeMenu = [(value[0], key + 1) for key, value in enumerate(self.bugTypeList)]
        self.selectedBugType = self.createBugPara(inputframe, "缺陷类型:", bugTypeMenu, bugLevelFont, gridRow=0, gridColumn=1)

        ##@定义结果区域的文本框
        # 设置总得分字体样式
        totalScoreFont = tkFont.Font(family='微软雅黑', size=15, weight='bold')
        self.result_data_Text = Text(resultframe, font=bugLevelFont, width=38, height=49, background="#F2F2F2", border='0')  # 处理结果展示
        self.result_data_Text.pack()
        self.result_data_Text.tag_config('tag1', spacing1=5, foreground="green", font=bugLevelFont)
        self.result_data_Text.tag_config('tag2', spacing1=5, font=totalScoreFont)
        # self.result_data_Text.grid(padx=1, pady=1, rowspan=15, columnspan=10)

        ##@定义日志区域的文本框
        self.log_data_Text = Text(logframe, font=bugLevelFont, width=80, height=10, padx=20, background="#F2F2F2", border='0')  # 日志区域展示
        self.log_data_Text.pack()
        self.log_data_Text.tag_config('tag1',  foreground="red")
        self.log_data_Text.tag_config('tag2',  font=bugLevelFont)
        # self.log_data_Text.grid(row=13, column=0, columnspan=13)

    def createBugPara(self, frameArea, menuTitle, menu, font, gridRow, gridColumn):
        '''用于创建缺陷参数单选控件:首先创建一个子frame区域,放置在主frame上,然后在子frame区域上,放置缺陷参数radiobutton控件'''
        ##@创建子区域:
        frame = Frame(frameArea, borderwidth='0', width=120, height=150, relief="ridge", background="#F2F2F2")
        frame.grid(row=gridRow, column=gridColumn, rowspan=2, padx=10)
        frame.grid_propagate(0)
        frame.pack_propagate(0)
        ##@创建标题
        # Label(frame, text='', font=font).pack(anchor='sw', padx=1, pady=1)
        Label(frame, text=menuTitle, font=font ).pack(anchor='sw', padx=1)
        ##@创建缺陷严重程度单选框:
        selectValue = IntVar()
        for text, value in menu:
            b = Radiobutton(frame, text=text, variable=selectValue, value=value)
            b.pack(anchor='w', padx=15)
        return selectValue


    #功能函数
    def calcBugScore(self):

        # 清空结果区域
        self.result_data_Text.delete('1.0',END)
        bugLevelValue = self.selectedBugLevel.get()
        bugProbabilityValue = self.selectedBugProbability.get()
        bugTypeValue = self.selectedBugType.get()

        if bugLevelValue and bugProbabilityValue and bugTypeValue:
            # 计算得分:计算方法为总分*指标权重*选项权重。分别计算出每个指标的得分
            bugLevelScore = 100 * self.Weight['bugLevel'] * self.bugLevelList[bugLevelValue-1][1]
            bugProbabilityScore = 100 * self.Weight['bugProbability'] * self.bugProbabilityList[bugProbabilityValue - 1][1]
            bugTypeScore = 100 * self.Weight['bugType'] * self.bugTypeList[bugTypeValue - 1][1]
            totalScore = bugLevelScore + bugProbabilityScore + bugTypeScore

            # 将分数结果,绘制在结果区域的文本框中
            self.result_data_Text.insert(END, "缺陷严重程度的得分是:%s分\n" % bugLevelScore , 'tag1')
            self.result_data_Text.insert(END, "缺陷发生概率的得分是:%s分\n" % bugProbabilityScore, 'tag1')
            self.result_data_Text.insert(END, "缺陷类型的得分是:%s分\n" % bugTypeScore, 'tag1')
            self.result_data_Text.insert(END, "\n总得分是:%s分\n" % totalScore, 'tag2')

            # 将计算成功的消息发送到日志区域
            self.write_log_to_Text("计算成功,总得分是:%s分" % totalScore, 'tag2')
        elif not bugLevelValue:
            self.write_log_to_Text("请选择缺陷严重程度!", 'tag1')
        elif not bugProbabilityValue:
            self.write_log_to_Text("请选择缺陷发生概率!", 'tag1')
        else:
            self.write_log_to_Text("请选择缺陷类型!", 'tag1')


    #日志动态打印
    def write_log_to_Text(self,logmsg, tag):
        current_time = strftime('%Y-%m-%d %H:%M:%S',localtime(time()))
        logmsg_in = str(current_time) +" " + str(logmsg) + "\n"      #换行
        if self.LOG_LINE_NUM <= 6:
            self.log_data_Text.insert(END, logmsg_in, tag)
            self.LOG_LINE_NUM += 1
        else:
            self.log_data_Text.delete(1.0,2.0)
            self.log_data_Text.insert(END, logmsg_in,tag)


if __name__ == '__main__':
    init_window = Tk()              #实例化出一个父窗口
    # 启动应用程序
    MY_GUI(init_window).set_init_window()
    init_window.mainloop()          #父窗口进入事件循环,可以理解为保持窗口运行,否则界面不展示

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值