#!/usr/bin/env python
# -*- coding: utf-8 -*-

from tkinter import *
import hashlib
import time

LOG_LINE_NUM = 0


class MainGUI(object):
    def __init__(self, init_window_name):
        self.init_window_name = init_window_name
        self.init_datas()

    #################################数据定义#############################################################
    def init_datas(self):
        self.light_list = ["1000Lux_SME_D65_EV_0", "1000Lux_SME_D65_EV_10", "1000Lux_SME_D65_EV_20",
                           "100Lux_SME_A_EV_0",
                           "20Lux_SME_A_EV_0", "5Lux_SME_A_EV_0", "1Lux_SME_H_EV_0"]
        self.right_list = ["1000Lux_SME_D65_EV_01", "1000Lux_SME_D65_EV_10", "1000Lux_SME_D65_EV_01"]

    #############################################GUI设置###########################################
    # 设置窗口
    def set_init_window(self):
        self.winTitle()
        self._centerWindow(400, 500)
        self._setWindowStyle()
        # menu
        self.menu()
        # 全局标志
        self.golbalInit()
        # title
        self.clientTitle()
        # 布局
        self.initFrame()
        # 日志
        self.initLog()

    def winTitle(self):
        self.init_window_name.title("标题")  # 窗口名

    def _centerWindow(self, width, height):
        sw = self.init_window_name.winfo_screenwidth()
        # 得到屏幕宽度
        sh = self.init_window_name.winfo_screenheight()
        # 得到屏幕高度
        x = (sw - width) / 2
        y = (sh - height) / 2
        self.init_window_name.geometry("%dx%d+%d+%d" % (width, height, x, y))

    def _setWindowStyle(self):
        self.init_window_name["bg"] = "gray"  # 窗口背景色,其他背景色见:blog.csdn.net/chl0000/article/details/7657887
        self.init_window_name.attributes("-alpha", 0.9)  # 虚化,值越小虚化程度越高

    def golbalInit(self):
        self.RadioList = IntVar()  # IntVar 是tkinter的一个类,可以管理单选按钮
        self.CheckList = IntVar()

    def clientTitle(self):
        ###定义一个`label`显示`on the window`
        self.fm1 = Frame(self.init_window_name)
        self.titleLabel = Label(self.fm1, text='video-captioning system')
        self.titleLabel.pack()
        self.fm1.pack(side=TOP)

    # 菜单
    def menu(self):
        ##创建一个菜单栏,这里我们可以把他理解成一个容器,在窗口的上方
        menubar = Menu(self.init_window_name)

        # 菜单一
        filemenu = Menu(menubar, tearoff=0)

        # 一级菜单
        menubar.add_cascade(label='File', menu=filemenu)
        # 二级菜单
        filemenu.add_command(label='New', command=self.do_job)
        filemenu.add_command(label='Open', command=self.do_job)
        filemenu.add_separator()  # 分割线
        filemenu.add_command(label='Exit', command=self.init_window_name.quit)
        # 菜单二
        editmenu = Menu(menubar, tearoff=0)
        # 一级菜单
        menubar.add_cascade(label='Edit', menu=editmenu)
        # 二级菜单
        editmenu.add_command(label='Cut', command=self.do_job)
        editmenu.add_command(label='Paste', command=self.do_job)
        #
        # 菜单一子菜单
        submenu = Menu(filemenu)
        # 一级菜单
        filemenu.add_cascade(label='Import', menu=submenu, underline=0)
        # 二级菜单
        submenu.add_command(label='Submeau1', command=self.do_job)
        submenu.add_command(label='Submeau1', command=self.do_job)

        self.init_window_name.config(menu=menubar)

    # 日志
    def initLog(self):
        self.frame2 = Frame(self.init_window_name, width=1068)
        self.log_data_Text = Text(self.frame2, width=1068, height=9)
        self.log_data_Text.pack(side=TOP)  # 日志框
        self.frame2.pack(side=TOP)

    # 布局
    def initFrame(self):
        # 左右Frame
        self.fm2 = Frame(self.init_window_name)
        self.fm2_left = Frame(self.fm2)
        self.fm2_right = Frame(self.fm2)
        self.fm2_left_top = Frame(self.fm2_left)
        self.fm2_left_bottom = Frame(self.fm2_left)

        self.v = []

        for i in range(0, len(self.light_list)):
            self.v.append(IntVar())
            checkbox = Checkbutton(self.fm2_left_top, text=self.light_list[i], variable=self.v[-1], onvalue=i + 1,
                                   command=self.showSelection)
            checkbox.pack(side=TOP)
        self.fm2_left_top.pack(side=TOP)
        self.fm2_left.pack(side=LEFT)

        for m in range(0, len(self.right_list)):
            radiobutton = Radiobutton(self.fm2_right, text=self.right_list[m], variable=self.RadioList, value=m,
                                      command=self.do_job)
            radiobutton.pack(side=TOP)

        self.nextVideoButton = Button(self.fm2_right, text='Run', command=self.run)
        self.nextVideoButton.pack()

        self.fm2_right.pack(side=LEFT)

        self.fm2.pack(side=TOP)
        # variable=从属的“管理类” value=索引/ID
        self.RadioList.set(0)
        # self.CheckList.set(0)

    ##################################功能函数######################################################################
    def str_trans_to_md5(self):
        src = self.init_data_Text.get(1.0, END).strip().replace("\n", "").encode()
        # print("src =",src)
        if src:
            try:
                myMd5 = hashlib.md5()
                myMd5.update(src)
                myMd5_Digest = myMd5.hexdigest()
                # print(myMd5_Digest)
                # 输出到界面
                self.result_data_Text.delete(1.0, END)
                self.result_data_Text.insert(1.0, myMd5_Digest)
                self.write_log_to_Text("INFO:str_trans_to_md5 success")
            except:
                self.result_data_Text.delete(1.0, END)
                self.result_data_Text.insert(1.0, "字符串转MD5失败")
        else:
            self.write_log_to_Text("ERROR:str_trans_to_md5 failed")

    def do_job(self):
        # global counter
        # l.config(text='do ' + str(counter))
        # counter += 1
        choice = "你的选择是: " + self.right_list[self.RadioList.get()]
        self.write_log_to_Text("INFO:{} success".format(choice))

    def showSelection(self):
        seleds = []
        for i in self.v:
            if i.get() > 0:
                seleds.append(self.light_list[i.get() - 1])
        for seld in seleds:
            self.write_log_to_Text("INFO:{} success".format(seld))

    def run(self):
        self.write_log_to_Text("INFO:{} success".format("RUN"))

    # 获取当前时间
    def get_current_time(self):
        current_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.time()))
        return current_time

    # 日志动态打印
    def write_log_to_Text(self, logmsg):
        global LOG_LINE_NUM
        current_time = self.get_current_time()
        logmsg_in = str(current_time) + " " + str(logmsg) + "\n"  # 换行
        if LOG_LINE_NUM <= 8:
            self.log_data_Text.insert(END, logmsg_in)
            LOG_LINE_NUM = LOG_LINE_NUM + 1
        else:
            self.log_data_Text.delete(1.0, 2.0)
            self.log_data_Text.insert(END, logmsg_in)


#############################################启动函数##########################################
def gui_start():
    init_window = Tk()  # 实例化出一个父窗口
    ZMJ_PORTAL = MainGUI(init_window)
    # 设置根窗口默认属性
    ZMJ_PORTAL.set_init_window()
    init_window.mainloop()  # 父窗口进入事件循环,可以理解为保持窗口运行,否则界面不展示


#################################主函数################################################
if __name__ == '__main__':
    gui_start()

 

 

posted on 2022-02-11 17:48  Old-Kang  阅读(95)  评论(0编辑  收藏  举报