示例#1
0
    def init_platno(self):
        # Pravljenje okvira za platno
        okvir_p = LabelFrame(self,
                             text='Zakoračite u svet geometrijskih'
                             ' transformacija',
                             padx=10,
                             pady=10)
        okvir_p.place(x=10, y=10, height=300, width=430)

        # Postavljanje platna unutar okvira
        self.platno = Canvas(okvir_p, height=261, width=405)
        self.platno.place(x=0, y=0)

        # Postavljanje koordinatnog sistema na platno;
        # slika nije lokalna promenljiva, pošto bi je u
        # tom slučaju 'pojeo' sakupljač otpadaka
        self.slika = self.učitaj_sliku('koord.gif')
        self.platno.create_image(203, 131, image=self.slika)

        # Vezivanje čuvanja tačke za klik na platno
        self.unos = True
        self.platno.bind('<Button-1>', self.dodaj_tačku)

        # Vezivanje promene unosa za desni klik,
        # a ispravljanja figure za srednji, prema
        # sugestiji asistenta, čime se dobija na
        # lakoći korišćenja, bez potrebe za menijem
        self.platno.bind('<Button-2>', self.ispravi)
        self.platno.bind('<Button-3>', self.promena_unosa)
示例#2
0
def loader():
    global loadfilename

    if loadfilename != None:
        logger.info(messages.LOADFILE_CLEAR.format(loadfilename))
        loadfilename = None

    # topframe which provides the student file upload utility
    topframe = Frame(window, bg="#80c1ff")
    topframe.place(rely=0.06, relx=0.015, relwidth=0.97, relheight=0.22)

    searchButton = Button(topframe,
                          text="Choose Data File",
                          font=("Roboto", 14, "bold"),
                          fg="Brown",
                          bg="#54EE4A",
                          bd=5,
                          relief="raised",
                          command=lambda: chooseFile(filedisplay))
    searchButton.place(relx=0.25, rely=0.32, relwidth=0.50, relheight=0.30)

    middleframe = LabelFrame(window,
                             bg="#acdcdc",
                             text="File Path",
                             font=("Roboto", 13, "bold"))
    middleframe.place(rely=0.30, relx=0.015, relwidth=0.97, relheight=0.16)

    filedisplay = Label(middleframe,
                        bg="#acdcdc",
                        text="No Chosen File",
                        font=("Comic Sans MS", 14))
    filedisplay.pack()

    bottomframe = Frame(window, bg="#BC04BF")
    bottomframe.place(rely=0.48, relx=0.015, relwidth=0.97, relheight=0.51)

    loadDataButton = Button(bottomframe,
                            text="Upload data to DB",
                            font=("Roboto", 14, "bold"),
                            fg="Brown",
                            bg="#54EE4A",
                            bd=5,
                            relief="raised",
                            command=lambda: loadData(filedisplay))
    loadDataButton.place(rely=0.25, relx=0.25, relheight=0.15, relwidth=0.50)

    backButton = Button(bottomframe,
                        text="Back to Homepage",
                        font=("Roboto", 14, "bold"),
                        fg="Brown",
                        bg="#54EE4A",
                        bd=5,
                        relief="raised",
                        command=lambda: callHomescreen(allframes))
    backButton.place(rely=0.50, relx=0.25, relheight=0.15, relwidth=0.50)

    allframes = []
    allframes.append(middleframe)
    allframes.append(topframe)
    allframes.append(bottomframe)
class App_Progressbar(object):
    """docstring for App_Progressbar"""
    def __init__(self, master, root, below, styles):
        super(App_Progressbar, self).__init__()
        self.master = master
        self.root = root
        self.styles = styles
        self.below = below

        self.putProgressbar()

    def putProgressbar(self):
        self.bar = LabelFrame(self.master,
                              width=0,
                              bg=self.styles['fg'],
                              height=10,
                              borderwidth=0)

    def set_pct(self, pct):
        window_width = self.root.winfo_width()
        desired_px = int(window_width * pct * 0.01)
        self.bar.config(width=desired_px)

    def show(self, *args, **kwargs):
        self.bar.pack()
        self.bar.place(x=0, y=self.below.winfo_height())

    def hide(self, *args, **kwargs):
        self.bar.place_forget(*args, **kwargs)
示例#4
0
 def createFrame(self) -> None:
     # create save button
     saveBtn = Button(master=self,
                      text="Save",
                      command=self.submit)
     saveBtn.place(anchor='s',
                   relx=0.5,
                   rely=1,
                   y=(-PAD))
     # create containing frame
     lfrm = LFrame(master=self,
                   text="Anime List")
     lfrm.place(anchor='n',
                relx=0.5,
                rely=0,
                y=PAD,
                relwidth=1,
                width=(-PAD * 2),
                relheight=1,
                height=(-PAD * 3 - saveBtn.winfo_reqheight()))
     # create scrolling frame
     self.scrFrm = SFrame(master=lfrm,
                          scrollbars='e',
                          padding=PAD,
                          bd=0)
     self.scrFrm.place(anchor='nw',
                       relx=0,
                       relwidth=1,
                       rely=0,
                       relheight=1)
     self.scrFrm.columnconfigure(0, weight=1)
示例#5
0
 def log_frame(self, root):
     log_frame = LabelFrame(root, text='日志')
     self.log_info_window = scrolledtext.ScrolledText(log_frame, width=49, height=19, state='disabled')
     self.log_info_window.grid(row=0, column=0, padx=5, columnspan=500)
     Button(log_frame, text='导出', width=4, padx=0, pady=0, relief='ridge', command=self.output_log).grid(row=1, column=497, pady=3, columnspan=1)
     Button(log_frame, text='清空', width=4, padx=0, pady=0, relief='ridge', command=self.clean_log).grid(row=1, column=498, pady=3, columnspan=1)
     Button(log_frame, text='关于', width=4, padx=0, pady=0, relief='ridge', command=self.about).grid(row=1, column=499, pady=3, columnspan=1)
     log_frame.place(x=2, y=284)
示例#6
0
 def download_config(self, root):
     download_config_frame = LabelFrame(root, text='下载线程数')
     self.var_thread_num = Scale(download_config_frame, showvalue=True, from_=1, to=50, length=283, orient=HORIZONTAL)
     self.var_thread_num.grid(row=0, column=0, padx=1, pady=4, columnspan=1)
     Canvas(download_config_frame, width=77, height=0).grid(row=0, column=1, padx=1, pady=1, columnspan=2)
     self.download_button = Button(root, text='开始下载', width=10, padx=0, pady=0, command=self.start2download)
     self.download_button.place(x=297, y=248)
     download_config_frame.place(x=2, y=208)
示例#7
0
 def set_download_path(self, root):
     download_path_frame = LabelFrame(root, text='下载目录')
     self.var_download_path = StringVar()
     self.var_download_path.set(self.download_path)
     download_path_info = Entry(download_path_frame, textvariable=self.var_download_path, width=40)
     download_path_info.grid(row=0, column=0, padx=3, columnspan=1)
     Button(download_path_frame, text='更改', width=4, padx=0, pady=0, command=self.change_download_path).grid(row=0, column=1, columnspan=1, padx=3, pady=3)
     Button(download_path_frame, text='打开', width=4, padx=0, pady=0, command=self.open_download_path).grid(row=0, column=2, columnspan=1, padx=3, pady=3)
     download_path_frame.place(x=2, y=150)
示例#8
0
    def Solution(self, master, font, image):

        if self.pathFound:
            len1 = len(self.listsolution)
            message = ">>".join(self.listsolution)
            list1 = [[0 for i in range(len1)] for j in range(len1)]
            for i in range(len1 - 1):
                list1[i][i + 1] = 1

            color = "#FDE69F"
            window = Toplevel(master)
            window.geometry("700x500")
            window.configure(bg=color)
            # Label
            label1 = Label(window, text="Solution", bg=color, fg="#ED5C5E")
            label1['font'] = font
            label1.place(relx=0, rely=0, relwidth=1, relheight=0.1)

            label_frame1 = LabelFrame(window, bg="white", bd=0)
            label_frame1.place(relx=0.01,
                               rely=0.11,
                               relwidth=0.98,
                               relheight=0.79)

            mybutton = Button(window,
                              image=image,
                              bg=color,
                              activebackground=color,
                              bd=0)
            mybutton.place(relx=0.8,
                           rely=0.905,
                           relheight=1 - 0.905,
                           relwidth=0.2)
            mybutton.bind("<Button-1>", lambda event: ExitButton(event))

            labelmessage = Label(window,
                                 bg=color,
                                 text="Path : " + message,
                                 bd=0,
                                 fg="#ED5C5E")
            labelmessage['font'] = font
            labelmessage.place(relx=0.01,
                               rely=0.905,
                               relwidth=0.8 - 0.01,
                               relheight=1 - 0.905)

            graph = DrawGraph(label_frame1, self.listsolution, list1)

            def ExitButton(event):
                window.destroy()

            window.mainloop()
示例#9
0
    def init_trans(self):
        # Mapa za preslikavanje niske u
        # odgavarajuću klasu transformacije
        self.funkcije = {
            'translacija': Trans,
            'skaliranje': Skal,
            'smicanje': Smic,
            'rotacija': Rot,
            'refleksija': Refl
        }

        # Pravljenje okvira za odabir transformacije
        okvir_t = LabelFrame(self,
                             text='Izaberite transformaciju',
                             padx=23,
                             pady=7)
        okvir_t.place(x=18, y=337, height=95, width=158)

        # U zavisnosti od vrednosti var koju pročitamo iz
        # padajućeg menija, poziva se prava transformacija
        self.tr = StringVar(self)
        self.tr.set('')

        # Funkcija za praćenje promenljive; izveštava o odabiru
        # transformacije i kontroliše pristup poljima za unos
        # parametara u zavisnosti od odabira; nepakovana lista
        # argumenata *args je neophodna kako bi se prosledili
        # (i zanemarili) dodatni podaci o promeni odabira, slično
        # kao što npr. kolbek funkcije u GLUT-u obavezno primaju
        # koordinate događaja, iako one često nisu nužan podatak
        self.tr.trace(
            'w',
            lambda *args: print('Odabrana transformacija:'
                                ' {}.'.format(self.tr.get())) or self.kontrola(
                                ))

        # Padajuća lista geometrijskih transformacija;
        # umesto dosad korišćene fje place za postavljanje
        # objekta na tačno određeno mesto na prozoru, ovde
        # se koristi pack, koji objekat optimalno spakuje
        # na raspoloživom prostoru; iz tog razloga je i
        # roditeljski element upravo transformacioni okvir,
        # u koji se pakuje, a ne self, kako je dosad bilo
        OptionMenu(okvir_t, self.tr, 'translacija', 'skaliranje', 'smicanje',
                   'rotacija', 'refleksija').pack(fill='x')

        # Dugme za pokretanje transformacije
        self.dugme_t = Button(okvir_t,
                              text='Transformiši',
                              command=self.transformiši,
                              state='disabled')
        self.dugme_t.pack(fill='x')
示例#10
0
    def input_plyNo(self, root):
        input_plyNo_frame = LabelFrame(root, text='保单号导入')
        self.ctrl_v_input = Entry(input_plyNo_frame, width=40, justify=CENTER)
        self.ctrl_v_input.grid(row=0, column=0, padx=3, columnspan=1)
        Button(input_plyNo_frame, text='添加', width=4, padx=0, pady=0, command=self.add1plyNo).grid(row=0, column=1, columnspan=1, padx=3)
        Button(input_plyNo_frame, text='删除', width=4, padx=0, pady=0, command=self.remove1plyNo).grid(row=0, column=2, columnspan=1, padx=3)
        self.var_txt_path = StringVar()
        txt_input = Entry(input_plyNo_frame, textvariable=self.var_txt_path, width=40, justify=CENTER, state='readonly')
        txt_input.grid(row=1, column=0, padx=3, columnspan=1)
        Button(input_plyNo_frame, text='.txt导入', width=10, padx=0, pady=0, command=self.txt_input).grid(row=1, column=1, columnspan=2, padx=3, pady=3)
        self.var_excel_path = StringVar()
        excel_input = Entry(input_plyNo_frame, textvariable=self.var_excel_path, width=40, justify=CENTER, state='readonly')
        excel_input.grid(row=2, column=0, padx=3, columnspan=1)
        Button(input_plyNo_frame, text='Excel导入', width=10, padx=0, pady=0, command=self.excel_input).grid(row=2, column=1, columnspan=2, padx=3)
        self.var_plyNoLst_info = StringVar()
        self.show_plyNo = Entry(input_plyNo_frame, textvariable=self.var_plyNoLst_info, width=40, justify=CENTER, state='readonly')
        self.show_plyNo.grid(row=3, column=0, padx=3, columnspan=1)
        self.print_plyNoLst()
        Button(input_plyNo_frame, text='查看', width=4, padx=0, pady=0, command=self.show_all_plyNo).grid(row=3, column=1, columnspan=1, padx=3, pady=3)
        Button(input_plyNo_frame, text='清空', width=4, padx=0, pady=0, command=self.remove_all_plyNo).grid(row=3, column=2, columnspan=1, padx=3, pady=3)

        input_plyNo_frame.place(x=2, y=2)
示例#11
0
class HowToUsePage(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.controller = controller
        self.content = StringVar()
        self.frame_1 = LabelFrame(self, text="使用说明", height=500, width=500)
        self.text_1 = Text(self.frame_1, height=5)

        self.create_page()

    def create_page(self):
        cont = """
支持 Windows、Linux 系统,依赖见 requirement.txt。

源代码更新地址: https://github.com/rachpt/Booking-Assistant

二进制文件更新地址: https://github.com/rachpt/Booking-Assistant/releases


1. 预定前请确保电子账户余额充足;

2 .如果还未到预定开始时间,此时程序会一较慢的速度重试,接近系统开放时,程序会自动以较快的速度重试,直到成功为止;

3. 如果成功预定了一个场地,那么就不能再预定了,如有需求,退出重新打开即可;


4. 如还有其他问题,github 联系我把!......




2019.12.08
冉成"""
        self.content.set(cont)
        self.frame_1.place(x=50, y=50, width=600, height=400)
        self.text_1.place(x=20, y=20, width=560, height=330)
        self.text_1.insert("insert", self.content.get())
        self.text_1.configure(state=DISABLED, borderwidth=0, fg="Magenta")
示例#12
0
class SettingPage(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.controller = controller
        self.is_checking = BooleanVar()
        self.is_checking.set(False)
        self.var_id = StringVar()
        self.var_pwd = StringVar()
        self.ctrl_show_pwd = False
        self.ctrl_show_pa_pwd = False
        self.Config_Path = self.controller.Config_Path
        self.Cookie_Path = self.controller.Cookie_Path
        self.ROOT = self.controller.ROOT

        logo_path = path.join(self.ROOT, "config/logo.gif")
        if not path.isfile(logo_path):
            from .pic import logo_gif, get_pic

            get_pic(logo_gif, logo_path)
        global logo_img
        logo_img = PhotoImage(file=logo_path)
        self.label_logo = Label(self, image=logo_img, width=237, height=80)
        # except Exception:
        #     pass
        self.label_id = Label(self, text="学号:", anchor=E)
        self.label_pwd = Label(self, text="统一身份认证密码:", anchor=E)

        self.entry_id = Entry(
            self,
            textvariable=self.var_id,
            width=60,
            borderwidth=3,
            font=("Helvetica", "10"),
        )
        self.entry_pwd = Entry(
            self,
            textvariable=self.var_pwd,
            width=60,
            borderwidth=3,
            font=("Helvetica", "10"),
        )
        self.entry_pwd["show"] = "*"
        self.entry_pwd_eye = Button(self,
                                    bitmap="error",
                                    width=10,
                                    command=self.show_pwd)

        self.button_login = Button(self,
                                   text="验证并保存",
                                   command=self.verification)
        self.button_checking = Button(self,
                                      text="正在后台验证用户,请稍等 ...",
                                      bg="LightGreen",
                                      fg="Red")

        self.frame = LabelFrame(self, text="更多配置", height=200, width=200)
        self.var_pa_name = StringVar()
        self.label_pa_name = Label(self.frame, text="同伴姓名:", anchor=E)
        self.ertry_pa_name = Entry(self.frame, textvariable=self.var_pa_name)

        self.var_pa_num = StringVar()
        self.label_pa_num = Label(self.frame, text="同伴学号:", anchor=E)
        self.ertry_pa_num = Entry(self.frame, textvariable=self.var_pa_num)

        self.var_pa_pwd = StringVar()
        self.label_pa_pwd = Label(self.frame, text="同伴场馆密码:", anchor=E)
        self.ertry_pa_pwd = Entry(self.frame, textvariable=self.var_pa_pwd)
        self.ertry_pa_pwd["show"] = "*"
        self.entry_pa_pwd_eye = Button(self.frame,
                                       bitmap="error",
                                       width=10,
                                       command=self.show_partner_pwd)

        self.var_sort = StringVar()
        self.place_sort_prompt = "1至8,空格分割"
        self.var_sort.set(self.place_sort_prompt)
        self.label_sort = Label(self.frame, text="预定顺序:", anchor=E)
        self.entry_sort = Entry(self.frame, textvariable=self.var_sort)

        self.create_page()

    def update_button_bar(self):
        top = 30
        height = 30
        hspace = 20
        middle = 270
        f_y = 16
        if self.is_checking.get():
            self.button_login.place_forget()
            self.button_checking.place(
                x=middle - 25,
                y=top + (height + hspace) * 4 + height * 3 + f_y * 4 + hspace +
                height + 10,
                width=250,
                height=height + 10,
            )
        else:
            self.button_login.place(
                x=middle,
                y=top + (height + hspace) * 4 + height * 3 + f_y * 4 + hspace,
                width=200,
                height=height + 10,
            )
            self.button_checking.place_forget()

    def create_page(self):
        top = 30
        height = 30
        hspace = 20
        middle = 270
        logo_h = 80
        logo_w = 237

        self.label_logo.place(x=(750 - logo_w) / 2,
                              y=0,
                              width=logo_w,
                              height=logo_h)

        self.label_id.place(x=190,
                            y=top + logo_h,
                            width=middle - 190,
                            height=height)
        self.label_pwd.place(x=160,
                             y=top + logo_h + (height + hspace),
                             width=middle - 160,
                             height=height)

        self.entry_id.place(x=middle, y=top + logo_h, width=250, height=height)
        self.entry_pwd.place(x=middle,
                             y=top + logo_h + (height + hspace),
                             width=230,
                             height=height)
        self.entry_pwd_eye.place(
            x=middle + 220,
            y=top + logo_h + (height + hspace),
            width=height,
            height=height,
        )

        f_x = 30
        f_y = 16
        f_w1 = 90
        f_w2 = 160
        f_spx = 26
        self.frame.place(x=50,
                         y=top + (height + hspace) * 4,
                         width=630,
                         height=height * 3 + f_y * 4)

        self.label_pa_name.place(x=f_x, y=f_y, width=f_w1, height=height)
        self.ertry_pa_name.place(x=f_x + f_w1,
                                 y=f_y,
                                 width=f_w2,
                                 height=height)
        self.label_pa_num.place(x=f_x + f_w1 + f_w2 + f_spx,
                                y=f_y,
                                width=f_w1,
                                height=height)
        self.ertry_pa_num.place(x=f_x + f_w1 * 2 + f_w2 + f_spx,
                                y=f_y,
                                width=f_w2,
                                height=height)
        self.label_pa_pwd.place(x=f_x,
                                y=f_y * 2 + height,
                                width=f_w1,
                                height=height)
        self.ertry_pa_pwd.place(x=f_x + f_w1,
                                y=f_y * 2 + height,
                                width=f_w2 - height,
                                height=height)
        self.entry_pa_pwd_eye.place(
            x=f_x + f_w1 + f_w2 - height,
            y=f_y * 2 + height,
            width=height,
            height=height,
        )
        self.label_sort.place(x=f_x + f_w1 + f_w2 + f_spx,
                              y=f_y * 2 + height,
                              width=f_w1,
                              height=height)
        self.entry_sort.place(
            x=f_x + f_w1 * 2 + f_w2 + f_spx,
            y=f_y * 2 + height,
            width=f_w2,
            height=height,
        )
        self.entry_sort.bind("<FocusIn>", self.place_sort_click)
        self.entry_sort.bind("<FocusOut>", self.place_sort_out)
        self.entry_sort.config(fg="grey")

        self.update_button_bar()
        try:
            with open(self.Config_Path, "rb") as _file:
                usrs_info = load(_file)
                self.var_id.set(usrs_info["student_id"])
                self.var_pwd.set(usrs_info["student_pwd"])
                self.var_pa_name.set(usrs_info["pa_name"])
                self.var_pa_num.set(usrs_info["pa_num"])
                self.var_pa_pwd.set(usrs_info["pa_pwd"])
                self.var_sort.set(usrs_info["place_sort"])
        except (FileNotFoundError, KeyError):
            pass

    def place_sort_click(self, event):
        if self.var_sort.get() == self.place_sort_prompt:
            self.var_sort.set("")
            self.entry_sort.config(fg="black")

    def place_sort_out(self, enent):
        if self.var_sort.get() == "":
            self.var_sort.set(self.place_sort_prompt)
            self.entry_sort.config(fg="grey")

    def verification(self, auto=False):
        if auto:
            self.is_checking.set(True)
            self.update_button_bar()
        try:
            student_id = self.var_id.get()
            student_pwd = self.var_pwd.get()
            pa_name = self.var_pa_name.get()
            pa_num = self.var_pa_num.get()
            pa_pwd = self.var_pa_pwd.get()
            param_ok = self.controller.param_ok
            place_sort = self.var_sort.get().strip()
            if place_sort == self.place_sort_prompt:
                place_sort = ""

            user_info = {
                "student_id": student_id,
                "student_pwd": student_pwd,
                "pa_name": pa_name,
                "pa_num": pa_num,
                "pa_pwd": pa_pwd,
                "place_sort": place_sort,
                "param_ok": param_ok,
            }
            # print(user_info)
            _up_state = update_cookie(self.Config_Path, self.Cookie_Path)
            # print(_up_state, auto)
            if auto and _up_state:
                # 旧配置 与 cookie 有效
                self.controller.param_ok = True
            if not auto:
                if pa_num:
                    match_pa_num = match(r"^\w20[\d]{7}$", pa_num)
                    if not match_pa_num:
                        raise Exception("同伴学号格式不对!")
                if not student_id:
                    raise Exception("请输入学号!")
                else:
                    # 匹配学号
                    _match = match(r"^\w20[\d]{7}$", student_id)
                    if not _match:
                        raise Exception("学号格式不对!")
                if not student_pwd:
                    raise Warning("请输入统一身份认证密码!")
                if force_update_cookie(self.Cookie_Path,
                                       user_info,
                                       verify=True):
                    self.controller.param_ok = True
                    with open(self.Config_Path, "wb") as _file:
                        dump(user_info, _file)
                else:
                    raise RuntimeError("登录失败!")
        except Warning:
            pass
        except Exception as exc:
            messagebox.showerror("Error", "--" * 28 + "\n身份验证失败:%s" % exc)
        else:
            # messagebox.showinfo('提示', '--'*28+'\n   =_=用户信息配置有效=_=   ')
            self.controller.show_frame("RunPage")
        if auto:
            self.is_checking.set(False)
            self.update_button_bar()

    def show_pwd(self):
        if self.ctrl_show_pwd:
            self.ctrl_show_pwd = False
            self.entry_pwd.configure(show="*")
        else:
            self.ctrl_show_pwd = True
            self.entry_pwd.configure(show="")

    def show_partner_pwd(self):
        if self.ctrl_show_pa_pwd:
            self.ctrl_show_pa_pwd = False
            self.ertry_pa_pwd.configure(show="*")
        else:
            self.ctrl_show_pa_pwd = True
            self.ertry_pa_pwd.configure(show="")
timeLabel = Label(titleFrame,
                  fg="Navy Blue",
                  bg="khaki1",
                  font=('Verdana', 15, 'bold'),
                  padx=4)
timeLabel.place(x=1090, y=35)

functions.clock(window, timeLabel)

dataFrameLeft = LabelFrame(window,
                           relief="sunken",
                           bd=4,
                           text='Pizza Menu (Single 10" size):',
                           bg="khaki1",
                           font=('Verdana', 14, 'bold'))
dataFrameLeft.place(x=15, y=105, width=670, height=500)

dataFrameRight = LabelFrame(window,
                            relief="sunken",
                            bd=4,
                            text="Beverage(s) / Dessert(s):",
                            bg="khaki1",
                            font=('Verdana', 14, 'bold'))
dataFrameRight.place(x=700, y=105, width=650, height=500)

dataFrameBottom = Frame(window, relief="sunken", bd=4, bg="khaki1")
dataFrameBottom.place(x=15, y=620, width=1335, height=130)

#Labels and Buttons
#Pizza Labels and Buttons
#Veg. Extravaganza Pizza
示例#14
0
parser = Parser()

#------------------------------------------------window------------------------------------------------
window = Tk()
window.geometry("1200x800+250+50")
window.resizable(0, 0)
window.title("Log parser")

#----------------------------------------------fileselect----------------------------------------------
fileFrame = LabelFrame(window,
                       text="Odabir datoteke:",
                       height=94,
                       width=200,
                       borderwidth=2,
                       relief="groove")
fileFrame.place(x=5, y=0)

filenameLabel = Label(fileFrame, text="Naziv datoteke:")
filenameLabel.place(x=10, y=5)

loadedFileLabel = Label(fileFrame, text="/", foreground="red")
loadedFileLabel.place(x=95, y=5)

filenameButton = Button(fileFrame, text="Učitaj datoteku", command=LoadFile)
filenameButton.place(x=50, y=35)

#----------------------------------------------checkboxes----------------------------------------------
varClientIP = IntVar()
varClientID = IntVar()
varUsername = IntVar()
varDate = IntVar()
示例#15
0
文件: input.py 项目: linyan803/ggsddu
class InputWindow(Frame):
    def __init__(self, master, font_name):
        global photo_previous, photo_next, photo_new, photo_pick, \
            photo_edit, photo_cancel, photo_submit
        super().__init__(master)  # 调用父类的初始化函数
        self.master = master
        self.my_font = Font(family=font_name, size=14)
        self.my_small_font = Font(family=font_name, size=12)  # 部分按钮字体小一点
        self.pack(fill=BOTH, expand=1)  # 自身Frame最大化

        self.pic_stem_file_name = ''  # 选到的题干图片
        self.pic_ana_file_name = ''  # 选到的解析图片

        self.db_subject_conn = None
        self.db_subject_cur = None
        self.db_personal_conn = sqlite3.connect(
            ROOT_PATH + "/database/PERSONAL.db")
        self.db_personal_cur = self.db_personal_conn.cursor()

        self.exercise_list = None  # 查询到的习题列表
        self.exercise_num = -1  # 习题列表中的数量
        self.tree_selection = {'tag': '', 'subject': ''}  # 当前选择的tree元素
        self.selection_var = StringVar()
        self.show = ''  # 显示 Stem/Ana
        self.show_var = StringVar()

        # 设置ttk的样式
        style = ttk.Style()
        style.theme_use('vista')
        style.configure(
            'Treeview',  # treeview的样式
            rowheight=27,
            font=self.my_font)
        style.configure(
            'TCombobox')  # combobox的样式

        # command_widgets
        '''
        self.select_label = Label(
            self,
            textvariable=self.selection_var,
            fg='blue',
            font=self.my_font)
        self.select_label.place(x=225, y=15, anchor='nw')
        '''
        '''
        self.status = StringVar()
        self.status.set('状态:修改->')
        self.notice_label = Label(
            self,
            textvariable=self.status,
            fg='blue',
            font=self.my_font)
        self.notice_label.place(x=920, y=18, anchor='nw')
        '''
        # self.submit_button = Button(
        #     self,
        #     text="提交",
        #     font=self.my_font,
        #     width=8,
        #     height=1,
        #     command=self.submit)
        # self.submit_button.place(x=1030, y=10, anchor='nw')

        # exercise_window
        select_label = Label(
            self,
            textvariable=self.show_var,
            # fg='blue',
            font=self.my_font)
        self.exercise_frame = LabelFrame(
            self,
            labelwidget=select_label,
            font=self.my_font,
            padx=5,
            pady=5,
            width=970,
            height=583)
        self.exercise_frame.place(x=220, y=5, anchor='nw')

        # 分隔线
        # canvas = Canvas(self.exercise_frame, width=950, height=10)
        # canvas.place(x=0, y=488, anchor='nw')
        # canvas.create_line(0, 3, 950, 3, fill='lightgrey')

        # ComboBox字体修改
        self.exercise_frame.option_add("*TCombobox*Listbox*Font", self.my_font)

        # 题型
        model_label = Label(self.exercise_frame, text='题型:',
                            font=self.my_font)
        model_label.place(x=5, y=5, anchor='nw')
        self.selected_model = StringVar()
        values = ('单项填空题', '单项选择题')
        self.model_combobox = ttk.Combobox(
            master=self.exercise_frame,
            # 高度,下拉显示的条目数量
            height=10,
            width=10,
            # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled
            state='readonly',
            # 鼠标移动时样式 arrow, circle, cross, plus...
            cursor='arrow',
            font=self.my_font,
            textvariable=self.selected_model,
            values=values)
        self.model_combobox.bind("<<ComboboxSelected>>", self.change_model)
        self.model_combobox.place(x=55, y=5, anchor='nw')
        self.model_combobox.current(0)  # 设置下拉列表默认显示的值

        # 题干类型
        stem_label = Label(self.exercise_frame, text='题干:',
                           font=self.my_font)
        stem_label.place(x=200, y=5, anchor='nw')
        self.stem_pic_var = StringVar()
        values = ('文字作为题干', '图片作为题干')
        self.stem_combobox = ttk.Combobox(
            master=self.exercise_frame,  # 父容器
            height=10,  # 高度,下拉显示的条目数量
            width=11,  # 宽度
            state='readonly',  # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled
            cursor='arrow',  # 鼠标移动时样式 arrow, circle, cross, plus...
            font=self.my_font,
            textvariable=self.stem_pic_var,
            values=values)
        self.stem_combobox.bind("<<ComboboxSelected>>", self.show_stem)
        self.stem_combobox.current(0)  # 设置下拉列表默认显示的值
        self.stem_combobox.place(x=250, y=5, anchor='nw')
        pic_pick_file_name = ROOT_PATH + "/resource/pick.png"
        image_pick = Image.open(pic_pick_file_name)
        photo_pick = ImageTk.PhotoImage(image_pick)
        self.stem_pic_button = Button(
            self.exercise_frame,
            font=self.my_small_font,
            width=30,
            height=25,
            image=photo_pick,
            command=self.open_stem_pic)
        self.stem_pic_button.place(x=395, y=5, anchor='nw')

        # 答案
        answer_label = Label(self.exercise_frame, text='答案:',
                             font=self.my_font)
        answer_label.place(x=445, y=5, anchor='nw')
        self.answer_var = StringVar()
        self.answer_editor = Entry(
            self.exercise_frame,
            width=20,
            textvariable=self.answer_var,
            font=self.my_font)
        values = ('A', 'B', 'C', 'D')
        self.answer_combobox = ttk.Combobox(
            master=self.exercise_frame,  # 父容器
            height=10,  # 高度,下拉显示的条目数量
            width=10,  # 宽度
            state='readonly',  # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled
            cursor='arrow',  # 鼠标移动时样式 arrow, circle, cross, plus...
            font=self.my_font,
            textvariable=self.answer_var,
            values=values)
        self.answer_combobox.current(2)  # 设置下拉列表默认显示的值
        self.change_model(None)  # 调用一次以便按照

        # 解析类型
        ana_label = Label(self.exercise_frame, text='解析:',
                          font=self.my_font)
        ana_label.place(x=725, y=5, anchor='nw')
        self.ana_var = StringVar()
        values = ('文字作为解析', '图片作为解析')
        self.ana_combobox = ttk.Combobox(
            master=self.exercise_frame,  # 父容器
            height=10,  # 高度,下拉显示的条目数量
            width=11,  # 宽度
            state='readonly',  # 设置状态 normal(可选可输入)、readonly(只可选)、 disabled
            cursor='arrow',  # 鼠标移动时样式 arrow, circle, cross, plus...
            font=self.my_font,
            textvariable=self.ana_var,
            values=values)
        self.ana_combobox.bind("<<ComboboxSelected>>", self.show_ana)
        self.ana_combobox.current(1)  # 设置下拉列表默认显示的值
        self.ana_combobox.place(x=775, y=5, anchor='nw')
        self.ana_pic_button = Button(
            self.exercise_frame,
            width=30,
            height=25,
            image=photo_pick,
            command=self.open_ana_pic)
        self.ana_pic_button.place(x=920, y=5, anchor='nw')

        # 题干&解析按钮
        self.stem_button = Button(
            self.exercise_frame,
            text='题干',
            font=self.my_small_font,
            width=8,
            height=1,
            command=self.show_stem)
        self.stem_button.place(x=5, y=43, anchor='nw')
        self.ana_button = Button(
            self.exercise_frame,
            text='解析',
            font=self.my_small_font,
            width=8,
            height=1,
            command=self.show_ana)
        self.ana_button.place(x=95, y=43, anchor='nw')

        # 题干&解析呈现
        self.stem_editor = Text(
            self.exercise_frame,
            width=86,
            height=16,
            font=self.my_font)
        self.stem_canvas = Canvas(
            self.exercise_frame,
            width=950,
            height=400,
            bg='white')
        self.ana_editor = Text(
            self.exercise_frame,
            width=86,
            height=16,
            font=self.my_font)
        self.ana_canvas = Canvas(
            self.exercise_frame,
            width=950,
            height=400,
            bg='white')

        self.tree = ttk.Treeview(
            self,
            height=21,
            show='tree',
            selectmode='browse')

        english = self.tree.insert('', 0, 'ENGLISH', text='英语', open=True)
        self.tree.insert(english, 0, 'words#ENGLISH', text='单词')
        self.tree.insert(english, 1, 'grammar#ENGLISH', text='语法')
        geography = self.tree.insert('', 0, 'GEOGRAPHY', text='地理', open=True)
        self.tree.insert(geography, 0, '53#GEOGRAPHY', text='5+3')
        self.tree.insert(geography, 1, 'school#GEOGRAPHY', text='校内')
        biology = self.tree.insert('', 0, 'BIOLOGY', text='生物', open=True)
        self.tree.insert(biology, 0, '53#BIOLOGY', text='5+3')
        self.tree.insert(biology, 1, 'school#BIOLOGY', text='校内')
        math = self.tree.insert('', 0, 'MATH', text='数学', open=True)
        self.tree.insert(math, 0, '53#MATH', text='5+3')
        self.tree.insert(math, 1, 'school#MATH', text='校内')
        chinese = self.tree.insert('', 0, 'CHINESE', text='语文', open=True)
        self.tree.insert(chinese, 0, '53#CHINESE', text='5+3')
        self.tree.insert(chinese, 1, 'school#CHINESE', text='校内')
        physics = self.tree.insert('', 0, 'PHYSICS', text='物理', open=True)
        self.tree.insert(physics, 0, '53#PHYSICS', text='5+3')
        self.tree.insert(physics, 1, 'school#PHYSICS', text='校内')

        xes_math = self.tree.insert(math, 21, 'xes#MATH', text='学而思', open=True)
        self.tree.bind("<<TreeviewSelect>>", self.tree_select)
        self.tree.selection_set(xes_math)  # 缺省选中学而思
        self.tree.place(x=10, y=17, anchor='nw')

        pic_button_previous_file_name = ROOT_PATH + "/resource/left.png"
        image_previous = Image.open(pic_button_previous_file_name)
        photo_previous = ImageTk.PhotoImage(image_previous)
        self.previous_button = Button(
            self.exercise_frame,
            font=self.my_font,
            width=155,
            height=36,
            image=photo_previous,
            command=self.previous)
        self.previous_button.place(x=6, y=495, anchor='nw')
        pic_edit_file_name = ROOT_PATH + "/resource/edit.png"
        image_edit = Image.open(pic_edit_file_name)
        photo_edit = ImageTk.PhotoImage(image_edit)
        self.edit_button = Button(
            self.exercise_frame,
            text="新建题目",
            font=self.my_font,
            width=155,
            height=36,
            image=photo_edit,
            command=self.edit)
        self.edit_button.place(x=181, y=495, anchor='nw')
        pic_button_next_file_name = ROOT_PATH + "/resource/right.png"
        image_next = Image.open(pic_button_next_file_name)
        photo_next = ImageTk.PhotoImage(image_next)
        self.next_button = Button(
            self.exercise_frame,
            text="下一题",
            font=self.my_font,
            width=155,
            height=36,
            image=photo_next,
            command=self.next)
        self.next_button.place(x=356, y=495, anchor='nw')
        pic_button_new_file_name = ROOT_PATH + "/resource/plus.png"
        image_new = Image.open(pic_button_new_file_name)
        photo_new = ImageTk.PhotoImage(image_new)
        self.new_button = Button(
            self.exercise_frame,
            font=self.my_font,
            width=155,
            height=36,
            image=photo_new,
            command=self.new)
        self.new_button.place(x=650, y=495, anchor='nw')
        pic_button_cancel_file_name = ROOT_PATH + "/resource/cancel.png"
        image_cancel = Image.open(pic_button_cancel_file_name)
        photo_cancel = ImageTk.PhotoImage(image_cancel)
        self.cancel_button = Button(
            self.exercise_frame,
            font=self.my_font,
            width=155,
            height=36,
            image=photo_cancel,
            command=self.cancel)
        pic_button_submit_file_name = ROOT_PATH + "/resource/submit.png"
        image_submit = Image.open(pic_button_submit_file_name)
        photo_submit = ImageTk.PhotoImage(image_submit)
        self.submit_button = Button(
            self.exercise_frame,
            font=self.my_font,
            width=155,
            height=36,
            image=photo_submit,
            command=self.submit)

        self.seq = -1
        self.status = ''  # browse/new/edit

        self.show_stem()  # 调用一次以便按照

    def __del__(self):
        print("析构函数掉用, 关闭数据库连接")
        if self.db_subject_cur is not None:
            self.db_subject_cur.close()
        if self.db_subject_conn is not None:
            self.db_subject_conn.close()
        if self.db_personal_cur is not None:
            self.db_personal_cur.close()
        if self.db_personal_conn is not None:
            self.db_personal_conn.close()

    def tree_select(self, event):
        self.selection_var.set(self.tree.selection()[0])
        tags = self.selection_var.get().split('#')
        if len(tags) == 2:
            tag = tags[0]
            subject = tags[1]
        else:
            return

        if tag == self.tree_selection.get('tag') \
                and subject == self.tree_selection.get('subject'):
            # tag 和科目都没有变, 数据不用刷新
            return

        if self.db_subject_cur is not None:
            self.db_subject_cur.close()
        if self.db_subject_conn is not None:
            self.db_subject_conn.close()

        # 更换和打开数据库
        subject_db_string = ROOT_PATH + "/database/" + subject + '.db'
        self.db_subject_conn = sqlite3.connect(subject_db_string)
        self.db_subject_cur = self.db_subject_conn.cursor()

        if self.exercise_list is not None:
            del self.exercise_list
            self.exercise_list = None

        # 获取这个科目的题目
        sql_string = \
            "SELECT " \
            " answer.ID AS id," \
            " answer.SUB_ID AS sub_id," \
            " answer.MODEL AS model," \
            " answer.KEY AS key," \
            " answer.E_STYLE AS e_style," \
            " answer.EXPLAIN AS explain," \
            " stem.D_STYLE AS d_style," \
            " stem.DES AS stem " \
            "FROM " \
            "answer NATURAL JOIN stem " \
            "WHERE " \
            "NODE='" \
            + self.selection_var.get() + \
            "' " \
            "ORDER BY ID DESC"
        self.exercise_list = self.db_subject_cur.execute(sql_string).fetchall()
        self.exercise_num = len(self.exercise_list)

        # 更换新的select
        self.tree_selection['tag'] = tag
        self.tree_selection['subject'] = subject
        self.seq = -1

        self.next(None)

    def previous(self, event=None):
        e = None
        seq = self.seq - 1
        print("self.exercise_num : ", self.exercise_num)
        if self.exercise_num <= 0:
            e = self._empty_exercise()
        elif seq >= 0:
            self.seq = seq
            e = self.exercise_list[self.seq]

        if e is not None:
            self._change_status('edit')
            self._set_exercise(e)
            self._change_status('browse')

    def next(self, event=None):
        e = None
        seq = self.seq + 1
        print("self.exercise_num: %d, self.seq: %d" %
              (self.exercise_num, self.seq))
        if self.exercise_num <= 0:
            e = self._empty_exercise()
        elif seq < self.exercise_num:
            self.seq = seq
            e = self.exercise_list[self.seq]

        if e is not None:
            self._change_status('edit')
            self._set_exercise(e)
            self._change_status('browse')

    @staticmethod
    def _empty_exercise():
        id = -1
        sub_id = 0
        model = 1
        key = ' '
        e_style = 1
        explain = ' '
        d_style = 1
        stem = ' '

        e = (id, sub_id, model, key, e_style, explain, d_style, stem)
        return e

    def _set_exercise(self, e):
        global photo_stem, photo_ana
        model = e[2]
        id = e[0]
        d_style = e[6]
        stem = e[7]
        e_style = e[4]
        explain = e[5]
        key = e[3]

        if id < 0:
            show_string = \
                'New exercise in ' + \
                self.tree.selection()[0] + '  ' + 'Exercise ID: ' + str(-1)
        else:
            show_string = \
                str(self.seq+1) + ' of ' + str(self.exercise_num) + ' in ' + \
                self.tree.selection()[0] + '  ' + 'Exercise ID: ' + str(id)

        self.show_var.set(show_string)

        self.model_combobox.current(model - 1)
        model_string = self.model_combobox.get()
        print("model string: ", model_string)
        print("key: ", key)
        if "单项填空题" == model_string:
            self.answer_var.set(key)
        if "单项选择题" == model_string:
            index = covert_choice_2_index(key)
            self.answer_combobox.current(index)
        self.change_model(None)

        if STYLE.IMG_FILE == d_style and len(stem) > 0:
            self.stem_combobox.current(d_style - 1)
            pic_stem_file_name = \
                ROOT_PATH + "/raw/" + \
                self.tree_selection['subject'] + '/' + \
                str(id) + "-stem.png"
            print(pic_stem_file_name)
            image_stem = Image.open(pic_stem_file_name)
            photo_stem = ImageTk.PhotoImage(image_stem)
            self.stem_canvas.delete("all")
            self.stem_canvas.create_image(5, 5, anchor=NW, image=photo_stem)
        if STYLE.TEXT_IN_DB == d_style and len(stem) > 0:
            print("stem is %s, and insert it" % stem)
            self.stem_combobox.current(d_style - 1)
            self.stem_editor.delete('1.0', 'end')
            self.stem_editor.insert('end', stem)

        if STYLE.IMG_FILE == e_style and len(explain) > 0:
            self.ana_combobox.current(e_style - 1)
            pic_ana_file_name = \
                ROOT_PATH + "/raw/" + \
                self.tree_selection['subject'] + '/' + \
                str(id) + "-ana.png"
            image_ana = Image.open(pic_ana_file_name)
            photo_ana = ImageTk.PhotoImage(image_ana)
            self.ana_canvas.delete("all")
            self.ana_canvas.create_image(5, 5, anchor=NW, image=photo_ana)
        if STYLE.TEXT_IN_DB == e_style and len(explain) > 0:
            self.ana_combobox.current(e_style - 1)
            self.ana_editor.delete('1.0', 'end')
            self.ana_editor.insert('end', stem)

        self.show_stem()

    def new(self):
        e = self._empty_exercise()
        self.new_button.place_forget()
        self.previous_button.place_forget()
        self.next_button.place_forget()
        self.edit_button.place_forget()
        self.cancel_button.place(x=450, y=495, anchor='nw')
        self.submit_button.place(x=650, y=495, anchor='nw')
        self._change_status('new')
        self._set_exercise(e)

    def edit(self):
        self.new_button.place_forget()
        self.previous_button.place_forget()
        self.next_button.place_forget()
        self.edit_button.place_forget()
        self.cancel_button.place(x=450, y=495, anchor='nw')
        self.submit_button.place(x=650, y=495, anchor='nw')
        self._change_status('edit')

    def cancel(self):
        if self.exercise_num <= 0:
            e = self._empty_exercise()
        elif 0 <= self.seq < self.exercise_num:
            e = self.exercise_list[self.seq]
        self.previous_button.place(x=6, y=495, anchor='nw')
        self.edit_button.place(x=181, y=495, anchor='nw')
        self.next_button.place(x=356, y=495, anchor='nw')
        self.new_button.place(x=650, y=495, anchor='nw')

        self.cancel_button.place_forget()
        self.submit_button.place_forget()
        self._change_status('browse')
        self._set_exercise(e)

    def submit(self):
        if 'new' == self.status:
            self._insert_new()

            if self.exercise_list is not None:
                del self.exercise_list
                self.exercise_list = None

            # 获取这个科目的题目
            sql_string = \
                "SELECT " \
                " answer.ID AS id," \
                " answer.SUB_ID AS sub_id," \
                " answer.MODEL AS model," \
                " answer.KEY AS key," \
                " answer.E_STYLE AS e_style," \
                " answer.EXPLAIN AS explain," \
                " stem.D_STYLE AS d_style," \
                " stem.DES AS stem " \
                "FROM " \
                "answer NATURAL JOIN stem " \
                "WHERE " \
                "NODE='" \
                + self.selection_var.get() + \
                "' " \
                "ORDER BY ID DESC"
            self.exercise_list = self.db_subject_cur.execute(sql_string).fetchall()
            self.exercise_num = len(self.exercise_list)
            self.seq = -1
            self.next()

        if 'edit' == self.status:
            self._update_old()

        self.previous_button.place(x=6, y=495, anchor='nw')
        self.edit_button.place(x=181, y=495, anchor='nw')
        self.next_button.place(x=356, y=495, anchor='nw')
        self.new_button.place(x=650, y=495, anchor='nw')

        self.cancel_button.place_forget()
        self.submit_button.place_forget()

    def _update_old(self):
        e = self.exercise_list[self.seq]
        id_value = e[0]
        print("update old, id is ", id)
        model_string = self.model_combobox.get()
        if "单项选择题" == model_string:
            _model = Model.SINGLE_CHOICE
            _key = self.answer_combobox.get()
        if "单项填空题" == model_string:
            _model = Model.SINGLE_BLANK
            _key = self.answer_editor.get().strip()

        stem_type_string = self.stem_combobox.get()
        if "图片作为题干" == stem_type_string:
            _stem_type = STYLE.IMG_FILE
            _des = self.pic_stem_file_name
        if "文字作为题干" == stem_type_string:
            _stem_type = STYLE.TEXT_IN_DB
            _des = self.stem_editor.get(1.0, END).strip()

        if len(_des) == 0 or len(_key) == 0:
            messagebox.showerror(title='出错了!', message='题干或者答案不能为空。')
            return

        ana_type_string = self.ana_combobox.get()
        if "图片作为解析" == ana_type_string:
            _ana_type = STYLE.IMG_FILE
            _ana = self.pic_ana_file_name
        if "文字作为解析" == ana_type_string:
            _ana_type = STYLE.TEXT_IN_DB
            _ana = self.ana_editor.get(1.0, END).strip()

        time_stamp = datetime.datetime.now()
        time_string = time_stamp.strftime('%Y.%m.%d %H:%M:%S')
        node_string = self.selection_var.get()
        values = (_model, _stem_type, _des, time_string, node_string, id_value)

        print("stem: ", values)
        update_stem_sql = "UPDATE stem SET MODEL=?, D_STYLE=?, DES=?, " \
                          "TIME_STAMP=?,NODE=? WHERE ID=?"
        self.db_subject_cur.execute(update_stem_sql, values)

        if STYLE.IMG_FILE == _stem_type and len(self.pic_stem_file_name) > 0:
            src_file = os.path.basename(_des)
            name, ext = os.path.splitext(src_file)
            dst_file = \
                ROOT_PATH + '/raw/' + self.tree_selection['subject'] + '/' + \
                str(id_value) + '-stem' + ext
            copyfile(self.pic_stem_file_name, dst_file)
        if STYLE.IMG_FILE == _ana_type and len(self.pic_ana_file_name) > 0:
            src_file = os.path.basename(_des)
            name, ext = os.path.splitext(src_file)
            dst_file = \
                ROOT_PATH + '/raw/' + self.tree_selection['subject'] + '/' + \
                str(id_value) + '-ana' + ext
            # print(self.pic_file_name,dst_file)
            copyfile(self.pic_ana_file_name, dst_file)

        sub_id = 0

        values = (_model, _key, _ana_type, _ana, id_value, sub_id)
        print("answer: ", values)
        update_answer_sql = "UPDATE answer SET MODEL=?, KEY=?, E_STYLE=?" \
                            ", EXPLAIN=? WHERE ID=? AND SUB_ID=?"
        self.db_subject_cur.execute(update_answer_sql, values)
        self.db_subject_conn.commit()

    def _insert_new(self):
        model_string = self.model_combobox.get()
        if "单项选择题" == model_string:
            _model = Model.SINGLE_CHOICE
            _key = self.answer_combobox.get()
        if "单项填空题" == model_string:
            _model = Model.SINGLE_BLANK
            _key = self.answer_editor.get().strip()

        stem_type_string = self.stem_combobox.get()
        if "图片作为题干" == stem_type_string:
            _stem_type = STYLE.IMG_FILE
            _des = self.pic_stem_file_name
        if "文字作为题干" == stem_type_string:
            _stem_type = STYLE.TEXT_IN_DB
            _des = self.stem_editor.get(1.0, END).strip()

        if len(_des) == 0 or len(_key) == 0:
            messagebox.showerror(title='出错了!', message='题干或者答案不能为空。')
            return

        ana_type_string = self.ana_combobox.get()
        if "图片作为解析" == ana_type_string:
            _ana_type = STYLE.IMG_FILE
            _ana = self.pic_ana_file_name
        if "文字作为解析" == ana_type_string:
            _ana_type = STYLE.TEXT_IN_DB
            _ana = self.ana_editor.get(1.0, END).strip()

        time_stamp = datetime.datetime.now()
        time_string = time_stamp.strftime('%Y.%m.%d %H:%M:%S')
        node_string = self.selection_var.get()
        values = (_model, _stem_type, _des, time_string, node_string)

        print("stem: ", values)
        insert_stem_sql = "insert into stem (MODEL, D_STYLE, DES, " \
                          "TIME_STAMP,NODE) values (?,?,?,?,?)"
        self.db_subject_cur.execute(insert_stem_sql, values)
        id_query_sql = "select last_insert_rowid() from stem"
        id_query_result = self.db_subject_cur.execute(id_query_sql)
        id_value = id_query_result.fetchone()[0]

        sub_id = 0  # 子题目, 先固定为0

        if STYLE.IMG_FILE == _stem_type and len(self.pic_stem_file_name) > 0:
            src_file = os.path.basename(_des)
            name, ext = os.path.splitext(src_file)
            dst_file = \
                ROOT_PATH + '/raw/' + self.tree_selection['subject'] + '/' + \
                str(id_value) + '-stem' + ext
            copyfile(self.pic_stem_file_name, dst_file)
        if STYLE.IMG_FILE == _ana_type and len(self.pic_ana_file_name) > 0:
            src_file = os.path.basename(_des)
            name, ext = os.path.splitext(src_file)
            dst_file = \
                ROOT_PATH + '/raw/' + self.tree_selection['subject'] + '/' + \
                str(id_value) + '-ana' + ext
            # print(self.pic_file_name,dst_file)
            copyfile(self.pic_ana_file_name, dst_file)

        values = (id_value, sub_id, _model, _key, _ana_type, _ana)
        print("answer: ", values)
        insert_answer_sql = "insert into answer (ID, SUB_ID, MODEL," \
                            "KEY, E_STYLE, EXPLAIN) values (?,?,?,?,?,?)"
        self.db_subject_cur.execute(insert_answer_sql, values)

        subject_string = self.tree_selection['subject']
        subject_value = Subject.get_num(subject_string)
        values = (subject_value, id_value, sub_id, 0, 0, 2.0, 0, '',
                  time_string)
        print("person: ", values)
        insert_personal_sql = \
            "insert into exercise_info (SUBJECT, ID, SUB_ID, " \
            "TIMES, CORRECT, WEIGHT, STATUS, NOTE, TIME_STAMP) " \
            "values (?,?,?,?,?,?,?,?,?)"
        self.db_personal_cur.execute(insert_personal_sql, values)

        self.db_subject_conn.commit()
        self.db_personal_conn.commit()

    def open_stem_pic(self):
        global photo_stem
        return_file_name = \
            askopenfilename(
                title='选择题干图片',
                filetypes=[('png file', '*.png'),
                           ('jpg file', '*.jpg')])
        if len(return_file_name) > 0:
            self.pic_stem_file_name = return_file_name
            image_stem = Image.open(self.pic_stem_file_name)
            photo_stem = ImageTk.PhotoImage(image_stem)
            self.stem_canvas.create_image(5, 5, anchor=NW, image=photo_stem)

    def open_ana_pic(self):
        global photo_ana
        return_file_name = \
            askopenfilename(
                title='选择题干图片',
                filetypes=[('png file', '*.png'),
                           ('jpg file', '*.jpg')])
        if len(return_file_name) > 0:
            self.pic_ana_file_name = return_file_name
            # print(self.pic_file_name)
            image_ana = Image.open(self.pic_ana_file_name)
            photo_ana = ImageTk.PhotoImage(image_ana)
            self.ana_canvas.create_image(5, 5, anchor=NW, image=photo_ana)

    def show_stem(self, event=None):
        print("call show_stem at ", self.show)
        self.show = 'Stem'
        self.ana_button.configure(bg='lightgray', fg='white')
        self.stem_button.configure(bg='blue', fg='white')
        stem_type_string = self.stem_combobox.get()
        print(stem_type_string)

        self.ana_editor.place_forget()
        self.ana_canvas.place_forget()

        if "图片作为题干" == stem_type_string:
            self.stem_editor.place_forget()
            self.stem_canvas.place(x=5, y=80, anchor='nw')
        if "文字作为题干" == stem_type_string:
            self.stem_canvas.place_forget()
            self.stem_editor.place(x=5, y=80, anchor='nw')
            print("editor words: ", self.stem_editor.get(1.0, END))

    def show_ana(self, event=None):
        print("call show_ana at ", self.show)
        self.show = 'Ana'
        self.stem_button.configure(bg='lightgray', fg='white')
        self.ana_button.configure(bg='blue', fg='white')
        ana_type_string = self.ana_combobox.get()

        self.stem_editor.place_forget()
        self.stem_canvas.place_forget()

        if "图片作为解析" == ana_type_string:
            self.ana_editor.place_forget()
            self.ana_canvas.place(x=5, y=80, anchor='nw')
        if "文字作为解析" == ana_type_string:
            self.ana_canvas.place_forget()
            self.ana_editor.place(x=5, y=80, anchor='nw')

    def change_model(self, event):
        model_string = self.model_combobox.get()
        # print(model_string)

        if "单项选择题" == model_string:
            self.answer_editor.place_forget()
            self.answer_combobox.place(x=495, y=5, anchor='nw')
        if "单项填空题" == model_string:
            self.answer_combobox.place_forget()
            self.answer_editor.place(x=495, y=5, anchor='nw')

    def _change_status(self, new_status):
        if new_status == self.status:
            return
        self.status = new_status
        if 'browse' == self.status:
            self._set_edit(DISABLED)
        if 'new' == self.status:
            self._set_edit(NORMAL)
        if 'edit' == self.status:
            self._set_edit(NORMAL)

    def _set_edit(self, status):
        self.model_combobox.configure(state=status)
        self.stem_combobox.configure(state=status)
        self.stem_pic_button.configure(state=status)
        self.ana_pic_button.configure(state=status)
        self.stem_editor.configure(state=status)
        self.ana_editor.configure(state=status)
        self.answer_editor.configure(state=status)
        self.answer_combobox.configure(state=status)
        self.ana_combobox.configure(state=status)
        self.ana_editor.configure(state=status)
示例#16
0
stdListBox.configure(yscrollcommand=stdScrollbar.set)
stdScrollbar.config(command=stdListBox.yview)

#bind event to std listbox so words show in frame 5
stdListBox.bind('<<ListboxSelect>>', onselect)



#FRAME 5
backSearchBtn = HoverButton(frame5, text="Search", command=back_search, padx=2, pady=2)
backSearchInput = Entry(frame5, width=36, justify = "left", font=('Consolas', 10, 'bold'))
backSearchBtn.place(x=10, y=25)
backSearchInput.place(x=80, y=25)

backMatchCanvas = LabelFrame(frame5, text='Words already standardized w/ selected', bg='grey88', width=350, height=800)
backMatchCanvas.place(x=5,y=95)
backMatchBox = st.ScrolledText(backMatchCanvas, width=44, height=50, wrap="none")
backMatchBox.configure(background = "black", foreground="white", font=('Consolas', 10, 'bold'))
backMatchBox.place(x=5,y=5)

loadFileBtn = HoverButton(frame5, text="Load", command=load_file, padx=2, pady=2)
loadFileBtn.place(x=10,y=910)
loadFileInput = Entry(frame5, width=32, justify = "left", font=('Consolas', 10, 'bold'))
loadFileInput.place(x=75,y=910)

saveFileBtn = HoverButton(frame5, text="Save", command=save_file, padx=2, pady=2)
saveFileBtn.place(x=10,y=950)
saveFileInput = Entry(frame5, width=32, justify = "left", font=('Consolas', 10, 'bold'))
saveFileInput.place(x=75,y=950)

# MAIN LOOP
menubar.add_cascade(label='Beta', menu=betaMenu)
menubar.add_cascade(label='关于', menu=aboutMenu)

aboutMenu.add_command(label='小组', command=lambda: tkinter.messagebox.showinfo("测试中", "测试中"))
crawlerMenu.add_command(label='修改uidlist', command = lambda: os.startfile('source'+os.sep+'uidlist.txt'))
crawlerMenu.add_separator()
crawlerMenu.add_command(label='运行', command=lambda: tkinter.messagebox.showinfo("测试中", "测试中"))
betaMenu.add_command(label='导入语料库', command=lambda: tkinter.messagebox.showinfo("测试中", "测试中"))
betaMenu.add_command(label='训练模型', command=lambda: tkinter.messagebox.showinfo("测试中", "测试中"))
betaMenu.add_separator()
betaMenu.add_command(label='分析', command=lambda: tkinter.messagebox.showinfo("测试中", "测试中"))
'''

# left label frame
leftLabelFrame = LabelFrame(mainWindow, text = "选择要查看的类别", labelanchor="nw")
leftLabelFrame.place(relx=0.05, rely=0.05, relwidth=0.9, relheight=0.9)
leftBg = Frame(leftLabelFrame)
mapBotton1 = Button(leftBg, text = "地图", command = lambda: showWindow('map')).grid(row=1)
wordBotton1 = Button(leftBg, text = "词云", command = lambda: showWindow('wordcloud')).grid(row=3)
chartBotton1 = Button(leftBg, text = "图表", command = lambda: showWindow('chart')).grid(row=5)
betaBotton1 = Button(leftBg, text = "NLP情绪分析(Beta)", command = lambda: showWindow('sentiment')).grid(row=7)

emptyBottom1 = Frame(leftBg).grid(row=8)

setGrid(leftBg, 20)
leftBg.pack()

# Right label frame
'''
rightLabelFrame = LabelFrame(mainWindow, text = "查看现有示例", labelanchor="nw")
rightLabelFrame.place(relx=0.51, rely=0.02, relwidth=0.47, relheight=0.96)
示例#18
0
class GeoDemonstrator(Tk, GeoMixinTrans, GeoMixinHelp):
    # Konstruktor aplikacije
    def __init__(self):
        # Log poruka o pokretanju aplikacije
        print('Dobro došli u aplikaciju GeoDemonstrator!')

        # Pozivanje konstruktora roditeljske klase
        super().__init__()

        # Postavljanje naziva aplikacije
        self.title('GeoDemonstrator')

        # Inicijalizacija liste tačaka
        self.tačke = []
        self.ttačke = []

        # Inicijalizacija liste identifikatora
        # na platnu trenutno iscrtanih tačaka
        self.id_tač = []

        # Inicijalizacija figure
        self.figura = None

        # Inicijalizacija transformacija iz platna
        # u iscrtani koordinatni sistem i obrnuto
        self.puk = Skal(1 / 7, -1 / 7) * Trans(-204, -132)
        self.kup = Trans(204, 132) * Skal(7, -7)

        # Inicijalizacija elemenata GKI
        self.init_gki()

    # Inicijalizacija elemenata GKI
    def init_gki(self):
        # Postavljanje veličine i pozicije prozora
        self.geometry('450x450+75+75')

        # Onemogućavanje promene veličine prozora,
        # pošto je Tk prilično plastičan, pa promene
        # ugrožavaju zamišljeni izgled aplikacije
        self.resizable(False, False)

        # Inicijalizacija glavnog menija
        self.init_meni()

        # Inicijalizacija platna
        self.init_platno()

        # Kontrola unosa tačaka
        self.init_unos()

    # Inicijalizacija glavnog menija
    def init_meni(self):
        # Pravljenje glavnog menija
        meni = Menu(self)

        # Postavljanje sporednog padajućeg menija
        self.umeni = Menu(meni)
        self.umeni.add_command(label='Zaključi unos',
                               command=self.promena_unosa)
        self.umeni.add_command(label='Ispravi figuru', command=self.ispravi)
        self.umeni.add_command(label='Očisti platno',
                               command=partial(self.novo_platno, True))

        # Postavljanje glavnog menija i vezivanje
        # komandi za odgovarajuće funkcionalnosti
        meni.add_cascade(label='Opcije', menu=self.umeni)
        meni.add_command(label='Pomoć (H)', command=self.pomoć)
        meni.add_command(label='Info (G)', command=self.info)
        self.config(menu=meni)

        # Vezivanje tipki za akcije analogne
        # onima iz prethodno postavljenog menija;
        # od F1 se odustalo jer se ne ponaša kako
        # treba na operativnom sistemu Windows
        self.bind('<H>', self.pomoć)
        self.bind('<h>', self.pomoć)
        self.bind('<G>', self.info)
        self.bind('<g>', self.info)
        self.bind('<Escape>', self.kraj)

        # Vezivanje protokola zatvaranja prozora
        # za istu akciju kao za Kraj i Escape
        self.protocol('WM_DELETE_WINDOW', self.kraj)

    # Inicijalizacija platna
    def init_platno(self):
        # Pravljenje okvira za platno
        okvir_p = LabelFrame(self,
                             text='Zakoračite u svet geometrijskih'
                             ' transformacija',
                             padx=10,
                             pady=10)
        okvir_p.place(x=10, y=10, height=300, width=430)

        # Postavljanje platna unutar okvira
        self.platno = Canvas(okvir_p, height=261, width=405)
        self.platno.place(x=0, y=0)

        # Postavljanje koordinatnog sistema na platno;
        # slika nije lokalna promenljiva, pošto bi je u
        # tom slučaju 'pojeo' sakupljač otpadaka
        self.slika = self.učitaj_sliku('koord.gif')
        self.platno.create_image(203, 131, image=self.slika)

        # Vezivanje čuvanja tačke za klik na platno
        self.unos = True
        self.platno.bind('<Button-1>', self.dodaj_tačku)

        # Vezivanje promene unosa za desni klik,
        # a ispravljanja figure za srednji, prema
        # sugestiji asistenta, čime se dobija na
        # lakoći korišćenja, bez potrebe za menijem
        self.platno.bind('<Button-2>', self.ispravi)
        self.platno.bind('<Button-3>', self.promena_unosa)

    # Okvir za magični svet transformacija
    def init_unos(self):
        # Pravljenje okvira za elemente
        self.okvir_d = LabelFrame(self,
                                  text='Unosite tačke klikovima'
                                  ' po platnu',
                                  padx=10,
                                  pady=10)
        self.okvir_d.place(x=10, y=315, height=128, width=430)

        # Inicijalizacija polja sa transformacijama
        self.init_trans()

        # Oznake parametara koje korisnik unosi
        x_koord_labela = Label(self, text='x:')
        y_koord_labela = Label(self, text='y:')
        ugao_labela = Label(self, text='\u03b8:')

        # Postavljanje oznaka na prozor
        x_koord_labela.place(x=185, y=348)
        y_koord_labela.place(x=185, y=375)
        ugao_labela.place(x=185, y=403)

        # Polja za unos vrednosti transformacija
        self.x_koord = Entry(self, width=4, state='disabled')
        self.y_koord = Entry(self, width=4, state='disabled')
        self.ugao = Entry(self, width=4, state='disabled')

        # Postavljanje polja na prozor
        self.x_koord.place(x=200, y=348)
        self.y_koord.place(x=200, y=375)
        self.ugao.place(x=200, y=403)

        # Postavljanje ostalih elemenata
        self.init_centar()
        self.init_inverz()

    # Transformacijski okvir
    def init_trans(self):
        # Mapa za preslikavanje niske u
        # odgavarajuću klasu transformacije
        self.funkcije = {
            'translacija': Trans,
            'skaliranje': Skal,
            'smicanje': Smic,
            'rotacija': Rot,
            'refleksija': Refl
        }

        # Pravljenje okvira za odabir transformacije
        okvir_t = LabelFrame(self,
                             text='Izaberite transformaciju',
                             padx=23,
                             pady=7)
        okvir_t.place(x=18, y=337, height=95, width=158)

        # U zavisnosti od vrednosti var koju pročitamo iz
        # padajućeg menija, poziva se prava transformacija
        self.tr = StringVar(self)
        self.tr.set('')

        # Funkcija za praćenje promenljive; izveštava o odabiru
        # transformacije i kontroliše pristup poljima za unos
        # parametara u zavisnosti od odabira; nepakovana lista
        # argumenata *args je neophodna kako bi se prosledili
        # (i zanemarili) dodatni podaci o promeni odabira, slično
        # kao što npr. kolbek funkcije u GLUT-u obavezno primaju
        # koordinate događaja, iako one često nisu nužan podatak
        self.tr.trace(
            'w',
            lambda *args: print('Odabrana transformacija:'
                                ' {}.'.format(self.tr.get())) or self.kontrola(
                                ))

        # Padajuća lista geometrijskih transformacija;
        # umesto dosad korišćene fje place za postavljanje
        # objekta na tačno određeno mesto na prozoru, ovde
        # se koristi pack, koji objekat optimalno spakuje
        # na raspoloživom prostoru; iz tog razloga je i
        # roditeljski element upravo transformacioni okvir,
        # u koji se pakuje, a ne self, kako je dosad bilo
        OptionMenu(okvir_t, self.tr, 'translacija', 'skaliranje', 'smicanje',
                   'rotacija', 'refleksija').pack(fill='x')

        # Dugme za pokretanje transformacije
        self.dugme_t = Button(okvir_t,
                              text='Transformiši',
                              command=self.transformiši,
                              state='disabled')
        self.dugme_t.pack(fill='x')

    # Odabir centra transformacije
    def init_centar(self):
        # Promenljiva za praćenje
        self.centar = StringVar(self)
        self.centar.set(None)
        self.centar.trace(
            'w', lambda *args: print('Odabran {}'
                                     ' za centar transformacije.'.format(
                                         self.centar.get()))
            if self.centar.get() != 'None' else None)

        # Oznaka za odabir centra
        odabir_centra = Label(self, text='Centar transformacije:')
        odabir_centra.place(x=265, y=330)

        # Dugme za transformaciju sa centrom
        # u koordinatnom početku
        self.radio1 = Radiobutton(self,
                                  text='centar platna',
                                  padx=3,
                                  variable=self.centar,
                                  value='centar platna',
                                  state='disabled',
                                  command=partial(self.kontrola, True))
        self.radio1.place(x=242, y=350)

        # Dugme za transformaciju sa centrom
        # u centru mase (baricentru) figure
        self.radio2 = Radiobutton(self,
                                  text='centar mase',
                                  padx=3,
                                  variable=self.centar,
                                  value='centar mase',
                                  state='disabled',
                                  command=partial(self.kontrola, True))
        self.radio2.place(x=242, y=370)

        # Dugme za transformaciju sa centrom
        # u korisnički unetoj tački
        self.radio3 = Radiobutton(self,
                                  text='uneta tačka',
                                  padx=3,
                                  variable=self.centar,
                                  value='korisnički unos',
                                  state='disabled',
                                  command=partial(self.kontrola, True))
        self.radio3.place(x=242, y=390)

        # Oznake za unos centra transformacija
        t1_labela = Label(self, text='t1:')
        t2_labela = Label(self, text='t2:')

        # Postavljanje oznaka na prozor
        t1_labela.place(x=360, y=358)
        t2_labela.place(x=360, y=385)

        # Polja za unos centra transformacija
        self.t1_koord = Entry(self, width=4, state='disabled')
        self.t2_koord = Entry(self, width=4, state='disabled')

        # Postavljanje polja na prozor
        self.t1_koord.place(x=380, y=358)
        self.t2_koord.place(x=380, y=385)

    # Funkcija za praćenje inverza
    def init_inverz(self):
        self.inv = BooleanVar(self)
        self.inv.trace(
            'w', lambda *args: print('Odabrana inverzna'
                                     ' transformacija.')
            if self.inv.get() else print('Odabrana klasična transformacija.'))

        # Dugme za odabir inverza
        self.inverz = Checkbutton(self,
                                  text='Invertuj promenu',
                                  variable=self.inv,
                                  state='disabled')
        self.inverz.place(x=262, y=410)
示例#19
0
# made by Shreyas Pahune
import tkinter as tk
from random import randrange
import tkinter.font as font
from tkinter import messagebox
from tkinter import LabelFrame

window = tk.Tk()
window.title("Guessing Game")
window.config(bg="#41aea9")
myFont = font.Font(family='Comic Sans MS Bold')
window.iconbitmap(r"D:\software/python/endsem_1/favicon.ico")
# Constantia Bold
# Comic Sans MS Bold
lblInst_frame = LabelFrame(window, border=5, width=300, height=45, bg="teal")
lblInst_frame.place(x=268, y=26)
lblInst = tk.Label(window, text="Guess a number from 0 to 9",
                   bg="#41aea9", fg="#e8ffff", font=myFont)
lblLine0_frame = LabelFrame(window, border=5, width=240, height=45, bg="teal")
lblLine0_frame.place(x=130, y=155)
lblLine0 = tk.Label(window, text="---------------------------------------------------------------------",
                    bg="#41aea9", fg="#e8ffff", font=myFont)
lblNoGuess_frame = LabelFrame(
    window, border=5, width=152, height=45, bg="teal")
lblNoGuess_frame.place(x=591, y=155)
lblNoGuess = tk.Label(window, text="No of Guesses: 0",
                      bg="#41aea9", fg="#e8ffff", font=myFont)
lblMaxGuess = tk.Label(window, text="Max Guess: 3",
                       bg="#41aea9", fg="#e8ffff", font=myFont)
lblLine1 = tk.Label(window, text="---------------------------------------------------------------------",
                    bg="#41aea9", fg="#e8ffff", font=myFont)
示例#20
0
class GraphicalUserInterface(Frame):
    def __init__(self, parent):
        Frame.__init__(self, parent)
        self.parent = parent
        self.__initUI()

    def __initUI(self):
        self.parent.title("Fuel Manager")

        # parameters that the user can modify
        self.__exchvar = BooleanVar()
        self.__exchrate = True
        self.__datevar = BooleanVar()
        self.__datetime = True
        self.__empty_tank_var = BooleanVar()
        self.__empty_tank = False
        self.__airport_file = "input files/airport.csv"
        self.__aircraft_file = "input files/aircraft.csv"
        self.__currency_file = "input files/countrycurrency.csv"
        self.__exchange_rate_file = "input files/currencyrates.csv"
        self.__itinerary_file = "input files/testroutes.csv"
        self.__output_file = "bestroutes/bestroutes.csv"
        self.__home_airport = ["DUB"]
        self.__other_airports = ["LHR", "CDG", "JFK", "AAL", "AMS", "ORK"]
        self.__hubs = ["MHP"]
        self.__stopover_cost = 0
        self.__constraints = "JFK AAL / JFK CDG"
        self.__aircraft_code = "747"

        # main frame
        frame = Frame(self, relief=RAISED, borderwidth=1)
        frame.pack(fill=BOTH, expand=True)
        self.pack(fill=BOTH, expand=True)

        # manage single itinerary frame
        self.manual_frame = LabelFrame(self, text="Manage a single itinerary", font=("Helvetica", 14), width=300)
        self.manual_frame.place(x=50, y=50)

        # Empty row to put some space between the other rows and to control the width of this frame because
        # I don't know what I'm doing
        self.empty_label = Label(self.manual_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=0, sticky="W")

        # Text field where user can enter home airport
        self.home_airport_label = Label(self.manual_frame, width=22, text="Home airport:", anchor='w')
        self.home_airport_label.grid(row=1, sticky="W")
        self.home_airport_entry = Entry(self.manual_frame, width=50)
        self.home_airport_entry.grid(row=2, sticky="E")
        self.home_airport_entry.insert(0, self.__home_airport)

        self.empty_label = Label(self.manual_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=3, sticky="W")

        # Text field where user can enter other airports
        self.other_airports_label = Label(self.manual_frame, width=22, text="Other airports:", anchor='w')
        self.other_airports_label.grid(row=4, sticky="W")
        self.other_airports_entry = Entry(self.manual_frame, width=50)
        self.other_airports_entry.grid(row=5, sticky="E")
        self.other_airports_entry.insert(0, self.__other_airports)

        self.empty_label = Label(self.manual_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=6, sticky="W")

        # Text field where user can enter aircraft code
        self.aircraft_label = Label(self.manual_frame, width=22, text="Aircraft code:", anchor='w')
        self.aircraft_label.grid(row=7, sticky="W")
        self.aircraft_entry = Entry(self.manual_frame, width=50)
        self.aircraft_entry.grid(row=8, sticky="E")
        self.aircraft_entry.insert(0, self.__aircraft_code)

        self.empty_label = Label(self.manual_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=9, sticky="W")

        # Text field where user can enter constraints
        self.constraints_label = Label(self.manual_frame, width=22, text="Constraints:", anchor='w')
        self.constraints_label.grid(row=13, sticky="W")
        self.constraints_entry = Entry(self.manual_frame, width=50)
        self.constraints_entry.grid(row=14, sticky="E")
        self.constraints_entry.insert(0, self.__constraints)
        self.constraints_explanation_label = \
            Label(self.manual_frame, width=50,
                  text="Each constraint should consist of three-letter airport codes"
                       "\nseparated by spaces. To enter more than one constraint,"
                       "\nuse ' / ' to separate them", anchor='w', justify='left')
        self.constraints_explanation_label.grid(row=15, sticky="W")

        self.empty_label = Label(self.manual_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=16, sticky="W")

        # run button
        self.run_button = Button(self.manual_frame, text='Manage itinerary', command=self.__manage_single_itinerary,
                                 bg="#CCE1E8")
        self.run_button.grid(row=16, sticky="E")

        # manage list of itineraries frame
        self.itinerary_list_frame = LabelFrame(self, text="Manage a list of itineraries",
                                               font=("Helvetica", 14), width=300)
        self.itinerary_list_frame.place(x=50, y=375)

        # Empty row to put some space between the other rows and to control the width of this frame
        self.empty_label = Label(self.itinerary_list_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=12, sticky="W")

        # Text field where user can enter itinerary filepath
        self.itinerary_label = Label(self.itinerary_list_frame, width=22, text="Itinerary list: ", anchor='w')
        self.itinerary_label.grid(row=13, sticky="W")
        self.itinerary_entry = Entry(self.itinerary_list_frame, width=50)
        self.itinerary_entry.grid(row=13, sticky="E")
        self.itinerary_entry.insert(0, self.__itinerary_file)
        self.itinerary_button = Button(self.itinerary_list_frame, text='Browse...',
                                       command=self.__get_itinerary_filename)
        self.itinerary_button.grid(row=14, sticky="E")

        self.empty_label = Label(self.itinerary_list_frame, text=" ", width=60, height=2, font=("Helvetica", 1))
        self.empty_label.grid(row=15, sticky="W")

        # run button
        self.run_button = Button(self.itinerary_list_frame, text='Manage list of itineraries',
                                 command=self.__manage_list, bg="#CCE1E8")
        self.run_button.grid(row=16, sticky="E")

        # Fuel management settings frame
        self.general_frame = LabelFrame(self, text="Fuel management settings", font=("Helvetica", 14), width=300)
        self.general_frame.place(x=500, y=50)

        # Empty row to put some space between the other rows and to control the width of this frame
        self.empty_label = Label(self.general_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=0, sticky="W")

        # Text field where user can enter hubs
        self.hubs_label = Label(self.general_frame, width=22, text="Hubs:", anchor='w')
        self.hubs_label.grid(row=1, sticky="W")
        self.hubs_entry = Entry(self.general_frame, width=50)
        self.hubs_entry.grid(row=2, sticky="E")
        self.hubs_entry.insert(0, self.__hubs)

        self.empty_label = Label(self.general_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=3, sticky="W")

        # Text field where user can enter cost of extra stopovers
        self.stopover_cost_label = Label(self.general_frame, width=40, text="Cost of each extra stopover (euros):",
                                         anchor='w')
        self.stopover_cost_label.grid(row=4, sticky="W")
        self.stopover_cost_entry = Entry(self.general_frame, width=50)
        self.stopover_cost_entry.grid(row=5, sticky="E")
        self.stopover_cost_entry.insert(0, self.__stopover_cost)

        self.empty_label = Label(self.general_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=6, sticky="W")

        # bring home extra fuel checkbox
        self.empty_tank_cb = Checkbutton(self.general_frame,
                                         text="Always return to home airport with an empty tank",
                                         variable=self.__empty_tank_var, command=self.__empty_tank_toggle)
        self.empty_tank_cb.grid(row=7, sticky="W")

        self.empty_label = Label(self.general_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=8, sticky="W")

        # manage inputs frame
        self.input_frame = LabelFrame(self, text="Inputs", font=("Helvetica", 14), width=300)
        self.input_frame.place(x=500, y=250)

        self.empty_label = Label(self.input_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=0, sticky="W")

        # Text field where user can enter airport filepath
        self.airport_label = Label(self.input_frame, width=22, text="Airport list: ", anchor='w')
        self.airport_label.grid(row=1, sticky="W")
        self.airport_entry = Entry(self.input_frame, width=50)
        self.airport_entry.grid(row=1, sticky="E")
        self.airport_entry.insert(0, self.__airport_file)
        self.airport_button = Button(self.input_frame, text='Browse...', command=self.__get_airport_filename)
        self.airport_button.grid(row=2, sticky="E")

        self.empty_label = Label(self.input_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=3, sticky="W")

        # Text field where user can enter aircraft filepath
        self.aircraft_file_label = Label(self.input_frame, width=22, text="Aircraft list: ", anchor='w')
        self.aircraft_file_label.grid(row=4, sticky="W")
        self.aircraft_file_entry = Entry(self.input_frame, width=50)
        self.aircraft_file_entry.grid(row=4, sticky="E")
        self.aircraft_file_entry.insert(0, self.__aircraft_file)
        self.aircraft_file_button = Button(self.input_frame, text='Browse...', command=self.__get_aircraft_filename)
        self.aircraft_file_button.grid(row=5, sticky="E")

        self.empty_label = Label(self.input_frame, text=" ", width=425, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=6, sticky="W")

        # Text field where user can enter country-currency filepath
        self.currency_label = Label(self.input_frame, width=22, text="Currency list: ", anchor='w')
        self.currency_label.grid(row=7, sticky="W")
        self.currency_entry = Entry(self.input_frame, width=50)
        self.currency_entry.grid(row=7, sticky="E")
        self.currency_entry.insert(0, self.__currency_file)
        self.currency_button = Button(self.input_frame, text='Browse...', command=self.__get_currency_filename)
        self.currency_button.grid(row=8, sticky="E")

        self.empty_label = Label(self.input_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=9, sticky="W")

        # Text field where user can enter exchange rate filepath
        self.exchange_rate_label = Label(self.input_frame, width=22, text="Exchange rate list: ", anchor='w')
        self.exchange_rate_label.grid(row=10, sticky="W")
        self.exchange_rate_entry = Entry(self.input_frame, width=50)
        self.exchange_rate_entry.grid(row=10, sticky="E")
        self.exchange_rate_entry.insert(0, self.__exchange_rate_file)
        self.exchange_rate_button = Button(self.input_frame, text='Browse...', command=self.__get_exchange_rate_filename)
        self.exchange_rate_button.grid(row=11, sticky="E")

        # real-time exchange rates checkbox
        self.forex = Checkbutton(self.input_frame, text="Use real-time exchange rates", variable=self.__exchvar,
                                 command=self.__forex_toggle)
        self.forex.select()
        self.forex.grid(row=12, sticky="W")

        # manage output frame
        self.output_frame = LabelFrame(self, text="Output", font=("Helvetica", 14), width=300)
        self.output_frame.place(x=500, y=550)

        self.empty_label = Label(self.output_frame, text=" ", width=60, height=1, font=("Helvetica", 1))
        self.empty_label.grid(row=0, sticky="W")

        # Text field where user can enter output filepath
        self.output_label = Label(self.output_frame, width=22, text="Output file: ", anchor='w')
        self.output_label.grid(row=1, sticky="W")
        self.output_entry = Entry(self.output_frame, width=50)
        self.output_entry.grid(row=1, sticky="E")
        self.output_entry.insert(0, self.__output_file)
        self.output_button = Button(self.output_frame, text='Browse...', command=self.__get_output_filename)
        self.output_button.grid(row=2, sticky="E")

        # append date to output filename checkbox
        self.datetime_cb = Checkbutton(self.output_frame,
                                       text="Append date and time to filename (e.g., bestroutes 20151218 160000.csv)",
                                       variable=self.__datevar, command=self.__datetime_toggle)
        self.datetime_cb.grid(row=3, sticky="W")
        self.datetime_cb.select()

    # GUI methods

    def __forex_toggle(self):
        if self.__exchvar.get() == True:
            self.__exchrate = True
        else:
            self.__exchrate = False

    def __datetime_toggle(self):
        if self.__datevar.get() == True:
            self.__datetime = True
        else:
            self.__datetime = False

    def __empty_tank_toggle(self):
        if self.__empty_tank_var.get() == True:
            self.__empty_tank = True
        else:
            self.__empty_tank = False

    def __get_airport_filename(self):
        self.__airport_file = filedialog.askopenfilename(
            filetypes=(("Comma-separated values files", "*.csv"), ("All files", "*.*")))
        self.airport_entry.delete(0, END)
        self.airport_entry.insert(0, self.__airport_file)

    def __get_aircraft_filename(self):
        self.__aircraft_file = filedialog.askopenfilename(
            filetypes=(("Comma-separated values files", "*.csv"), ("All files", "*.*")))
        self.aircraft_file_entry.delete(0, END)
        self.aircraft_file_entry.insert(0, self.__aircraft_file)

    def __get_currency_filename(self):
        self.__currency_file = filedialog.askopenfilename(
            filetypes=(("Comma-separated values files", "*.csv"), ("All files", "*.*")))
        self.currency_entry.delete(0, END)
        self.currency_entry.insert(0, self.__currency_file)

    def __get_exchange_rate_filename(self):
        self.__exchange_rate_file = filedialog.askopenfilename(
            filetypes=(("Comma-separated values files", "*.csv"), ("All files", "*.*")))
        self.exchange_rate_entry.delete(0, END)
        self.exchange_rate_entry.insert(0, self.__exchange_rate_file)

    def __get_itinerary_filename(self):
        self.__itinerary_file = filedialog.askopenfilename(
            filetypes=(("Comma-separated values files", "*.csv"), ("All files", "*.*")))
        self.itinerary_entry.delete(0, END)
        self.itinerary_entry.insert(0, self.__itinerary_file)

    def __get_output_filename(self):
        self.__output_file = filedialog.asksaveasfilename(defaultextension=".csv", filetypes=(
            ("Comma-separated values file", "*.csv"), ("All Files", "*.*")))
        self.output_entry.delete(0, END)
        self.output_entry.insert(0, self.__output_file)

    def __manage_list(self):
        # validate user inputs
        hubs, stopover_cost = validate_inputs_for_list_of_itineraries(self.hubs_entry.get().upper().split(),
                                                                      self.stopover_cost_entry.get())
        print("Managing list of itineraries...")
        manage_list_of_routes(self.__exchrate,
                      self.__datetime,
                      self.__empty_tank,
                      hubs,
                      stopover_cost,
                      self.itinerary_entry.get(),
                      self.airport_entry.get(),
                      self.aircraft_file_entry.get(),
                      self.currency_entry.get(),
                      self.exchange_rate_entry.get(),
                      self.output_entry.get())

    def __manage_single_itinerary(self):
        # validate user inputs
        try:
            hubs, stopover_cost, constraints_list, home_airport, other_airports, aircraft_code = \
                validate_inputs_for_single_itinerary(self.hubs_entry.get().upper().split(),
                                self.stopover_cost_entry.get(),
                                self.constraints_entry.get().upper().split(),
                                self.home_airport_entry.get().upper(),
                                self.other_airports_entry.get().upper().split(),
                                self.aircraft_entry.get().upper())
        except TypeError:
            return

        print("Managing single itinerary...")
        manage_single_route(home_airport,
                            other_airports,
                            aircraft_code,
                            self.__exchrate,
                            self.__datetime,
                            self.__empty_tank,
                            hubs,
                            stopover_cost,
                            constraints_list,
                            self.airport_entry.get(),
                            self.aircraft_file_entry.get(),
                            self.currency_entry.get(),
                            self.exchange_rate_entry.get(),
                            self.output_entry.get())
示例#21
0
    def ui_process(self):
        """
        Ui主程序
        :param
        :return:
        """
        root = Tk()
        self.root = root
        # 设置窗口位置
        root.title("豆瓣电影小助手(可筛选、下载自定义电影)----吾爱破解论坛  www.52pojie.cn")
        self.center_window(root, 1000, 565)
        root.resizable(0, 0)  # 框体大小可调性,分别表示x,y方向的可变性

        # 从排行榜 电影搜索布局开始
        # 容器控件
        labelframe = LabelFrame(root, width=660, height=300, text="搜索电影")
        labelframe.place(x=5, y=5)
        self.labelframe = labelframe

        # 电影类型
        L_typeId = Label(labelframe, text='电影类型')
        L_typeId.place(x=0, y=10)
        self.L_typeId = L_typeId

        #下拉列表框
        comvalue = StringVar()
        C_type = ttk.Combobox(labelframe,
                              width=5,
                              textvariable=comvalue,
                              state='readonly')
        # 将影片类型输入到下拉列表框中
        jsonMovieData = loads(movieData)  #json数据
        movieList = []
        for subMovieData in jsonMovieData:  #对每一种类的电影题材进行操作
            movieList.append(subMovieData['title'])
        C_type["values"] = movieList  #初始化
        C_type.current(9)  # 选择第一个
        C_type.place(x=65, y=8)
        self.C_type = C_type

        # 欲获取的电影数量
        L_count = Label(labelframe, text='获取数量=')
        L_count.place(x=150, y=10)
        self.L_count = L_count

        # 文本框
        T_count = Entry(labelframe, width=5)
        T_count.delete(0, END)
        T_count.insert(0, '500')
        T_count.place(x=220, y=7)
        self.T_count = T_count

        # 评分
        L_rating = Label(labelframe, text='影片评分>')
        L_rating.place(x=280, y=10)
        self.L_rating = L_rating

        # 文本框
        T_rating = Entry(labelframe, width=5)
        T_rating.delete(0, END)
        T_rating.insert(0, '8.0')
        T_rating.place(x=350, y=7)
        self.T_rating = T_rating

        # 评价人数
        L_vote = Label(labelframe, text='评价人数>')
        L_vote.place(x=410, y=10)
        self.L_vote = L_vote

        # 文本框
        T_vote = Entry(labelframe, width=7)
        T_vote.delete(0, END)
        T_vote.insert(0, '100000')
        T_vote.place(x=480, y=7)
        self.T_vote = T_vote

        # 查询按钮
        #lambda表示绑定的函数需要带参数,请勿删除lambda,否则会出现异常
        #thread_it表示新开启一个线程执行这个函数,防止GUI界面假死无响应
        B_0 = Button(labelframe, text="从排行榜搜索")
        B_0.place(x=560, y=10)
        self.B_0 = B_0

        # 框架布局,承载多个控件
        frame_root = Frame(labelframe, width=400)
        frame_l = Frame(frame_root)
        frame_r = Frame(frame_root)
        self.frame_root = frame_root
        self.frame_l = frame_l
        self.frame_r = frame_r

        # 表格
        columns = ("影片名字", "影片评分", "同类排名", "评价人数")
        treeview = ttk.Treeview(frame_l,
                                height=10,
                                show="headings",
                                columns=columns)

        treeview.column("影片名字", width=210, anchor='center')  # 表示列,不显示
        treeview.column("影片评分", width=210, anchor='center')
        treeview.column("同类排名", width=100, anchor='center')
        treeview.column("评价人数", width=100, anchor='center')

        treeview.heading("影片名字", text="影片名字")  # 显示表头
        treeview.heading("影片评分", text="影片评分")
        treeview.heading("同类排名", text="同类排名")
        treeview.heading("评价人数", text="评价人数")

        #垂直滚动条
        vbar = ttk.Scrollbar(frame_r, command=treeview.yview)
        treeview.configure(yscrollcommand=vbar.set)

        treeview.pack()
        self.treeview = treeview
        vbar.pack(side=RIGHT, fill=Y)
        self.vbar = vbar

        # 框架的位置布局
        frame_l.grid(row=0, column=0, sticky=NSEW)
        frame_r.grid(row=0, column=1, sticky=NS)
        frame_root.place(x=5, y=70)

        # 从排行榜 电影搜索布局结束

        # 输入关键字 电影搜索布局开始

        # 影片名称
        L_vote_keyword = Label(labelframe, text='影片名称')
        L_vote_keyword.place(x=0, y=40)
        #L_vote_keyword.grid(row=0,column=0)
        self.L_vote_keyword = L_vote_keyword

        # 文本框
        T_vote_keyword = Entry(labelframe, width=53)
        T_vote_keyword.delete(0, END)
        T_vote_keyword.insert(0, '我不是药神')
        T_vote_keyword.place(x=66, y=37)
        self.T_vote_keyword = T_vote_keyword

        # 查询按钮
        #lambda表示绑定的函数需要带参数,请勿删除lambda,否则会出现异常
        #thread_it表示新开启一个线程执行这个函数,防止GUI界面假死无响应
        B_0_keyword = Button(labelframe, text="从关键字搜索")
        B_0_keyword.place(x=560, y=40)
        self.B_0_keyword = B_0_keyword

        # 输入关键字 电影搜索布局结束

        # 电影详情布局开始
        # 容器控件
        labelframe_movie_detail = LabelFrame(root, text="影片详情")
        labelframe_movie_detail.place(x=670, y=5)
        self.labelframe_movie_detail = labelframe_movie_detail

        # 框架布局,承载多个控件
        frame_left_movie_detail = Frame(labelframe_movie_detail,
                                        width=160,
                                        height=280)
        frame_left_movie_detail.grid(row=0, column=0)
        self.frame_left_movie_detail = frame_left_movie_detail

        frame_right_movie_detail = Frame(labelframe_movie_detail,
                                         width=160,
                                         height=280)
        frame_right_movie_detail.grid(row=0, column=1)
        self.frame_right_movie_detail = frame_right_movie_detail

        #影片图片
        label_img = Label(frame_left_movie_detail, text="", anchor=N)
        label_img.place(x=0, y=0)  #布局
        self.label_img = label_img

        # IMDB评分
        ft_rating_imdb = font.Font(weight=font.BOLD)
        label_movie_rating_imdb = Label(frame_left_movie_detail,
                                        text="IMDB评分",
                                        fg='#7F00FF',
                                        font=ft_rating_imdb,
                                        anchor=NW)
        label_movie_rating_imdb.place(x=0, y=250)
        self.label_movie_rating_imdb = label_movie_rating_imdb

        # 查询按钮
        B_0_imdb = Button(frame_left_movie_detail, text="初始化")
        B_0_imdb.place(x=115, y=250)
        self.B_0_imdb = B_0_imdb

        #影片名字
        ft = font.Font(size=15, weight=font.BOLD)
        label_movie_name = Label(frame_right_movie_detail,
                                 text="影片名字",
                                 fg='#FF0000',
                                 font=ft,
                                 anchor=NW)
        label_movie_name.place(x=0, y=0)
        self.label_movie_name = label_movie_name

        #影片评分
        ft_rating = font.Font(weight=font.BOLD)
        label_movie_rating = Label(frame_right_movie_detail,
                                   text="影片评价",
                                   fg='#7F00FF',
                                   font=ft_rating,
                                   anchor=NW)
        label_movie_rating.place(x=0, y=30)
        self.label_movie_rating = label_movie_rating

        #影片年代
        ft_time = font.Font(weight=font.BOLD)
        label_movie_time = Label(frame_right_movie_detail,
                                 text="影片日期",
                                 fg='#666600',
                                 font=ft_time,
                                 anchor=NW)
        label_movie_time.place(x=0, y=60)
        self.label_movie_time = label_movie_time

        #影片类型
        ft_type = font.Font(weight=font.BOLD)
        label_movie_type = Label(frame_right_movie_detail,
                                 text="影片类型",
                                 fg='#330033',
                                 font=ft_type,
                                 anchor=NW)
        label_movie_type.place(x=0, y=90)
        self.label_movie_type = label_movie_type

        #影片演员
        label_movie_actor = Label(frame_right_movie_detail,
                                  text="影片演员",
                                  wraplength=135,
                                  justify='left',
                                  anchor=NW)
        label_movie_actor.place(x=0, y=120)
        self.label_movie_actor = label_movie_actor

        # 电影详情布局结束

        # 在线播放布局开始

        labelframe_movie_play_online = LabelFrame(root,
                                                  width=324,
                                                  height=230,
                                                  text="在线观看")
        labelframe_movie_play_online.place(x=5, y=305)
        self.labelframe_movie_play_online = labelframe_movie_play_online

        # 框架布局,承载多个控件
        frame_root_play_online = Frame(labelframe_movie_play_online, width=324)
        frame_l_play_online = Frame(frame_root_play_online)
        frame_r_play_online = Frame(frame_root_play_online)
        self.frame_root_play_online = frame_root_play_online
        self.frame_l_play_online = frame_l_play_online
        self.frame_r_play_online = frame_r_play_online

        # 表格
        columns_play_online = ("来源名称", "是否免费", "播放地址")
        treeview_play_online = ttk.Treeview(frame_l_play_online,
                                            height=10,
                                            show="headings",
                                            columns=columns_play_online)
        treeview_play_online.column("来源名称", width=90, anchor='center')
        treeview_play_online.column("是否免费", width=80, anchor='center')
        treeview_play_online.column("播放地址", width=120, anchor='center')
        treeview_play_online.heading("来源名称", text="来源名称")
        treeview_play_online.heading("是否免费", text="是否免费")
        treeview_play_online.heading("播放地址", text="播放地址")

        #垂直滚动条
        vbar_play_online = ttk.Scrollbar(frame_r_play_online,
                                         command=treeview_play_online.yview)
        treeview_play_online.configure(yscrollcommand=vbar_play_online.set)

        treeview_play_online.pack()
        self.treeview_play_online = treeview_play_online
        vbar_play_online.pack(side=RIGHT, fill=Y)
        self.vbar_play_online = vbar_play_online

        # 框架的位置布局
        frame_l_play_online.grid(row=0, column=0, sticky=NSEW)
        frame_r_play_online.grid(row=0, column=1, sticky=NS)
        frame_root_play_online.place(x=5, y=0)

        # 在线播放布局结束

        # 保存到云盘布局开始

        labelframe_movie_save_cloud_disk = LabelFrame(root,
                                                      width=324,
                                                      height=230,
                                                      text="云盘搜索")
        labelframe_movie_save_cloud_disk.place(x=340, y=305)
        self.labelframe_movie_save_cloud_disk = labelframe_movie_save_cloud_disk

        # 框架布局,承载多个控件
        frame_root_save_cloud_disk = Frame(labelframe_movie_save_cloud_disk,
                                           width=324)
        frame_l_save_cloud_disk = Frame(frame_root_save_cloud_disk)
        frame_r_save_cloud_disk = Frame(frame_root_save_cloud_disk)
        self.frame_root_save_cloud_disk = frame_root_save_cloud_disk
        self.frame_l_save_cloud_disk = frame_l_save_cloud_disk
        self.frame_r_save_cloud_disk = frame_r_save_cloud_disk

        # 表格
        columns_save_cloud_disk = ("来源名称", "是否有效", "播放地址")
        treeview_save_cloud_disk = ttk.Treeview(
            frame_l_save_cloud_disk,
            height=10,
            show="headings",
            columns=columns_save_cloud_disk)
        treeview_save_cloud_disk.column("来源名称", width=90, anchor='center')
        treeview_save_cloud_disk.column("是否有效", width=80, anchor='center')
        treeview_save_cloud_disk.column("播放地址", width=120, anchor='center')
        treeview_save_cloud_disk.heading("来源名称", text="来源名称")
        treeview_save_cloud_disk.heading("是否有效", text="是否有效")
        treeview_save_cloud_disk.heading("播放地址", text="播放地址")

        #垂直滚动条
        vbar_save_cloud_disk = ttk.Scrollbar(
            frame_r_save_cloud_disk, command=treeview_save_cloud_disk.yview)
        treeview_save_cloud_disk.configure(
            yscrollcommand=vbar_save_cloud_disk.set)

        treeview_save_cloud_disk.pack()
        self.treeview_save_cloud_disk = treeview_save_cloud_disk
        vbar_save_cloud_disk.pack(side=RIGHT, fill=Y)
        self.vbar_save_cloud_disk = vbar_save_cloud_disk

        # 框架的位置布局
        frame_l_save_cloud_disk.grid(row=0, column=0, sticky=NSEW)
        frame_r_save_cloud_disk.grid(row=0, column=1, sticky=NS)
        frame_root_save_cloud_disk.place(x=5, y=0)

        # 保存到云盘布局结束

        # BT下载布局开始

        labelframe_movie_bt_download = LabelFrame(root,
                                                  width=324,
                                                  height=230,
                                                  text="影视下载")
        labelframe_movie_bt_download.place(x=670, y=305)
        self.labelframe_movie_bt_download = labelframe_movie_bt_download

        # 框架布局,承载多个控件
        frame_root_bt_download = Frame(labelframe_movie_bt_download, width=324)
        frame_l_bt_download = Frame(frame_root_bt_download)
        frame_r_bt_download = Frame(frame_root_bt_download)
        self.frame_root_bt_download = frame_root_bt_download
        self.frame_l_bt_download = frame_l_bt_download
        self.frame_r_bt_download = frame_r_bt_download

        # 表格
        columns_bt_download = ("来源名称", "是否有效", "播放地址")
        treeview_bt_download = ttk.Treeview(frame_l_bt_download,
                                            height=10,
                                            show="headings",
                                            columns=columns_bt_download)
        treeview_bt_download.column("来源名称", width=90, anchor='center')
        treeview_bt_download.column("是否有效", width=80, anchor='center')
        treeview_bt_download.column("播放地址", width=120, anchor='center')
        treeview_bt_download.heading("来源名称", text="来源名称")
        treeview_bt_download.heading("是否有效", text="是否有效")
        treeview_bt_download.heading("播放地址", text="播放地址")

        #垂直滚动条
        vbar_bt_download = ttk.Scrollbar(frame_r_bt_download,
                                         command=treeview_bt_download.yview)
        treeview_bt_download.configure(yscrollcommand=vbar_bt_download.set)

        treeview_bt_download.pack()
        self.treeview_bt_download = treeview_bt_download
        vbar_bt_download.pack(side=RIGHT, fill=Y)
        self.vbar_bt_download = vbar_bt_download

        # 框架的位置布局
        frame_l_bt_download.grid(row=0, column=0, sticky=NSEW)
        frame_r_bt_download.grid(row=0, column=1, sticky=NS)
        frame_root_bt_download.place(x=5, y=0)

        # BT下载布局结束

        #项目的一些信息
        ft = font.Font(size=14, weight=font.BOLD)
        project_statement = Label(
            root,
            text="豆瓣电影小助手(可筛选、下载自定义电影)----吾爱破解论坛  www.52pojie.cn",
            fg='#FF0000',
            font=ft,
            anchor=NW)
        project_statement.place(x=5, y=540)
        self.project_statement = project_statement

        #绑定事件
        treeview.bind('<<TreeviewSelect>>', self.show_movie_data)  # 表格绑定选择事件
        treeview.bind('<Double-1>',
                      self.open_in_browser_douban_url)  # 表格绑定鼠标左键事件
        treeview_play_online.bind('<Double-1>',
                                  self.open_in_browser)  # 表格绑定左键双击事件
        treeview_save_cloud_disk.bind(
            '<Double-1>', self.open_in_browser_cloud_disk)  # 表格绑定左键双击事件
        treeview_bt_download.bind(
            '<Double-1>', self.open_in_browser_bt_download)  # 表格绑定左键双击事件
        B_0.configure(
            command=lambda: thread_it(self.searh_movie_in_rating))  #按钮绑定单击事件
        B_0_keyword.configure(
            command=lambda: thread_it(self.searh_movie_in_keyword))  #按钮绑定单击事件
        B_0_imdb.configure(
            command=lambda: thread_it(self.show_IDMB_rating))  # 按钮绑定单击事件
        T_vote_keyword.bind('<Return>',
                            handlerAdaptor(
                                self.keyboard_T_vote_keyword))  # 文本框绑定选择事件
        project_statement.bind('<ButtonPress-1>',
                               self.project_statement_show)  # 标签绑定鼠标单击事件
        project_statement.bind('<Enter>',
                               self.project_statement_get_focus)  # 标签绑定获得焦点事件
        project_statement.bind('<Leave>',
                               self.project_statement_lose_focus)  # 标签绑定失去焦点事件

        root.mainloop()
示例#22
0
    def ui_process(self):
        root = Tk()
        root.iconbitmap('logo.ico')

        self.root = root
        # 设置窗口位置
        root.title("影视助手")
        self.center_window(root, 1200, 565)
        root.resizable(0, 0)  # 框体大小可调性,分别表示x,y方向的可变性Ranking
        #################################################################################################排行榜
        ranking_frame = LabelFrame(root, width=200, height=300, text="排行榜")
        ranking_frame.place(x=5, y=5)
        label_select = Label(ranking_frame, text='请选择')
        label_select.place(x=5, y=5)

        comvalue = StringVar()
        ranking_type = ttk.Combobox(ranking_frame,
                                    width=5,
                                    textvariable=comvalue,
                                    state='readonly')
        movieList = ['电视剧', '电影']
        ranking_type["values"] = movieList  # 初始化
        ranking_type.current(0)  # 选择第一个
        ranking_type.place(x=45, y=5)
        self.ranking_type = ranking_type

        # label_bar = Label(ranking_frame, text='条形图')
        # label_bar.place(x=110, y=5)

        self.label_bar = Label(ranking_frame,
                               text="条形图",
                               fg="blue",
                               cursor="hand2")
        self.label_bar.place(x=110, y=10)
        # self.label_bar.bind("<Button-1>", lambda event: open(r'E:/python projects/project_an/htmls/'+self.ranking_type.get()+r'Bar图.html'))
        self.label_bar.bind(
            "<Button-1>",
            handlerAdaptor(fun=self.openLocalHtml, url='Bar图.html'))
        self.label_reli = Label(ranking_frame,
                                text="热力图",
                                fg="blue",
                                cursor="hand2")
        self.label_reli.place(x=150, y=10)
        # self.label_reli.bind("<Button-1>", lambda event: open(HTLMSPATH+self.ranking_type.get()+r'热力图.html'))
        self.label_reli.bind(
            "<Button-1>", handlerAdaptor(fun=self.openLocalHtml,
                                         url='热力图.html'))

        frame_root_ranking = Frame(ranking_frame)

        frame_l_ranking = Frame(frame_root_ranking)
        frame_r_ranking = Frame(frame_root_ranking)
        self.ranking_frame = ranking_frame
        self.frame_l_ranking = frame_l_ranking
        self.frame_r_ranking = frame_r_ranking

        columns = ("名字", "热度")
        treeview_ranking = ttk.Treeview(frame_l_ranking,
                                        height=10,
                                        show="headings",
                                        columns=columns)

        treeview_ranking.column("名字", width=100, anchor='center')  # 表示列,不显示
        treeview_ranking.column("热度", width=60, anchor='center')

        treeview_ranking.heading("名字", text="名字")  # 显示表头
        treeview_ranking.heading("热度", text="热度")

        # 垂直滚动条
        vbar_ranking = ttk.Scrollbar(frame_r_ranking,
                                     command=treeview_ranking.yview)
        treeview_ranking.configure(yscrollcommand=vbar_ranking.set)
        treeview_ranking.pack()
        self.treeview_ranking = treeview_ranking
        vbar_ranking.pack(side=RIGHT, fill=Y)
        self.vbar_ranking = vbar_ranking
        # 框架的位置布局
        frame_l_ranking.grid(row=0, column=0, sticky=NSEW)
        frame_r_ranking.grid(row=0, column=1, sticky=NS)
        frame_root_ranking.place(x=5, y=45)

        #################################################################################################搜索电影
        # 容器控件
        labelframe = LabelFrame(root,
                                width=650,
                                height=300,
                                text="搜索电影(点击搜索结果查看详情)")
        labelframe.place(x=215, y=5)
        self.labelframe = labelframe
        # 电影搜索
        # 影片名称
        L_vote_keyword = Label(labelframe, text='影片名称')
        L_vote_keyword.place(x=0, y=10)
        #L_vote_keyword.grid(row=0,column=0)
        self.L_vote_keyword = L_vote_keyword
        # 文本框
        T_vote_keyword = Entry(labelframe, width=53)
        T_vote_keyword.delete(0, END)
        T_vote_keyword.insert(0, '')
        T_vote_keyword.place(x=66, y=7)
        self.T_vote_keyword = T_vote_keyword
        # 查询按钮
        #lambda表示绑定的函数需要带参数,请勿删除lambda,否则会出现异常
        #thread_it表示新开启一个线程执行这个函数,防止GUI界面假死无响应
        B_0_keyword = Button(labelframe, text="搜索")
        B_0_keyword.place(x=460, y=7)

        frame_root = Frame(labelframe, width=400)
        frame_l = Frame(frame_root)
        frame_r = Frame(frame_root)
        self.frame_root = frame_root
        self.frame_l = frame_l
        self.frame_r = frame_r

        self.B_0_keyword = B_0_keyword
        columns = ("名字", "评分", "相关")
        treeview = ttk.Treeview(frame_l,
                                height=10,
                                show="headings",
                                columns=columns)

        treeview.column("名字", width=120, anchor='center')  # 表示列,不显示
        treeview.column("评分", width=120, anchor='center')
        treeview.column("相关", width=280, anchor='center')

        treeview.heading("名字", text="名字")  # 显示表头
        treeview.heading("评分", text="评分")
        treeview.heading("相关", text="相关")

        # 垂直滚动条
        vbar = ttk.Scrollbar(frame_r, command=treeview.yview)
        treeview.configure(yscrollcommand=vbar.set)
        # rbar = ttk.Scrollbar(frame_r, command=treeview.xview)
        # treeview.configure(xscrollcommand=rbar.set)

        treeview.pack()
        self.treeview = treeview
        vbar.pack(side=RIGHT, fill=Y)
        self.vbar = vbar
        # rbar.pack(side= BOTTOM, fill=X)
        # self.rbar = rbar

        # 框架的位置布局
        frame_l.grid(row=0, column=0, sticky=NSEW)
        frame_r.grid(row=0, column=1, sticky=NS)
        frame_root.place(x=5, y=45)

        #################################################################################################详情
        labelframe_movie_detail = LabelFrame(root, text="影片详情")
        labelframe_movie_detail.place(x=770, y=5)
        self.labelframe_movie_detail = labelframe_movie_detail
        # 框架布局,承载多个控件
        frame_left_movie_detail = Frame(labelframe_movie_detail,
                                        width=160,
                                        height=380)
        frame_left_movie_detail.grid(row=0, column=0)
        self.frame_left_movie_detail = frame_left_movie_detail
        frame_right_movie_detail = Frame(labelframe_movie_detail,
                                         width=260,
                                         height=380)
        frame_right_movie_detail.grid(row=0, column=1)
        self.frame_right_movie_detail = frame_right_movie_detail
        #影片图片
        self.label_img = Label(frame_left_movie_detail, text="", anchor=N)
        self.label_img.place(x=0, y=0)  #布局
        self.label_img = self.label_img

        self.douban = Label(frame_left_movie_detail,
                            text="",
                            fg="blue",
                            cursor="hand2")
        self.douban.place(x=0, y=210)
        self.douban.bind("<Button-1>", lambda event: open(self.doubanUrl))

        ft = font.Font(size=8, weight=font.BOLD)
        label_details = Label(frame_right_movie_detail,
                              text='',
                              justify='left',
                              anchor=NW,
                              wraplength=250)
        label_details.place(x=10, y=10)
        # label_details.pack()
        self.label_details = label_details

        #################################################################################################在线播放
        labelframe_movie_play_online = LabelFrame(root,
                                                  width=310,
                                                  height=235,
                                                  text="在线观看(双击播放)")
        labelframe_movie_play_online.place(x=5, y=305)
        self.labelframe_movie_play_online = labelframe_movie_play_online

        # 框架布局,承载多个控件
        frame_root_play_online = Frame(labelframe_movie_play_online, width=324)
        frame_l_play_online = Frame(frame_root_play_online)
        frame_r_play_online = Frame(frame_root_play_online)
        self.frame_root_play_online = frame_root_play_online
        self.frame_l_play_online = frame_l_play_online
        self.frame_r_play_online = frame_r_play_online
        # 表格
        columns_play_online = ("名称", "来源", "播放地址")
        treeview_play_online = ttk.Treeview(frame_l_play_online,
                                            height=9,
                                            show="headings",
                                            columns=columns_play_online)
        treeview_play_online.column("名称", width=110, anchor='center')
        treeview_play_online.column("来源", width=50, anchor='center')
        treeview_play_online.column("播放地址", width=120, anchor='center')
        treeview_play_online.heading("名称", text="名称")
        treeview_play_online.heading("来源", text="来源")
        treeview_play_online.heading("播放地址", text="播放地址")

        #垂直滚动条
        vbar_play_online = ttk.Scrollbar(frame_r_play_online,
                                         command=treeview_play_online.yview)
        treeview_play_online.configure(yscrollcommand=vbar_play_online.set)

        treeview_play_online.pack()
        self.treeview_play_online = treeview_play_online
        vbar_play_online.pack(side=RIGHT, fill=Y)
        self.vbar_play_online = vbar_play_online

        # 框架的位置布局
        frame_l_play_online.grid(row=0, column=0, sticky=NSEW)
        frame_r_play_online.grid(row=0, column=1, sticky=NS)
        frame_root_play_online.place(x=5, y=0)

        #################################################################################################下载
        labelframe_movie_bt_download = LabelFrame(
            root, width=440, height=235, text="影视下载(选中条目右击复制下载地址,双击进入网页介绍)")
        labelframe_movie_bt_download.place(x=320, y=305)
        self.labelframe_movie_bt_download = labelframe_movie_bt_download

        # 框架布局,承载多个控件
        frame_root_bt_download = Frame(labelframe_movie_bt_download, width=324)
        frame_l_bt_download = Frame(frame_root_bt_download)
        frame_r_bt_download = Frame(frame_root_bt_download)
        self.frame_root_bt_download = frame_root_bt_download
        self.frame_l_bt_download = frame_l_bt_download
        self.frame_r_bt_download = frame_r_bt_download

        # 表格
        columns_bt_download = ("标题", "来源", "地址")
        treeview_bt_download = ttk.Treeview(frame_l_bt_download,
                                            height=9,
                                            show="headings",
                                            columns=columns_bt_download)
        treeview_bt_download.column("标题", width=110, anchor='center')
        treeview_bt_download.column("来源", width=100, anchor='center')
        treeview_bt_download.column("地址", width=200, anchor='center')
        treeview_bt_download.heading("标题", text="标题")
        treeview_bt_download.heading("来源", text="来源")
        treeview_bt_download.heading("地址", text="地址")

        #垂直滚动条
        vbar_bt_download = ttk.Scrollbar(frame_r_bt_download,
                                         command=treeview_bt_download.yview)
        treeview_bt_download.configure(yscrollcommand=vbar_bt_download.set)

        treeview_bt_download.pack()
        self.treeview_bt_download = treeview_bt_download
        vbar_bt_download.pack(side=RIGHT, fill=Y)
        self.vbar_bt_download = vbar_bt_download

        # 框架的位置布局
        frame_l_bt_download.grid(row=0, column=0, sticky=NSEW)
        frame_r_bt_download.grid(row=0, column=1, sticky=NS)
        frame_root_bt_download.place(x=5, y=0)

        #################################################################################################云盘
        labelframe_movie_save_cloud_disk = LabelFrame(root,
                                                      width=420,
                                                      height=135,
                                                      text="云盘搜索")
        labelframe_movie_save_cloud_disk.place(x=770, y=405)
        self.labelframe_movie_save_cloud_disk = labelframe_movie_save_cloud_disk
        # 框架布局,承载多个控件
        frame_root_save_cloud_disk = Frame(labelframe_movie_save_cloud_disk,
                                           width=420)
        frame_l_save_cloud_disk = Frame(frame_root_save_cloud_disk)
        frame_r_save_cloud_disk = Frame(frame_root_save_cloud_disk)
        self.frame_root_save_cloud_disk = frame_root_save_cloud_disk
        self.frame_l_save_cloud_disk = frame_l_save_cloud_disk
        self.frame_r_save_cloud_disk = frame_r_save_cloud_disk
        # 表格
        columns_save_cloud_disk = ("来源名称", "是否有效", "播放地址")
        treeview_save_cloud_disk = ttk.Treeview(
            frame_l_save_cloud_disk,
            height=4,
            show="headings",
            columns=columns_save_cloud_disk)
        treeview_save_cloud_disk.column("来源名称", width=120, anchor='center')
        treeview_save_cloud_disk.column("是否有效", width=110, anchor='center')
        treeview_save_cloud_disk.column("播放地址", width=150, anchor='center')
        treeview_save_cloud_disk.heading("来源名称", text="来源名称")
        treeview_save_cloud_disk.heading("是否有效", text="是否有效")
        treeview_save_cloud_disk.heading("播放地址", text="播放地址")
        # 垂直滚动条
        vbar_save_cloud_disk = ttk.Scrollbar(
            frame_r_save_cloud_disk, command=treeview_save_cloud_disk.yview)
        treeview_save_cloud_disk.configure(
            yscrollcommand=vbar_save_cloud_disk.set)
        treeview_save_cloud_disk.pack()
        self.treeview_save_cloud_disk = treeview_save_cloud_disk
        vbar_save_cloud_disk.pack(side=RIGHT, fill=Y)
        self.vbar_save_cloud_disk = vbar_save_cloud_disk
        # 框架的位置布局
        frame_l_save_cloud_disk.grid(row=0, column=0, sticky=NSEW)
        frame_r_save_cloud_disk.grid(row=0, column=1, sticky=NS)
        frame_root_save_cloud_disk.place(x=5, y=0)
        # 保存到云盘布局结束

        #绑定事件
        treeview.bind('<ButtonRelease-1>',
                      self.open_details_event)  #搜索结果单击绑定详情

        treeview_bt_download.bind('<ButtonRelease-3>',
                                  self.copyURL)  #下载列表绑定选中右击复制和双击打开网页
        treeview_bt_download.bind('<Double-1>', self.open_in_browser)

        treeview_play_online.bind('<Double-1>',
                                  self.open_in_browser_online)  #在线播放绑定左键双击播放
        # treeview_save_cloud_disk.bind('<Double-1>', self.open_in_browser_cloud_disk)  # 表格绑定左键双击事件
        ranking_type.bind('<<ComboboxSelected>>',
                          self.open_ranking_event)  #排行榜combox绑定修改事件
        B_0_keyword.configure(
            command=lambda: thread_it(self.searh_movie_in_keyword))  #按钮绑定单击事件
        T_vote_keyword.bind('<Return>',
                            handlerAdaptor(
                                self.keyboard_T_vote_keyword))  # 文本框绑定回车
        # label_bar.bind('<Double-1>',open(r'E:\python projects\project_an\htmls\电影Bar图.html'))
        # self.open_ranking()#初始化排行榜
        thread_it(self.open_ranking)
        root.mainloop()
class MachineLearning:
    def __init__(self):
        self.data = None
        self.table = None
        self.selection_x = None
        self.selection_y = None
        self.X = None
        self.y = None
        self.X_test_l = None
        self.X_train_l = None
        self.y_test_l = None
        self.y_train_l = None
        self.X_test = None
        self.X_train = None
        self.y_test = None
        self.y_train = None
        self.le = LabelEncoder()

        self.linreg_model = None
        self.linreg_predictions = None
        self.logreg_model = None
        self.logreg_predictions = None
        self.dtree_model = None
        self.dtree_predictions = None
        self.rforest_model = None
        self.rforest_predictions = None

        self.window = Tk()
        self.color = 'grey95'
        self.window.geometry('620x700')
        self.window.resizable(False, False)
        self.window.configure(background=self.color)
        self.window.title('Machine Learning')
        self.window.iconbitmap('py.ico')

        self.heading = Label(self.window,
                             text="Machine Learning",
                             bg=self.color,
                             pady=20,
                             font=("Helvetica", 35, "bold"))
        self.heading.place(width=620, height=100, bordermode=OUTSIDE, x=0, y=0)

        # File Selection and viewing
        self.frame = LabelFrame(self.window,
                                text='File Selection',
                                bg=self.color)
        self.frame.place(width=580, height=80, bordermode=OUTSIDE, x=20, y=100)

        self.name_label = Label(self.frame,
                                text="File Name : ",
                                bg=self.color,
                                padx=10,
                                pady=10,
                                font=("Helvetica", 15))
        self.name_label.place(width=120,
                              height=30,
                              bordermode=INSIDE,
                              x=10,
                              y=13)

        self.name = StringVar()
        self.name_entry = Entry(self.frame,
                                exportselection=False,
                                textvariable=self.name,
                                font=("Helvetica", 12))
        self.name_entry.place(width=250,
                              height=30,
                              bordermode=INSIDE,
                              x=130,
                              y=13)

        self.name_select = Button(self.frame,
                                  text='Select',
                                  command=lambda: self.select())
        self.name_select.place(width=50,
                               height=30,
                               bordermode=INSIDE,
                               x=395,
                               y=13)

        self.df_show = Button(self.frame,
                              text='Show',
                              command=lambda: self.create_table(),
                              state=DISABLED)
        self.df_show.place(width=50, height=30, bordermode=INSIDE, x=455, y=13)

        self.df_hide = Button(self.frame,
                              text='Hide',
                              command=lambda: self.hide(),
                              state=DISABLED)
        self.df_hide.place(width=50, height=30, bordermode=INSIDE, x=515, y=13)

        # Train Test Split
        self.ttsplit = LabelFrame(self.window,
                                  text='Train Test Split',
                                  bg=self.color)
        self.ttsplit.place(width=580,
                           height=80,
                           bordermode=OUTSIDE,
                           x=20,
                           y=200)

        self.select_x = Button(self.ttsplit,
                               text='X',
                               command=lambda: self.get_x(),
                               state=DISABLED)
        self.select_x.place(width=80, height=30, bordermode=INSIDE, x=10, y=13)

        self.select_y = Button(self.ttsplit,
                               text='y',
                               command=lambda: self.get_y(),
                               state=DISABLED)
        self.select_y.place(width=80,
                            height=30,
                            bordermode=INSIDE,
                            x=100,
                            y=13)

        self.test_size_label = Label(self.ttsplit,
                                     text="Test Size : ",
                                     bg=self.color)
        self.test_size_label.place(width=60,
                                   height=30,
                                   bordermode=INSIDE,
                                   x=200,
                                   y=13)

        self.test_size = StringVar()
        self.test_size.set('0.25')
        self.test_size_entry = Entry(self.ttsplit,
                                     exportselection=False,
                                     textvariable=self.test_size,
                                     font=("Helvetica", 10))
        self.test_size_entry.place(width=50,
                                   height=30,
                                   bordermode=INSIDE,
                                   x=260,
                                   y=13)

        self.rstate_label = Label(self.ttsplit,
                                  text="Random State : ",
                                  bg=self.color)
        self.rstate_label.place(width=100,
                                height=30,
                                bordermode=INSIDE,
                                x=330,
                                y=13)

        self.rstate = StringVar()
        self.rstate.set('None')
        self.rstate_entry = Entry(self.ttsplit,
                                  exportselection=False,
                                  textvariable=self.rstate,
                                  font=("Helvetica", 10))
        self.rstate_entry.place(width=50,
                                height=30,
                                bordermode=INSIDE,
                                x=430,
                                y=13)

        self.split_button = Button(self.ttsplit,
                                   text='Split',
                                   command=lambda: self.split(),
                                   state=DISABLED)
        self.split_button.place(width=80,
                                height=30,
                                bordermode=INSIDE,
                                x=490,
                                y=13)

        # Linear Regression
        self.linreg = LabelFrame(self.window,
                                 text='Linear Regression',
                                 bg=self.color)
        self.linreg.place(width=580,
                          height=80,
                          bordermode=OUTSIDE,
                          x=20,
                          y=300)

        self.linreg_pred = Button(self.linreg,
                                  text='Predict',
                                  command=lambda: self.pred_linreg(),
                                  state=DISABLED)
        self.linreg_pred.place(width=125,
                               height=30,
                               bordermode=INSIDE,
                               x=8,
                               y=13)

        self.coefficients = Button(self.linreg,
                                   text='Coefficients',
                                   command=lambda: self.coeff(),
                                   state=DISABLED)
        self.coefficients.place(width=125,
                                height=30,
                                bordermode=INSIDE,
                                x=153,
                                y=13)

        self.scatter_button = Button(self.linreg,
                                     text='Scatter Plot',
                                     command=lambda: self.scatter(),
                                     state=DISABLED)
        self.scatter_button.place(width=125,
                                  height=30,
                                  bordermode=INSIDE,
                                  x=298,
                                  y=13)

        self.linreg_error = Button(self.linreg,
                                   text='Error',
                                   command=lambda: self.errors_linreg(),
                                   state=DISABLED)
        self.linreg_error.place(width=125,
                                height=30,
                                bordermode=INSIDE,
                                x=443,
                                y=13)

        # Logistic Regression
        self.logreg = LabelFrame(self.window,
                                 text='Logistic Regression',
                                 bg=self.color)
        self.logreg.place(width=580,
                          height=80,
                          bordermode=OUTSIDE,
                          x=20,
                          y=400)

        self.logreg_pred = Button(self.logreg,
                                  text='Predict',
                                  command=lambda: self.pred_logreg(),
                                  state=DISABLED)
        self.logreg_pred.place(width=125,
                               height=30,
                               bordermode=INSIDE,
                               x=8,
                               y=13)

        self.logreg_cm = Button(self.logreg,
                                text='Confusion Matrix',
                                command=lambda: self.cm_logreg(),
                                state=DISABLED)
        self.logreg_cm.place(width=125,
                             height=30,
                             bordermode=INSIDE,
                             x=153,
                             y=13)

        self.logreg_cr = Button(self.logreg,
                                text='Classification Report',
                                command=lambda: self.cr_logreg(),
                                state=DISABLED)
        self.logreg_cr.place(width=125,
                             height=30,
                             bordermode=INSIDE,
                             x=298,
                             y=13)

        self.logreg_error = Button(self.logreg,
                                   text='Error',
                                   command=lambda: self.errors_logreg(),
                                   state=DISABLED)
        self.logreg_error.place(width=125,
                                height=30,
                                bordermode=INSIDE,
                                x=443,
                                y=13)

        # Decision Tree
        self.dtree = LabelFrame(self.window,
                                text='Decision Tree',
                                bg=self.color)
        self.dtree.place(width=580, height=80, bordermode=OUTSIDE, x=20, y=500)

        self.dtree_pred = Button(self.dtree,
                                 text='Predict',
                                 command=lambda: self.pred_dtree(),
                                 state=DISABLED)
        self.dtree_pred.place(width=125,
                              height=30,
                              bordermode=INSIDE,
                              x=8,
                              y=13)

        self.dtree_cm = Button(self.dtree,
                               text='Confusion Matrix',
                               command=lambda: self.cm_dtree(),
                               state=DISABLED)
        self.dtree_cm.place(width=125,
                            height=30,
                            bordermode=INSIDE,
                            x=153,
                            y=13)

        self.dtree_cr = Button(self.dtree,
                               text='Classification Report',
                               command=lambda: self.cr_dtree(),
                               state=DISABLED)
        self.dtree_cr.place(width=125,
                            height=30,
                            bordermode=INSIDE,
                            x=298,
                            y=13)

        self.dtree_error = Button(self.dtree,
                                  text='Error',
                                  command=lambda: self.errors_dtree(),
                                  state=DISABLED)
        self.dtree_error.place(width=125,
                               height=30,
                               bordermode=INSIDE,
                               x=443,
                               y=13)

        # Random Forest
        self.rforest = LabelFrame(self.window,
                                  text='Random Forest',
                                  bg=self.color)
        self.rforest.place(width=580,
                           height=80,
                           bordermode=OUTSIDE,
                           x=20,
                           y=600)

        self.rforest_pred = Button(self.rforest,
                                   text='Predict',
                                   command=lambda: self.pred_rforest(),
                                   state=DISABLED)
        self.rforest_pred.place(width=125,
                                height=30,
                                bordermode=INSIDE,
                                x=8,
                                y=13)

        self.rforest_cm = Button(self.rforest,
                                 text='Confusion Matrix',
                                 command=lambda: self.cm_rforest(),
                                 state=DISABLED)
        self.rforest_cm.place(width=125,
                              height=30,
                              bordermode=INSIDE,
                              x=153,
                              y=13)

        self.rforest_cr = Button(self.rforest,
                                 text='Classification Report',
                                 command=lambda: self.cr_rforest(),
                                 state=DISABLED)
        self.rforest_cr.place(width=125,
                              height=30,
                              bordermode=INSIDE,
                              x=298,
                              y=13)

        self.rforest_error = Button(self.rforest,
                                    text='Error',
                                    command=lambda: self.errors_rforest(),
                                    state=DISABLED)
        self.rforest_error.place(width=125,
                                 height=30,
                                 bordermode=INSIDE,
                                 x=443,
                                 y=13)

        self.window.mainloop()

    def select(self):
        try:
            self.data = pd.read_csv(self.name.get())
            self.df_show['state'] = NORMAL
            self.df_hide['state'] = NORMAL
            self.name_entry['state'] = DISABLED
            self.name_select['state'] = DISABLED
            self.select_x['state'] = NORMAL
        except FileNotFoundError:
            self.name.set("Invalid")

    def create_table(self):
        try:
            self.table.window.deiconify()
        except AttributeError:
            if self.data.shape[0] > 50:
                self.table = Table(self.data.head(50), self.window,
                                   self.name.get())
            else:
                self.table = Table(self.data, self.window, self.name.get())
        except TclError:
            if self.data.shape[0] > 50:
                self.table = Table(self.data.head(50), self.window,
                                   self.name.get())
            else:
                self.table = Table(self.data, self.window, self.name.get())

    def hide(self):
        try:
            self.table.window.withdraw()
        except TclError:
            return
        except AttributeError:
            return

    def get_x(self):
        self.selection_x = SelectionX(self.window, self.data)
        self.X = []
        for i in range(len(self.data.columns)):
            if self.selection_x.variables[i].get() == 1:
                self.X.append(self.data.columns[i])

        self.select_x['state'] = DISABLED
        self.select_y['state'] = NORMAL

    def get_y(self):
        self.selection_y = SelectionY(self.window, self.data)
        self.y = self.data.columns[self.selection_y.variable.get()]
        if self.y not in self.X:
            self.split_button['state'] = NORMAL
            self.select_y['state'] = DISABLED

    def split(self):
        test_size = 0.25
        try:
            test_size = float(self.test_size.get())
            if test_size <= 0 or test_size >= 1:
                test_size = 0.25
        except ValueError:
            test_size = 0.25
            self.test_size.set('0.25')
        random_state = None
        if self.rstate.get() != 'None':
            try:
                random_state = int(self.rstate.get())
            except ValueError:
                random_state = None
                self.rstate.set('None')

        self.X_train_l, self.X_test_l, self.y_train_l, self.y_test_l = train_test_split(
            self.data[self.X],
            self.data[self.y],
            test_size=test_size,
            random_state=random_state)
        self.X_train, self.X_test, self.y_train, self.y_test = train_test_split(
            self.data[self.X],
            self.le.fit_transform(self.data[self.y]),
            test_size=test_size,
            random_state=random_state)

        self.linreg_pred['state'] = NORMAL
        self.coefficients['state'] = DISABLED
        self.scatter_button['state'] = DISABLED
        self.linreg_error['state'] = DISABLED

        self.logreg_pred['state'] = NORMAL
        self.logreg_cr['state'] = DISABLED
        self.logreg_cm['state'] = DISABLED
        self.logreg_error['state'] = DISABLED

        self.dtree_pred['state'] = NORMAL
        self.dtree_cr['state'] = DISABLED
        self.dtree_cm['state'] = DISABLED
        self.dtree_error['state'] = DISABLED

        self.rforest_pred['state'] = NORMAL
        self.rforest_cm['state'] = DISABLED
        self.rforest_cr['state'] = DISABLED
        self.rforest_error['state'] = DISABLED

    def pred_linreg(self):
        self.linreg_model = LinearRegression()
        self.linreg_model.fit(self.X_train_l, self.y_train_l)
        self.linreg_predictions = self.linreg_model.predict(self.X_test_l)

        self.linreg_error['state'] = NORMAL
        self.scatter_button['state'] = NORMAL
        self.coefficients['state'] = NORMAL

    def scatter(self):
        Scatter(self.window, self.y_test_l, self.linreg_predictions)

    def coeff(self):
        Coefficients(self.window, self.linreg_model.intercept_,
                     self.linreg_model.coef_, self.X)

    def errors_linreg(self):
        temp = [
            mean_absolute_error(self.y_test, self.linreg_predictions),
            mean_squared_error(self.y_test, self.linreg_predictions),
            np.sqrt(mean_squared_error(self.y_test, self.linreg_predictions))
        ]
        Errors(self.window, temp, 'Linear Regression')

    def pred_logreg(self):
        self.logreg_model = LogisticRegression(solver='liblinear')
        self.logreg_model.fit(self.X_train, self.y_train)
        self.logreg_predictions = self.logreg_model.predict(self.X_test)

        self.logreg_cr['state'] = NORMAL
        self.logreg_cm['state'] = NORMAL
        self.logreg_error['state'] = NORMAL

    def cm_logreg(self):
        ConfusionMatrix(
            self.window,
            confusion_matrix(
                self.le.inverse_transform(self.y_test),
                self.le.inverse_transform(self.logreg_predictions)),
            'Logistic Regression', self.le.classes_)

    def cr_logreg(self):
        ClassificationReport(
            self.window,
            classification_report(
                self.le.inverse_transform(self.y_test),
                self.le.inverse_transform(self.logreg_predictions)),
            'Logistic Regression')

    def errors_logreg(self):
        temp = [
            mean_absolute_error(self.y_test, self.logreg_predictions),
            mean_squared_error(self.y_test, self.logreg_predictions),
            np.sqrt(mean_squared_error(self.y_test, self.logreg_predictions))
        ]
        Errors(self.window, temp, 'Logistic Regression')

    def pred_dtree(self):
        self.dtree_model = DecisionTreeClassifier()
        self.dtree_model.fit(self.X_train, self.y_train)
        self.dtree_predictions = self.dtree_model.predict(self.X_test)

        self.dtree_cr['state'] = NORMAL
        self.dtree_cm['state'] = NORMAL
        self.dtree_error['state'] = NORMAL

    def cm_dtree(self):
        ConfusionMatrix(
            self.window,
            confusion_matrix(self.le.inverse_transform(self.y_test),
                             self.le.inverse_transform(
                                 self.dtree_predictions)), 'Decision Tree',
            self.le.classes_)

    def cr_dtree(self):
        ClassificationReport(
            self.window,
            classification_report(
                self.le.inverse_transform(self.y_test),
                self.le.inverse_transform(self.dtree_predictions)),
            'Decision Tree')

    def errors_dtree(self):
        temp = [
            mean_absolute_error(self.y_test, self.dtree_predictions),
            mean_squared_error(self.y_test, self.dtree_predictions),
            np.sqrt(mean_squared_error(self.y_test, self.dtree_predictions))
        ]
        Errors(self.window, temp, 'Decision Tree')

    def pred_rforest(self):
        self.rforest_model = RandomForestClassifier(n_estimators=100)
        self.rforest_model.fit(self.X_train, self.y_train)
        self.rforest_predictions = self.rforest_model.predict(self.X_test)

        self.rforest_cr['state'] = NORMAL
        self.rforest_cm['state'] = NORMAL
        self.rforest_error['state'] = NORMAL

    def cm_rforest(self):
        ConfusionMatrix(
            self.window,
            confusion_matrix(
                self.le.inverse_transform(self.y_test),
                self.le.inverse_transform(self.rforest_predictions)),
            'Random Forest', self.le.classes_)

    def cr_rforest(self):
        ClassificationReport(
            self.window,
            classification_report(
                self.le.inverse_transform(self.y_test),
                self.le.inverse_transform(self.rforest_predictions)),
            'Random Forest')

    def errors_rforest(self):
        temp = [
            mean_absolute_error(self.y_test, self.rforest_predictions),
            mean_squared_error(self.y_test, self.rforest_predictions),
            np.sqrt(mean_squared_error(self.y_test, self.rforest_predictions))
        ]
        Errors(self.window, temp, 'Random Forest')
示例#24
0
    def __init__(self, root):
        self.root = root
        self.root.title("wikipedia")
        self.root.geometry("800x500")
        self.root.resizable(0, 0)
        #self.root.iconbitmap("sym.ico")

        #decleard the textvariables for given entries required for tkinter Entry
        wiki_search = StringVar()  #inputes to be passed
        lang = StringVar()  #language to be passed

        #this are the however effects only included for styling the buttons while hover on it.it will give the user  a clear idea on which button he is in.

        def on_enter1(e):
            But_search['background'] = "black"
            But_search['foreground'] = "cyan"

        def on_leave1(e):
            But_search['background'] = "SystemButtonFace"
            But_search['foreground'] = "SystemButtonText"

        def on_enter2(e):
            But_clear['background'] = "black"
            But_clear['foreground'] = "cyan"

        def on_leave2(e):
            But_clear['background'] = "SystemButtonFace"
            But_clear['foreground'] = "SystemButtonText"

        def on_enter3(e):
            But_speak['background'] = "black"
            But_speak['foreground'] = "cyan"

        def on_leave3(e):
            But_speak['background'] = "SystemButtonFace"
            But_speak['foreground'] = "SystemButtonText"

        #function to clear input entries as well as the text
        def clear():
            TXT.delete("1.0", "end")
            wiki_search.set("")
            TXT.config(bg="white")

        #function to be to search the given input on wikipedia and also provide the all certain information in textbox
        def search_on():
            try:
                TXT.delete("1.0", "end")
                search_text = wiki_search.get()
                langs = lang.get()
                wikipedia.set_lang(langs)

                get_details = wikipedia.summary(search_text)
                TXT.insert("end", get_details)
            except:
                # tkinter.messagebox.showerror("Network Error","your internet is may not working")
                pass

        def thread_search():
            t1 = threading.Thread(target=search_on)
            t1.start()

        """
        added speak translator if in case user might not understand the inputs on text this function will help user to speak the give output provided on textbox
        for more specify I also included an language selector to select and translate the give input in specific language to clerify to user
        this will never speak directly to the user./ but I have provided a file that will help to this to speak ..
        when you search the given name.It will first save in TEMP folder in c drive as temps.mp3 .when ever you click this speak button this will try to find this
        file and the read all the data in given file and then starts to speaks the data
        """

        def speak():
            try:
                time.sleep(1)
                texts = TXT.get("1.0", "end")
                tts = gTTS(text=texts, lang=lang.get())
                filename = 'C:\\TEMP\\temps.mp3'
                tts.save(filename)
                playsound('C:\\TEMP\\temps.mp3')
                os.remove(filename)
                #remove temperory file
            except:
                tkinter.messagebox.askretrycancel(
                    "Internet Error",
                    "INTERNET CONNECTION MAY GONE OR LANGUAGE ERROR",
                    icon="info")

        def thread_speak():
            t1 = threading.Thread(target=speak)
            t1.start()

    #===================frame==========================================

        Main_Frame = Frame(self.root,
                           width=800,
                           height=500,
                           relief="ridge",
                           bd=3,
                           bg="gray75")  #Mainframe
        Main_Frame.place(x=0, y=0)

        Frame_top = Frame(Main_Frame,
                          width=795,
                          height=100,
                          bg="green",
                          relief="ridge",
                          bd=4)  #topframe
        Frame_top.place(x=0, y=0)

        Frame_bottom = Frame(Main_Frame,
                             width=795,
                             height=395,
                             bg="blue",
                             relief="ridge",
                             bd=4)  #bottomframe
        Frame_bottom.place(x=0, y=100)

        #===============================LabelFrame============================

        Lab_top = LabelFrame(Frame_top,
                             text="Search in wikipedia",
                             width=785,
                             height=90,
                             bg="#7282cf",
                             fg="#f9eefb")  #LabelFrame
        Lab_top.place(x=0, y=0)

        #this entry will provide user to search
        Ent_search = Entry(Lab_top,
                           width=50,
                           font=('times new roman', 12, 'italic'),
                           relief="ridge",
                           bd=4,
                           bg="snow",
                           textvariable=wiki_search)
        Ent_search.place(x=21, y=7)

        #select the langueages
        lab = Label(Lab_top,
                    text="SELECT LANGUAGE",
                    font=('times new roman', 8, 'italic'),
                    bg="#7282cf",
                    fg="white")
        lab.place(x=21, y=40)

        #list of languages are English,hindi,marathi
        lan_list = ["en", "hi", "mr"]
        lan_combo = Combobox(Lab_top,
                             values=lan_list,
                             font=('arial', 10),
                             width=14,
                             state="readonly",
                             textvariable=lang)
        lan_combo.set("en")
        lan_combo.place(x=139, y=40)

        #buton to search
        But_search = Button(Lab_top,
                            text="Search",
                            width=20,
                            font=('times new roman', 10, 'bold'),
                            relief="ridge",
                            bd=4,
                            cursor="hand2",
                            command=thread_search)
        But_search.place(x=450, y=7)
        But_search.bind("<Enter>", on_enter1)
        But_search.bind("<Leave>", on_leave1)

        #but clear the data
        But_clear = Button(Lab_top,
                           text="Clear",
                           width=15,
                           font=('times new roman', 10, 'bold'),
                           relief="ridge",
                           bd=4,
                           cursor="hand2",
                           command=clear)
        But_clear.place(x=630, y=7)
        But_clear.bind("<Enter>", on_enter2)
        But_clear.bind("<Leave>", on_leave2)

        #button to speak
        But_speak = Button(Lab_top,
                           text="Speak",
                           width=15,
                           font=('times new roman', 10, 'bold'),
                           relief="ridge",
                           bd=4,
                           cursor="hand2",
                           command=thread_speak)
        But_speak.place(x=630, y=40)
        But_speak.bind("<Enter>", on_enter3)
        But_speak.bind("<Leave>", on_leave3)

        #=============================Frame_bottom+++++++++++++++++++++++++++++++++=
        #scrollbar on y axis
        scroll = Scrollbar(Frame_bottom)
        scroll.pack(side="right", fill="y")
        TXT = Text(Frame_bottom,
                   width=109,
                   height=24,
                   font=('arial', 10, 'bold'),
                   bd=1,
                   bg="gray95",
                   relief="ridge",
                   state="normal",
                   yscrollcommand=scroll.set)
        TXT.pack(side="left")
        scroll.config(command=TXT.yview)
示例#25
0
class filtrar:
    def __init__(self, parent):
        self.parent = parent
        self.pathLocation = get_secret("MAIN_PATH")
        self.func = functions(self)
        self.contador = None
        self.mesDe = StringVar()
        self.anoDe = StringVar()
        self.anoAte = StringVar()
        self.mesAte = StringVar()

    def Filtrar(self):

        self.top = Toplevel(self.parent)
        self.top.wm_title("Filtrar Pedidos")
        self.top.geometry("391x370+100+50")

        self.contador = 0
        self.anoDe.set(strftime("%Y"))
        self.mesDe.set(self.func.getMes(strftime("%B")))
        self.anoAte.set("")
        self.mesAte.set("")

        check = IntVar()
        check.set(0)

        # Apartir desta data
        # =========================A PARTIR DE==========================================

        labelDe = Label(self.top)
        labelDe['text'] = "A partir de:"
        labelDe.place(y=5, x=5)

        labelAno = Label(self.top)
        labelAno['text'] = "Ano"
        labelAno.place(y=20, x=50)

        self.entryAnoDe = Entry(self.top)
        self.entryAnoDe["textvariable"] = self.anoDe
        self.entryAnoDe.textvariable = self.anoDe
        self.entryAnoDe["width"] = 4
        self.entryAnoDe.focus()
        self.entryAnoDe.bind("<Return>", self.setNext)
        self.entryAnoDe.place(y=40, x=50)

        labelMes = Label(self.top)
        labelMes["text"] = "Mes"
        labelMes.place(y=60, x=50)

        self.entryMesDe = Entry(self.top)
        self.entryMesDe["textvariable"] = self.mesDe
        self.entryMesDe.textvariable = self.mesDe
        self.entryMesDe["width"] = 10
        self.entryMesDe.bind("<Return>", self.setNext)
        self.entryMesDe.place(y=80, x=50)
        # =========================ATE==================================================
        self.frame = LabelFrame(self.top)
        self.frame['width'] = 100
        self.frame['height'] = 117
        self.frame['borderwidth'] = 3
        self.frame.place(y=2, x=125)

        self.checkBox = Checkbutton(self.frame)
        self.checkBox['text'] = "Até"
        self.checkBox['variable'] = check
        self.checkBox['command'] = lambda: self.ativaAte(check.get())
        self.checkBox['onvalue'] = 1
        self.checkBox['offvalue'] = 0
        self.checkBox.variable = check
        self.checkBox.place(y=1, x=2)

        labelAno = Label(self.frame)
        labelAno['text'] = "Ano"
        labelAno.place(y=20, x=5)

        self.entryAnoAte = Entry(self.frame)
        self.entryAnoAte["state"] = DISABLED
        self.entryAnoAte["width"] = 4
        self.entryAnoAte['textvariable'] = self.anoAte
        self.entryAnoAte.bind("<Return>", self.setNext)
        self.entryAnoAte.place(y=40, x=5)

        labelMes = Label(self.frame)
        labelMes["text"] = "Mes"
        labelMes.place(y=60, x=5)

        self.entryMesAte = Entry(self.frame)
        self.entryMesAte["state"] = DISABLED
        self.entryMesAte["width"] = 10
        self.entryMesAte['textvariable'] = self.mesAte
        self.entryMesAte.bind("<Return>", self.setNext)
        self.entryMesAte.place(y=80, x=5)
        # =========================FILTRO===============================================

        labelEntry = Label(self.top)
        labelEntry['text'] = "Filtro"
        labelEntry.place(y=20, x=265)

        self.entryFiltro = Entry(self.top)
        self.entryFiltro['width'] = 15
        self.entryFiltro.bind("<Return>", lambda _: self.getFiltrado())
        self.entryFiltro.place(y=40, x=240)

        # =======================================================================
        # LABEL PARA COMPLETAR ESPAÇOS
        # =======================================================================

        Label(self.top).pack()
        Label(self.top).pack()
        Label(self.top).pack()
        Label(self.top).pack()
        Label(self.top).pack()
        Label(self.top).pack()
        Label(self.top).pack()
        # -----------------------------------------------------------------------
        self.scrollbar = Scrollbar(self.top)
        self.scrollbar.pack(side=RIGHT, fill=BOTH)

        self.customFont = font.Font(family="Arial", size=10)
        self.textFrame = Text(self.top)
        self.textFrame['font'] = self.customFont
        self.textFrame['height'] = 11
        self.textFrame['width'] = 51
        self.textFrame['borderwidth'] = 3
        self.textFrame['takefocus'] = False
        self.textFrame['yscrollcommand'] = self.scrollbar.set
        self.textFrame.yscrollcommand = self.scrollbar.set
        self.textFrame.place(y=160, x=5)

        self.scrollbar['command'] = self.textFrame.yview
        self.scrollbar.command = self.textFrame.yview

        self.labelTotal = Label(self.top)
        self.labelTotal['text'] = "Total de pedidos: 0"
        self.labelTotal.place(y=345, x=3)

        buttonFiltrar = Button(self.top)
        buttonFiltrar['text'] = "Filtrar"
        buttonFiltrar['command'] = self.getFiltrado
        buttonFiltrar.bind("<Return>", lambda _: self.getFiltrado())
        buttonFiltrar.place(y=130, x=80)

        button_limpar = Button(self.top)
        button_limpar['text'] = "Limpar Resultados"
        button_limpar['command'] = self.limpar_resultados
        button_limpar.bind("<Return>", lambda _: self.limpar_resultados())
        button_limpar.place(y=130, x=130)

        buttonCancel = Button(self.top)
        buttonCancel['text'] = "Voltar"
        buttonCancel['command'] = self.top.destroy
        buttonCancel.bind("<Return>", lambda _: self.top.destroy())
        buttonCancel.place(y=130, x=250)

        # toolTips
        ToolTip(self.entryAnoDe, "Exemplos:\n2016\n2015\n2014")
        ToolTip(self.entryMesDe, "Exemplos:\nAbril\nDezembro\nJaneiro")
        ToolTip(self.entryFiltro, "Exemplos:\nURA\n15/04/16\nJoão")
        msg = "Marque caso queira obter resultados\napartir de uma faixa de data."
        ToolTip(self.checkBox, msg)

    def limpar_resultados(self):
        self.textFrame['state'] = NORMAL
        self.textFrame.delete(1.0, END)
        self.contador = 0
        self.labelTotal.config(text=f"Total de pedidos: {self.contador}")
        self.textFrame['state'] = DISABLED
        self.entryAnoDe.focus()

    def getListas(self):
        ano = []
        listasMeses = []

        meses = [
            'JANEIRO', 'FEVEREIRO', 'MARÇO', 'ABRIL', 'MAIO', 'JUNHO', 'JULHO',
            'AGOSTO', 'SETEMBRO', 'OUTUBRO', 'NOVEMBRO', 'DEZEMBRO'
        ]

        # ===============================================================================
        #                             EXCEPTIONS
        # ===============================================================================
        def mudarCor(key, cor):
            entry = {
                0: self.entryAnoAte,
                1: self.entryAnoDe,
                2: self.entryMesAte,
                3: self.entryMesDe,
            }
            if key == 4:
                for i in range(4):
                    entry[i].config(fg=cor)

            elif key >= 4:
                for i in range(4):
                    if i != (key - 5):
                        entry[i].config(fg=cor)
            else:
                entry[key].config(fg=cor)

        try:
            anoDe = int(self.anoDe.get())
            mesDe = self.mesDe.get().upper()

            if anoDe <= 2015:
                self.entryAnoDe.focus()
                mudarCor(1, 'red')  # AnoDe RED
                mudarCor(6, 'black')  # Restante BLACK
                messagebox.showwarning("ERRO", "Ano Invalido", parent=self.top)
                return ("ERRO", "ERRO")

            elif mesDe not in meses:
                self.entryMesDe.focus()
                mudarCor(3, 'red')  # MesDeDe RED
                mudarCor(8, 'black')  # Restante BLACK
                messagebox.showwarning("ERRO", "Mes Invalido", parent=self.top)
                return ("ERRO", "ERRO")

        except ValueError:
            if self.anoDe.get() != "":
                self.entryAnoDe.focus()
                mudarCor(1, 'red')  # AnoDe RED
                mudarCor(6, 'black')  # Restante BLACK
                messagebox.showwarning("ERRO", "Ano Invalido", parent=self.top)
                return ("ERRO", "ERRO")

        if self.anoAte.get() == "" and self.mesAte.get().upper() == "":
            anoAte = int(self.anoDe.get())
            mesAte = self.mesDe.get().upper()

        else:
            try:
                anoAte = int(self.anoAte.get())
                mesAte = self.mesAte.get().upper()
                if self.anoDe.get() == "":
                    anoDe = anoAte
                    mesDe = mesAte

                if anoAte <= 2015:
                    self.entryAnoAte.focus()
                    mudarCor(0, 'red')  # AnoAte RED
                    mudarCor(5, 'black')  # Restante BLACK
                    messagebox.showwarning("ERRO",
                                           "Ano Invalido",
                                           parent=self.top)
                    return ("ERRO", "ERRO")

                elif anoAte < anoDe:
                    self.entryAnoDe.focus()
                    mudarCor(0, 'red')  # AnoAte e AnoDe RED
                    mudarCor(5, 'black')  # Restante BLACK
                    mudarCor(1, 'red')
                    msg = """Ano "De" tem de ser maior que Ano "Ate" """
                    messagebox.showwarning("ERRO", msg, parent=self.top)
                    return ("ERRO", "ERRO")

                elif mesAte not in meses:
                    self.entryMesAte.focus()
                    mudarCor(2, 'red')  # MesAte RED
                    mudarCor(7, 'black')  # Restante BLACK
                    messagebox.showwarning("ERRO",
                                           "Mes Invalido",
                                           parent=self.top)
                    return ("ERRO", "ERRO")

                elif anoAte == anoDe:
                    if meses.index(mesDe) > meses.index(mesAte):
                        self.entryMesDe.focus()

                        mudarCor(2, 'red')  # MesAte e MesDe RED
                        mudarCor(7, 'black')  # Restante BLACK
                        mudarCor(3, 'red')
                        msg = """Mes "De" tem de ser anterior ao Mes "Ate"
                        Exemplo:
    Mes De: Junho
    Mes Até: Julho """
                        messagebox.showwarning("ERRO", msg, parent=self.top)
                        return ("ERRO", "ERRO")

            except ValueError:
                self.entryAnoAte.focus()
                self.entryAnoAte['fg'] = 'red'
                mudarCor(0, 'red')  # AnoAte RED
                mudarCor(5, 'black')  # Restante BLACK
                messagebox.showwarning("ERRO", "Ano Invalido", parent=self.top)
                return ("ERRO", "ERRO")

        mudarCor(4, 'black')  # TODOS BALCK

        # ===============================================================================
        #                             Função
        # ===============================================================================

        for x in range(anoDe, anoAte + 1):
            ano.append(x)
            aux = []

            if anoDe == anoAte:

                if mesDe == mesAte:
                    listasMeses.append([mesDe])

                else:
                    for i in range(meses.index(mesDe),
                                   meses.index(mesAte) + 1):
                        aux.append(meses[i])

                    listasMeses.append(aux)

            elif x != anoDe and x != anoAte:
                listasMeses.append(meses)

            elif x == anoDe:
                index = meses.index(mesDe)
                for i in range(index, 12):
                    aux.append(meses[i])

                listasMeses.append(aux)

            else:
                index = meses.index(mesAte)
                for i in range(0, index + 1):
                    aux.append(meses[i])

                listasMeses.append(aux)
        return (ano, listasMeses)

    def getFiltrado(self):

        anos, meses = self.getListas()
        if anos == "ERRO" or meses == "ERRO":
            return

        if self.textFrame.get(1.0) != '\n':
            self.textFrame['state'] = NORMAL
            self.textFrame.delete(1.0, END)
            self.contador = 0

        self.textFrame['state'] = NORMAL

        for cont in range(len(anos)):
            mes = meses[cont]
            y = anos[cont]
            for m in mes:
                try:
                    _path = os.path.abspath(
                        os.path.join(self.pathLocation, str(y), f"{m}.cfg"))
                    with open(_path, 'r', encoding=ENCODING) as file:

                        lines = file.readlines()[1:]
                        for line in lines:
                            if self.entryFiltro.get().upper() in line.rstrip(
                            ).upper():
                                self.textFrame.insert(END,
                                                      line.rstrip() + "\n")
                                self.contador += 1

                            else:
                                self.contador += 0

                        self.labelTotal.config(
                            text=f"Total de pedidos: {self.contador}")

                except IOError:
                    message = """Arquivo %s/%s.cfg não localizado!""" % (y, m)
                    messagebox.showwarning("Erro!", message, parent=self.top)

        self.textFrame['state'] = DISABLED

    def ativaAte(self, flag):
        toolTipAno = ToolTip(self.entryAnoAte, "Exemplos:\n2016\n2015\n2014")

        toolTipMes = ToolTip(self.entryMesAte,
                             "Exemplos:\nAbril\nDezembro\nJaneiro")

        if flag == 1:
            self.entryAnoAte.config(state=NORMAL)
            self.entryAnoDe.focus()
            self.entryMesAte.config(state=NORMAL)
            self.frame['borderwidth'] = 0

            toolTipAno.startShowing()
            toolTipMes.startShowing()

            self.anoAte.set(self.anoDe.get())
            self.mesAte.set(self.mesDe.get().upper())
            self.anoDe.set("")
            self.mesDe.set("")

        else:
            self.anoDe.set(self.anoAte.get())
            self.mesDe.set(self.mesAte.get().upper())
            self.anoAte.set("")
            self.mesAte.set("")

            self.entryAnoAte.config(state=DISABLED)
            self.entryMesAte.config(state=DISABLED)
            self.entryFiltro.focus()
            self.frame['borderwidth'] = 3

            toolTipAno.stopShowing()
            toolTipMes.stopShowing()

    def setNext(self, event):
        event.widget.tk_focusNext().focus()
        return ("break")
示例#26
0
文件: status.py 项目: jxuans/guangti
class RunPage(Frame):
    def __init__(self, parent, controller):
        Frame.__init__(self, parent)
        self.controller = controller
        self.reserve_time = StringVar()
        self.reserve_date = StringVar()
        self.success = StringVar()
        self.success.set("No")
        self.counter = IntVar()
        self.counter.set(0)
        self.run_flag = IntVar()
        self.run_flag.set(0)
        self.T = {}
        self.message_count_down = False
        self.show_notice = True
        self.successed_info = []
        self.Config_Path = self.controller.Config_Path
        self.Cookie_Path = self.controller.Cookie_Path
        self.frame_1 = LabelFrame(
            self, text="选择预定日期与开始时间(点击自动选择并查询)", height=100, width=630
        )
        self.day = 0
        self.days = {}
        self.choose_days = {}
        for i in range(7):
            _today = date.today()
            self.days[i] = StringVar()
            _day = _today + timedelta(days=i)
            _day = _day.strftime("%Y-%m-%d")
            self.days[i].set(_day)
            self.choose_days[i] = Radiobutton(
                self.frame_1,
                text=self.days[i].get(),
                variable=self.reserve_date,
                value=self.days[i].get(),
                command=partial(self.set_reserve_date, i),
            )

        self.times = {}
        self.choose_times = {}
        for i in range(7):
            self.times[i] = StringVar()
            _time = "{0:02d}:00:00".format(8 + 2 * i)
            self.times[i].set(_time)
            self.choose_times[i] = Radiobutton(
                self.frame_1,
                text=self.times[i].get(),
                variable=self.reserve_time,
                value=self.times[i].get(),
                command=self.set_reserve_time,
            )
        # -------------------
        self.frame_2 = LabelFrame(self, height=150, width=630)
        self.label_date_1 = Label(self.frame_2, text="预定日期:", anchor=E)
        self.label_date_2 = Label(
            self.frame_2, textvariable=self.reserve_date, anchor=W
        )
        self.label_time_1 = Label(self.frame_2, text="预定时间段(2小时):", anchor=E)
        self.label_time_2 = Label(
            self.frame_2, textvariable=self.reserve_time, anchor=W
        )
        self.label_couner = Label(self.frame_2, text="刷新次数:", anchor=E)
        self.couner_num = Label(self.frame_2, textvariable=self.counter)
        self.label_sucessed = Label(self.frame_2, text="是否预定成功?:", anchor=E)
        self.is_sucessed = Label(self.frame_2, bg="Red", textvariable=self.success)
        self.button_start = Button(
            self.frame_2, text="开始监控", bg="SpringGreen", command=self.start_job
        )
        self.button_stop = Button(
            self.frame_2,
            text="结束",
            state=DISABLED,
            bg="LightGray",
            command=self.stop_job,
        )
        self.label_notice = Label(self.frame_2, text="显示警告与提示?", anchor=E)
        self.button_notice = Button(
            self.frame_2, text="是", bg="Pink", command=self.turn_on_notice
        )
        self.label_sucessed_place = Label(self.frame_2, text="预定成功的场地:", anchor=E)
        self.label_successed_place_info = Label(self.frame_2)
        # -------------------
        self.frame_3 = LabelFrame(self, text="场地状态(点击刷新)", height=600, width=630)

        self.courts = {}
        self.show_courts = {}
        for i in range(8):
            self.courts[i] = IntVar()
            self.courts[i].set("")
            self.show_courts[i] = Button(
                self.frame_3,
                font=("Helvetica 10"),
                text="{}号场地".format(i + 1),
                command=self.get_status,
            )

        self.create_page()

    def create_page(self):
        f_x = 56
        height = 28
        space = 20
        f1_width = 98
        f3_width = 120
        self.frame_1.place(
            x=f_x - 30, y=space, width=700, height=height * 2 + space * 3
        )
        for i in range(7):
            self.choose_days[i].place(
                x=5 + f1_width * i, y=10, width=f1_width, height=height
            )
            self.choose_times[i].place(
                x=5 + f1_width * i, y=20 + height, width=f1_width, height=height
            )
        if not self.reserve_date.get():
            self.choose_days[2].select()
            self.day = 2
        if not self.reserve_time.get():
            self.choose_times[6].select()
        self.frame_2.place(
            x=f_x,
            y=space + height * 4 + space,
            width=630,
            height=height * 3 + space * 4,
        )
        self.label_date_1.place(x=space, y=space, width=120, height=height)
        self.label_date_2.place(x=space + 120, y=space, width=80, height=height)
        self.label_time_1.place(x=space, y=space * 2 + height, width=120, height=height)
        self.label_time_2.place(
            x=space + 120, y=space * 2 + height, width=80, height=height
        )
        self.button_start.place(x=space + 100 + 100, y=space, width=180, height=height)
        self.button_stop.place(
            x=space + 120 + 80, y=space * 2 + height, width=180, height=height
        )
        self.label_couner.place(
            x=space * 2 + 100 + 100 + 180, y=space, width=100, height=height
        )
        self.couner_num.place(
            x=space * 2 + 100 + 100 + 180 + 100, y=space, width=80, height=height
        )
        self.label_sucessed.place(
            x=space * 2 + 100 + 100 + 180,
            y=space * 2 + height,
            width=100,
            height=height,
        )
        self.is_sucessed.place(
            x=space * 2 + 100 + 100 + 180 + 100,
            y=space * 2 + height,
            width=80,
            height=height,
        )
        self.label_notice.place(
            x=space, y=space * 3 + height * 2, width=120, height=height
        )
        self.button_notice.place(
            x=space + 120, y=space * 3 + height * 2, width=50, height=height
        )
        # -------------------
        self.frame_3.place(x=f_x, y=150 + 100 + space * 4, width=630, height=height * 6)
        for i in range(8):
            self.show_courts[i].place(
                x=10 + (f3_width + 40) * (i % 4),
                y=10 + (height * 2 + space) * (i // 4),
                width=f3_width,
                height=height * 2,
            )
            self.show_courts[i].configure(
                background="LightGray", highlightbackground="Gold", foreground="Black"
            )

    def job(self):
        _st = "07:59:30"  # 开始时间
        _end = "22:00:00"  # 结束时间
        i = 1  # 刷新次数计数器
        infos = backend.load_config(self.Config_Path)
        while True:
            if self.run_flag.get() == 0:
                break
            elif _st <= strftime("%H:%M:%S", localtime()) < _end:
                if backend.judge_time():
                    dt = 2
                else:
                    dt = 20
                self.update_status(True, infos, dt)
            else:
                dt = 40
                self.update_status(False, infos, dt)
            sleep(dt)
            self.counter.set(i)
            self.couner_num.configure(textvariable=self.counter)
            i += 1

    def start_job(self):
        if self.run_flag.get() == 0 and self.success.get() == "No":
            self.run_flag.set(1)
            for i in range(7):
                self.choose_days[i].config(state=DISABLED)
                self.choose_times[i].config(state=DISABLED)
            self.button_start.configure(
                bg="LightGray", state=ACTIVE, text="正在运行 ...", fg="Green"
            )
            self.button_stop.configure(bg="Tomato", state=NORMAL, text="结束", fg="Black")
            # sort_place_order(self.controller)
            ct = int(random() * 10000)
            self.T[ct] = Thread(target=self.job, args=())
            self.T[ct].daemon = True
            self.T[ct].start()

        elif self.success.get() == "Yes":
            messagebox.showinfo("提示", "   =_=已经预定到啦=_=   \n\n   请网页上查看!   \n")
        else:
            messagebox.showinfo("提示", "   =_=已经在运行啦=_=   \n\n   不要重复点击!   \n")

    def stop_job(self):
        if self.run_flag.get() == 1:
            self.run_flag.set(0)
            for i in range(7):
                self.choose_days[i].config(state=NORMAL)
                self.choose_times[i].config(state=NORMAL)
            self.button_stop.configure(bg="Gray", state=ACTIVE, text="已经停止", fg="White")
            self.button_start.configure(
                bg="SpringGreen", state=NORMAL, text="开始监控", fg="Black"
            )
        else:
            messagebox.showinfo("提示", "   =_=当前没有后台监控任务=_=   \n\n   不要重复点击!   \n   ")

    def update_status(self, doit=False, infos=None, dt=0, mark=True):
        """doit 预定 flag,infos 同伴信息,dt 睡眠时间,秒;mark 用于防止递归。"""
        _date = self.reserve_date.get()
        _time = self.reserve_time.get()
        if _date and _time:
            res = {}
            court = backend.pian_status
            res, _ = backend.get_status(
                self.Config_Path, self.Cookie_Path, (_date, _time)
            )
            if infos and infos["place_sort"]:
                sorted_keys = sort_place_order(court, infos["place_sort"])
            else:
                sorted_keys = res.keys()
            for key in sorted_keys:
                # 2:已预约;4:不开放;1:可预约;3:使用中;5:预约中,'':不可预约
                ii = int(court[key])
                res_status = res[key][0]
                res_note = res[key][1]
                if res_status == 1:
                    self.try_to_reverse(doit, infos, key, ii, _date, _time, dt)
                elif res_status == 2:
                    self.show_courts[ii - 1].configure(
                        text="{}号场地\n已被预约".format(ii),
                        background="Black",
                        highlightbackground="Gold",
                        foreground="Gold",
                        font=("Helvetica 10"),
                    )
                elif res_status == 3:
                    self.show_courts[ii - 1].configure(
                        text="{}号场地\n使用中".format(ii),
                        background="Yellow",
                        highlightbackground="Gold",
                        foreground="Gold",
                        font=("Helvetica 10"),
                    )
                elif res_status == 4:
                    self.show_courts[ii - 1].configure(
                        text="{}号场地\n不开放".format(ii),
                        background="Gray",
                        highlightbackground="Gold",
                        foreground="White",
                        font=("Helvetica 10"),
                    )
                    if res_note:
                        if len(res_note) >= 10:
                            self.show_courts[ii - 1].configure(
                                text="{}号场地(不开放)\n{}".format(ii, res_note),
                                font=("Helvetica 8"),
                            )
                        else:
                            self.show_courts[ii - 1].configure(
                                text="{}号场地(不开放)\n{}".format(ii, res_note)
                            )

                elif res_status == 5:
                    self.show_courts[ii - 1].configure(
                        text="{}号场地\n预约中".format(ii),
                        background="Green",
                        highlightbackground="Gold",
                        foreground="Cyan",
                        font=("Helvetica 10"),
                    )
                else:
                    self.show_courts[ii - 1].configure(
                        text="{}号场地\n不可预约".format(ii),
                        background="LightGray",
                        highlightbackground="Gold",
                        foreground="Gold",
                        font=("Helvetica 10"),
                    )
            if mark:
                self.mark_successed_place(court, _date, _time)
            if doit and infos:
                # 没有可预定或正在预定的场地,则退出预定
                if res and (1, "") not in res.values() and (5, "") not in res.values():
                    self.stop_job()  # 退出线程
                    messagebox.showinfo(
                        "提示",
                        "-" * 20
                        + "\n   =_=没有可预约的场地=_=   \n\n   请选择其他时间和日期的场地预约!   \n   ",
                    )

    def try_to_reverse(self, doit, infos, key, ii, _date, _time, dt):
        """尝试预定单个场地"""
        _text = "{}号场地\n可预约".format(ii)
        if doit and infos and self.success.get() != "Yes" and self.run_flag.get() == 1:
            is_ok = False
            try:
                is_ok = backend.appointment(
                    self.Config_Path,
                    self.Cookie_Path,
                    key,
                    _date,
                    _time,
                    infos,
                    self.day,
                )
            except UserWarning as UW:
                msg = (
                    "-" * 20 + "\n{}\n".format(UW) + "-" * 20 + "\n{}秒后重试".format(dt),
                )
                if not self.message_count_down and self.show_notice:
                    mymessage.CountDownMessageBox(self, msg)
            except Warning as War:
                _text = "{}号场地\n尝试预约,已失败".format(ii)
                self.stop_job()  # 退出线程
                msg = "-" * 20 + "\n错误信息:\n{}\n".format(War) + "-" * 20
                if self.show_notice:
                    messagebox.showerror("发生错误", msg)

            if is_ok:
                self.success.set("Yes")
                self.successed_info = [key, _date, _time]
                self.stop_job()  # 退出线程

        self.color_target_court(ii, _text)

    def color_target_court(self, ii, _text):
        """上色 可预约场地"""
        self.show_courts[ii - 1].configure(
            text=_text,
            background="Green",
            highlightbackground="Gold",
            foreground="Gold",
            font=("Helvetica 10"),
        )

    def mark_successed_place(self, court, _date, _time):
        """标记已经预定了的场地"""
        if (
            self.successed_info
            and _date == self.successed_info[1]
            and _time == self.successed_info[2]
        ):
            # 更新场地状态,如果显示已被预定,就表示成功预定该场地。
            self.update_status(mark=False)
            res, _ = backend.get_status(
                self.Config_Path, self.Cookie_Path, (_date, _time)
            )
            key = self.successed_info[0]
            if res[key][0] == 2:
                ii = int(court[key])
                # 高亮 成功 YES
                self.is_sucessed.configure(
                    textvariable=self.success, bg="LightGray", fg="Magenta"
                )
                # 显示预定信息
                success_text = str(ii) + "号 " + _date + " " + _time
                self.label_successed_place_info.configure(
                    fg="Magenta", text=success_text
                )
                self.label_sucessed_place.place(
                    x=20 + 200, y=20 * 3 + 28 * 2, width=180, height=28
                )
                self.label_successed_place_info.place(
                    x=20 + 380, y=20 * 3 + 28 * 2, width=200, height=28
                )
                self.show_courts[ii - 1].configure(
                    text="{}号场地\n程序预约了该场地".format(ii),
                    background="Magenta",
                    highlightbackground="Green",
                    foreground="White",
                    font=("Helvetica 10"),
                )
            else:
                self.successed_info = []
                self.success.set("No")

    def set_reserve_date(self, day):
        self.update_status()
        self.day = day

    def set_reserve_time(self):
        self.update_status()

    def get_status(self):
        if self.run_flag.get() != 1:
            self.update_status()

    def turn_on_notice(self):
        if self.show_notice:
            self.show_notice = False
            self.button_notice.configure(text="否", bg="LightGray")
        else:
            self.show_notice = True
            self.button_notice.configure(text="是", bg="Pink")
def showWindow(tag):
   subWindow = Tk()
   if tag == 'map':
      subWindow.title('地图')
      subWindow.geometry('450x400')
      rootpath = os.getcwd()+os.sep+'archive'+os.sep+'map'

      leftBg = Frame(subWindow)
      var = BooleanVar(leftBg)
      check = Checkbutton(leftBg, text = "生成HTML文件而非图片", variable=var).grid(row=0, column=1, columnspan=3)

      hit1 = Button(leftBg, text = "全国各地疫情关注情况热力图1", command = lambda: showImg(rootpath+os.sep+'png'+os.sep+'全国各地疫情关注情况热力图1.png', var.get(), rootpath+os.sep+'html'+os.sep+'全国各地疫情关注情况热力图1.html')).grid(row=2, column=1)
      hit2 = Button(leftBg, text = "全国各地疫情关注情况热力图2", command = lambda: showImg(rootpath+os.sep+'png'+os.sep+'全国各地疫情关注情况热力图2.png', var.get(), rootpath+os.sep+'html'+os.sep+'全国各地疫情关注情况热力图2.html')).grid(row=4, column=1)
      hit3 = Button(leftBg, text = "全国各地疫情关注情况热力图3", command = lambda: showImg(rootpath+os.sep+'png'+os.sep+'全国各地疫情关注情况热力图3.png', var.get(), rootpath+os.sep+'html'+os.sep+'全国各地疫情关注情况热力图3.html')).grid(row=6, column=1)
      fill1 = Button(leftBg, text = "全国各地疫情关注情况填充图1", command = lambda: showImg(rootpath+os.sep+'png'+os.sep+'全国各地疫情关注情况填充图1.png', var.get(), rootpath+os.sep+'html'+os.sep+'全国各地疫情关注情况填充图1.html')).grid(row=8 , column=1)
      fill2 = Button(leftBg, text = "全国各地疫情关注情况填充图2", command = lambda: showImg(rootpath+os.sep+'png'+os.sep+'全国各地疫情关注情况填充图2.png', var.get(), rootpath+os.sep+'html'+os.sep+'全国各地疫情关注情况填充图2.html')).grid(row=10, column=1)
      fill3 = Button(leftBg, text = "全国各地疫情关注情况填充图3", command = lambda: showImg(rootpath+os.sep+'png'+os.sep+'全国各地疫情关注情况填充图3.png', var.get(), rootpath+os.sep+'html'+os.sep+'全国各地疫情关注情况填充图3.html')).grid(row=12, column=1)
      hbHit = Button(leftBg, text = "疫情期间湖北各市受关注度分布", command = lambda: showImg(rootpath+os.sep+'png'+os.sep+'疫情期间湖北各市受关注度分布.png', var.get(), rootpath+os.sep+'html'+os.sep+'疫情期间湖北各市受关注度分布.html')).grid(row=2, column=3)
      nationalHit = Button(leftBg, text = "疫情期间全国各地受关注度分布", command = lambda: showImg(rootpath+os.sep+'png'+os.sep+'疫情期间全国各地受关注度分布.png', var.get(), rootpath+os.sep+'html'+os.sep+'疫情期间全国各地受关注度分布.html')).grid(row=4, column=3)
      pst = Button(leftBg, text = "疫情期间全国各地积极度", command = lambda: showImg(rootpath+os.sep+'png'+os.sep+'疫情期间全国各地积极度.png', var.get(), rootpath+os.sep+'html'+os.sep+'疫情期间全国各地积极度.html')).grid(row=6, column=3)
      ngt = Button(leftBg, text = "疫情期间全国各地消极度", command = lambda: showImg(rootpath+os.sep+'png'+os.sep+'疫情期间全国各地消极度.png', var.get(), rootpath+os.sep+'html'+os.sep+'疫情期间全国各地消极度.html')).grid(row=8, column=3)
      stm = Button(leftBg, text = "疫情期间全国各地情绪分布", command = lambda: showImg(rootpath+os.sep+'png'+os.sep+'疫情期间全国各地情绪分布.png', var.get(), rootpath+os.sep+'html'+os.sep+'疫情期间全国各地情绪分布.html')).grid(row=10, column=3)

      emptyBottom = Frame(leftBg).grid(row=11, column = 4)

      setGrid(leftBg, 20)
      leftBg.pack()

   elif tag == 'wordcloud':
      subWindow.title('词云图')
      subWindow.geometry('400x300')
      rootpath = os.getcwd()+os.sep+'archive'+os.sep+'wordcloud'

      bg = Frame(subWindow)
      botton1 = Button(bg, text = "疫情", command = lambda: showImg(rootpath+os.sep+'武汉 疫情 口罩 医院 战疫 钟南山 肺炎.jpg')).grid(row=1)
      botton2 = Button(bg, text = "作息", command = lambda: showImg(rootpath+os.sep+'熬夜 吃饭 早饭 午饭 晚饭 夜宵 睡觉 起床.jpg')).grid(row=3)
      botton3 = Button(bg, text = "复工复产", command = lambda: showImg(rootpath+os.sep+'上班 办公室 复工 复产 工作.jpg')).grid(row=5)
      botton4 = Button(bg, text = "复学", command = lambda: showImg(rootpath+os.sep+'开学 返校 复学.jpg')).grid(row=7)

      emptyBottom = Frame(bg).grid(row=8)
      setGrid(bg, 20)
      bg.pack()

   elif tag == 'chart':
      subWindow.title('折线图')
      subWindow.geometry('400x300')
      rootpath = os.getcwd()+os.sep+'archive'+os.sep+'chart'
      # 博客数
      leftBg = Frame(subWindow)
      leftLabelFrame = LabelFrame(subWindow, text = "媒体博客数", labelanchor="nw")
      leftLabelFrame.place(relx=0.02, rely=0.02, relwidth=0.47, relheight=0.96)
      leftBg = Frame(leftLabelFrame)
      mapBotton1 = Button(leftBg, text = "疫情", command = lambda: showImg(rootpath+os.sep+'media武汉 疫情 口罩 医院 战疫 钟南山 肺炎.png')).grid(row=1)
      wordBotton1 = Button(leftBg, text = "作息", command = lambda: showImg(rootpath+os.sep+'media熬夜 吃饭 早饭 午饭 晚饭 夜宵 睡觉 起床.png')).grid(row=3)
      chartBotton1 = Button(leftBg, text = "复工复产", command = lambda: showImg(rootpath+os.sep+'media上班 办公室 复工 复产 工作.png')).grid(row=5)
      betaBotton1 = Button(leftBg, text = "复学", command = lambda: showImg(rootpath+os.sep+'media开学 返校 复学.png')).grid(row=7)

      emptyBottom1 = Frame(leftBg).grid(row=8)

      setGrid(leftBg, 20)
      leftBg.pack()

      # 评论&转发
      rightLabelFrame = LabelFrame(subWindow, text = "评论数与转发数", labelanchor="nw")
      rightLabelFrame.place(relx=0.51, rely=0.02, relwidth=0.47, relheight=0.96)
      rightBg = Frame(rightLabelFrame)
      mapBotton2 = Button(rightBg, text = "疫情", command = lambda: showImg(rootpath+os.sep+'武汉 疫情 口罩 医院 战疫 钟南山 肺炎.png')).grid(row=1)
      wordBotton2 = Button(rightBg, text = "作息", command = lambda: showImg(rootpath+os.sep+'熬夜 吃饭 早饭 午饭 晚饭 夜宵 睡觉 起床.png')).grid(row=3)
      chartBotton2 = Button(rightBg, text = "复工复产", command = lambda: showImg(rootpath+os.sep+'上班 办公室 复工 复产 工作.png')).grid(row=5)
      betaBotton2 = Button(rightBg, text = "复学", command = lambda: showImg(rootpath+os.sep+'开学 返校 复学.png')).grid(row=7)

      emptyBottom2 = Frame(rightBg).grid(row=8)

      setGrid(rightBg, 20)
      rightBg.pack()

   elif tag == 'sentiment':
      subWindow.title('NLP情绪分析(Beta)')
      subWindow.geometry('400x450')
      rootpath = os.getcwd()+os.sep+'archive'+os.sep+'sentimentchart (Beta)'

      bg = Frame(subWindow)
      botton1 = Button(bg, text = "分组1-数量图", command = lambda: showImg(rootpath+os.sep+'bar result1.png')).grid(row=1)
      botton2 = Button(bg, text = "分组2-数量图", command = lambda: showImg(rootpath+os.sep+'bar result1.png')).grid(row=3)
      botton3 = Button(bg, text = "分组3-数量图", command = lambda: showImg(rootpath+os.sep+'bar result1.png')).grid(row=5)
      botton4 = Button(bg, text = "箱型图", command = lambda: showImg(rootpath+os.sep+'box.png')).grid(row=7)
      botton4 = Button(bg, text = "密度图", command = lambda: showImg(rootpath+os.sep+'density.png')).grid(row=9)

      emptyBottom = Frame(bg).grid(row=10)
      setGrid(bg, 20)
      bg.pack()

   subWindow.mainloop()
示例#28
0
文件: index .py 项目: edgarJ91/tytus
class Aplicacion:
    def __init__(self):
        self.ventana1 = tk.Tk()
        self.ventana1.title('TytusDB')
        self.ventana1.geometry("850x450+100+100")
        self.ventana1.configure(background='white')
        #self.load = tk.Image.open("icondb.png")
        #self.ventana1.iconphoto(False, ImageTk.PhotoImage(self.load))

        #TEXTO DE ENTRADA
        self.scrolledtext1 = st.ScrolledText(self.ventana1,
                                             wrap=tk.WORD,
                                             width=50,
                                             height=7,
                                             font=("Times New Roman", 15))
        self.scrolledtext1.place(x=290, y=40)
        self.framecopia()

        #TEXTO DE SALIDA
        self.scrolledtext2 = st.ScrolledText(self.ventana1,
                                             wrap=tk.WORD,
                                             width=50,
                                             height=7,
                                             font=("Times New Roman", 15))
        self.scrolledtext2.place(x=290, y=250)

        #MENU
        self.menubar = Menu(self.ventana1, background="gray")
        self.ventana1.config(menu=self.menubar)
        self.fileMenu = Menu(self.menubar)
        self.fileMenu.add_command(label="Exit", command=self.Exit)
        self.menubar.add_cascade(label="File", menu=self.fileMenu)
        self.menubar.add_cascade(label="Object")
        self.menubar.add_cascade(label="Tools")
        self.FileA = Menu(self.menubar)
        self.FileA.add_command(label="Acerca de", command=self.MensajeAcercaDe)
        self.menubar.add_cascade(label="Help", menu=self.FileA)

        #BARRA DE HERRAMIENTAS DEL CENTRO
        self.BarraHerramientas = LabelFrame(self.ventana1,
                                            text='',
                                            background="white")
        self.BarraHerramientas.grid(row=0, column=0, columnspan=3, pady=95)
        self.BarraHerramientas.place(x=450, y=210)
        #IMAGEN DEL CENTRO
        self.load1 = Image.open("tytus.gif")
        self.render1 = ImageTk.PhotoImage(self.load1)
        self.img1 = Label(self.ventana1, image=self.render1)
        self.img1.image = self.render1
        self.img1.place(x=290, y=210)
        tk.Label(self.ventana1,
                 text="Salida",
                 font=("Arial", 20),
                 background='#B5F5E0',
                 foreground="black").place(x=370, y=210)
        #BOTON CORRER
        self.boton1 = ttk.Button(self.BarraHerramientas,
                                 text="RUN",
                                 command=self.copiar)
        self.boton1.pack()

        #IMAGEN
        self.load = Image.open("icondb.png")
        self.render = ImageTk.PhotoImage(self.load)
        self.img = Label(self.ventana1, image=self.render)
        self.img.image = self.render
        self.img.place(x=0, y=0)

        self.ventana1.iconphoto(False, ImageTk.PhotoImage(self.load))
        self.ventana1.mainloop()


#CONFIGURANDO PARA LA BASE DE DATOS.

    def framecopia(self):
        self.Bases = LabelFrame(self.ventana1,
                                text='BASES DE DATOS EXISTENTES',
                                background="white")
        self.Bases.grid(row=0, column=0, columnspan=3, pady=95)
        Label(self.Bases, text='BASES DE DATOS 1').grid(row=1, column=0)
        Label(self.Bases, text='BASES DE DATOS 2').grid(row=2, column=0)
        Label(self.Bases, text='BASES DE DATOS 3').grid(row=3, column=0)
        Label(self.Bases, text='BASES DE DATOS 3.1').grid(row=4, column=1)
        Label(self.Bases, text='BASES DE DATOS 3.2').grid(row=5, column=1)
        Label(self.Bases, text='BASES DE DATOS 4').grid(row=6, column=0)

    def copiar(self):
        #iniciofila=self.dato1.get()
        #iniciocolumna=self.dato2.get()
        #finfila=self.dato3.get()
        #fincolumna=self.dato4.get()
        datos = self.scrolledtext1.get(1.0, tk.END)
        self.scrolledtext2.delete("1.0", tk.END)
        self.scrolledtext2.insert("1.0", datos)

    def MensajeAcercaDe(self):

        messagebox.showinfo(
            message=
            "ESTE PROGRAMA ES REALIZADO \n POR EL GRUPO 8:\n  \n Version 1.0.0",
            title="TytusDB")

    def Exit(self):
        messagebox.showinfo(message="Gracias por utilizar este programa! :v",
                            title="TytusDB")
        quit()
示例#29
0
class ExerciseFrame(Frame):
    def __init__(self, master, subject, font_name):
        super().__init__(master)
        self.master = master
        self.subject = subject
        self.pack(fill=BOTH, expand=1)  # 自身Frame最大化

        # counting 显示信息
        # self._answer_times = 0                    # 做过几次
        self._answer_times_variable = StringVar()  # 做过几次变量
        # self._correct_times = 0                   # 答对过几次
        self._correct_variable = StringVar()  # 答对次数变量
        self._rate_variable = StringVar()  # 答对率变量
        # self._weight = 0.0                        # 题目权重
        self._weight_variable = StringVar()  # 权重变量
        self._info_variable = StringVar()

        # self._answer_string = ''                  # 答案
        self._answer_variable = StringVar()  # 答案变量
        self._answer_variable.set(ANSWER_PSEUDO)

        # 字体
        self._my_font = Font(family=font_name, size=14)
        self._my_small_font = Font(family=font_name, size=12)
        self._my_bold_font = Font(family=font_name, size=14, weight='bold')
        self._my_big_font = Font(family=font_name, size=28, weight='bold')

        self._init_stem()
        self._init_counting()
        self._init_input()

    def _init_stem(self):
        # 题干&解析按钮
        self._stem_button = Button(self,
                                   text='题干',
                                   font=self._my_small_font,
                                   width=8,
                                   height=1,
                                   relief='flat',
                                   command=self._show_stem)
        self._stem_button.place(x=15, y=5, anchor='nw')
        self._ana_button = Button(self,
                                  text='解析',
                                  font=self._my_small_font,
                                  width=8,
                                  height=1,
                                  relief='flat',
                                  command=self._show_ana)
        # self._ana_button.place(x=100, y=5, anchor='nw')

        self._canvas_stem = Canvas(self)
        self._canvas_stem.config(width=900,
                                 height=400,
                                 bg='white',
                                 relief='flat')
        self._canvas_ana = Canvas(self)
        self._canvas_ana.config(width=900,
                                height=400,
                                bg='white',
                                relief='flat')
        self._show_stem()

    def _init_counting(self):
        self._counting_frame = LabelFrame(self,
                                          text="统计",
                                          font=self._my_bold_font,
                                          padx=5,
                                          pady=5,
                                          width=250,
                                          height=416)

        self._label_times = Label(self._counting_frame,
                                  text="答题次数:",
                                  font=self._my_font,
                                  width=8,
                                  anchor="e")
        self._label_correct = Label(self._counting_frame,
                                    text="答对次数:",
                                    font=self._my_font,
                                    width=8,
                                    anchor="e")
        self._lable_rate = Label(self._counting_frame,
                                 text="答 对  率:",
                                 font=self._my_font,
                                 width=8,
                                 anchor="e")
        self._lable_weight = Label(self._counting_frame,
                                   text="权      值:",
                                   font=self._my_font,
                                   width=8,
                                   anchor="e")

        self._value_times = Label(self._counting_frame,
                                  textvariable=self._answer_times_variable,
                                  font=self._my_font,
                                  wraplength=80,
                                  justify="left")
        self._value_correct = Label(self._counting_frame,
                                    textvariable=self._correct_variable,
                                    font=self._my_font,
                                    wraplength=80,
                                    justify="left")
        self._value_rate = Label(self._counting_frame,
                                 textvariable=self._rate_variable,
                                 font=self._my_font,
                                 wraplength=80,
                                 justify="left")
        self._value_weight = Label(self._counting_frame,
                                   textvariable=self._weight_variable,
                                   font=self._my_font,
                                   wraplength=80,
                                   justify="left")

        self._label_info = Label(self._counting_frame,
                                 textvariable=self._info_variable,
                                 font=self._my_big_font,
                                 wraplength=180,
                                 justify="right",
                                 fg='blue')

        self._counting_frame.place(x=935, y=30, anchor='nw')
        self._label_times.place(x=5, y=5, anchor='nw')
        self._value_times.place(x=125, y=5, anchor='nw')
        self._label_correct.place(x=5, y=35, anchor='nw')
        self._value_correct.place(x=125, y=35, anchor='nw')
        self._lable_rate.place(x=5, y=65, anchor='nw')
        self._value_rate.place(x=125, y=65, anchor='nw')
        self._lable_weight.place(x=5, y=95, anchor='nw')
        self._value_weight.place(x=125, y=95, anchor='nw')

        self._label_info.place(x=70, y=300, anchor='nw')

    def _init_input(self):
        self._input_frame = LabelFrame(self,
                                       text="答题区域",
                                       font=self._my_bold_font,
                                       padx=5,
                                       pady=5,
                                       width=1170,
                                       height=138)
        self._input_frame.place(x=15, y=450, anchor='nw')

        self._button_check = Button(self._input_frame,
                                    text="提交答案",
                                    command=self._check,
                                    font=self._my_font,
                                    width=16)
        self._button_check.place(x=930, y=2, anchor='nw')
        self._label_answer = Label(self._input_frame,
                                   textvariable=self._answer_variable,
                                   font=self._my_font,
                                   fg='black')
        self._label_answer.place(x=10, y=55, anchor='nw')

        self._button_next = Button(self._input_frame,
                                   text="下一道题",
                                   command=self._next,
                                   font=self._my_font,
                                   width=16)
        self._button_next.bind("<Return>", self._next)  # 解决回车问题

        self._button_return = Button(self._input_frame,
                                     text="回主界面",
                                     command=self._return,
                                     font=self._my_font,
                                     width=16)
        self._button_return.bind("<Return>", self._return)  # 解决回车问题

    def set_exercise(self, e, seq, total):
        global photo_stem, photo_ana

        self.exercise = e
        self.seq = seq
        self.total = total

        string_info = "%d/%d" % (self.seq, self.total)
        self._info_variable.set(string_info)

        self._answer_times_variable.set(self.exercise.answer_times)
        self._correct_variable.set(self.exercise.correct_times)
        rate_value = round(self.exercise.get_correct_rate() * 100, 2)
        self._rate_variable.set(str(rate_value) + '%')
        self._weight_variable.set(round(self.exercise.weight, 2))

        if STYLE.IMG_FILE == self.exercise.d_style and \
            len(self.exercise.stem) > 0:
            pic_stem_file_name = SCRIPT_PATH + "/../raw/" + \
                Subject.get_string(self.subject) + '/' + \
                str(self.exercise.id) + "-stem.png"
            image_stem = Image.open(pic_stem_file_name)
            photo_stem = ImageTk.PhotoImage(image_stem)
            self._canvas_stem.create_image(5, 5, anchor=NW, image=photo_stem)

        if STYLE.TEXT_IN_DB == self.exercise.d_style and \
            len(self.exercise.stem) > 0:
            self._canvas_stem.create_text((10, 5),
                                          text=self.exercise.stem,
                                          font=self._my_font,
                                          anchor='nw',
                                          width=860)

        if STYLE.IMG_FILE == self.exercise.e_style and \
            len(self.exercise.explain) > 0:
            pic_ana_file_name = SCRIPT_PATH + "/../raw/" + \
                Subject.get_string(self.subject) + '/' + \
                str(self.exercise.id) + "-ana.png"
            image_ana = Image.open(pic_ana_file_name)
            photo_ana = ImageTk.PhotoImage(image_ana)
            self._canvas_ana.create_image(5, 5, anchor=NW, image=photo_ana)

        if STYLE.TEXT_IN_DB == self.exercise.e_style and \
            len(self.exercise.explain) > 0:
            self._canvas_ana.create_text((10, 5),
                                         text=self.exercise.explain,
                                         font=self._my_font,
                                         anchor='nw',
                                         width=860)

    def _check(self, is_correct=False):
        print("ExerciseFrame _check, is_correct=", is_correct)
        self._answer_times_variable.set(self.exercise.answer_times)
        self._correct_variable.set(self.exercise.correct_times)
        rate_value = round(self.exercise.get_correct_rate() * 100, 2)
        self._rate_variable.set(str(rate_value) + '%')
        self._weight_variable.set(round(self.exercise.weight, 2))

        if is_correct:
            self.master.event_generate("<<check-correct>>")
        else:
            self.master.event_generate("<<check-wrong>>")

        promopt_string = ''
        # check之后显示答案和ana按钮
        if is_correct:
            self._label_answer.configure(fg='green')
            promopt_string += "答对了! "
            if self.seq == self.total:
                self._button_return.place(x=930, y=50, anchor='nw')
                self._button_return.focus()
            else:
                self._button_next.place(x=930, y=50, anchor='nw')
                self._button_next.focus()
        else:
            self._label_answer.configure(fg='red')
            promopt_string += "答错了! 正确答案是: " + self.exercise.key + "。"

        if len(self.exercise.explain) > 0:
            promopt_string += " 请点击解析按钮查看解析。"
            self._ana_button.place(x=100, y=5, anchor='nw')

        self._answer_variable.set(promopt_string)

    def _next(self, event=None):
        print("Exercise Frame _next called")
        self.master.event_generate("<<next>>")

    def _return(self, event=None):
        self.master.event_generate("<<finish>>")

    def _show_stem(self):
        self._ana_button.configure(bg='lightgray', fg='black')
        self._stem_button.configure(bg='blue', fg='white')
        self._canvas_ana.place_forget()
        self._canvas_stem.place(x=14, y=42, anchor='nw')

    def _show_ana(self):
        self._stem_button.configure(bg='lightgray', fg='black')
        self._ana_button.configure(bg='blue', fg='white')
        self._canvas_stem.place_forget()
        self._canvas_ana.place(x=14, y=42, anchor='nw')
class App_Button(object):
    """docstring for App_Button"""
    def __init__(self,
                 master,
                 text=None,
                 styles=None,
                 command=None,
                 image=None,
                 title=None,
                 disabled=False):
        super(App_Button, self).__init__()

        self.master = master
        self.text = text
        self.styles = styles
        self.command = command
        self.image = image
        self.title = title
        self.disabled = disabled

        self.putButton()

    def putButton(self):
        self.btn_wrapper = LabelFrame(self.master, relief=FLAT, borderwidth=0)

        self.btn = Button(self.btn_wrapper,
                          text=self.text,
                          relief=FLAT,
                          bg=self.styles['btn_bg'],
                          padx=self.styles['padx'],
                          pady=self.styles['pady'],
                          fg=self.styles['btn_fg'],
                          borderwidth=0,
                          font=self.styles['big_font'],
                          command=self.command,
                          image=self.image,
                          activeforeground=self.styles['a_fg'],
                          activebackground=self.styles['a_bg'],
                          cursor="hand2")
        self.btn.image = self.image

        if self.disabled:
            self.btn.bind("<Button-1>", lambda x: "break")
        else:
            self.btn.bind("<Enter>", self.mouseover)
            self.btn.bind("<Leave>", self.mouseout)

        self.btn.pack()

        if self.title is not None:
            self.tooltip = App_Tooltip(self.btn, text=self.title)

    def mouseover(self, event):
        self.btn.config(fg=self.styles['h_fg'])
        self.btn.config(bg=self.styles['h_bg'])

    def mouseout(self, event):
        self.btn.config(fg=self.styles['btn_fg'])
        self.btn.config(bg=self.styles['btn_bg'])

    def bind(self, *args, **kwargs):
        self.btn.bind(*args, **kwargs)

    def bind_wrapper(self, *args, **kwargs):
        self.btn_wrapper.bind(*args, **kwargs)

    def pack(self, *args, **kwargs):
        self.btn_wrapper.pack(*args, **kwargs)

    def place(self, *args, **kwargs):
        self.btn_wrapper.place(*args, **kwargs)

    def config(self, *args, **kwargs):
        self.btn.config(*args, **kwargs)

    def set_tooltip(self, text):
        self.tooltip.configure(text=text)

    def pack_forget(self):
        self.btn_wrapper.pack_forget()

    def place_forget(self):
        self.btn_wrapper.place_forget()

    def winfo_rootx(self):
        return self.btn_wrapper.winfo_rootx()

    def winfo_rooty(self):
        return self.btn_wrapper.winfo_rooty()

    def winfo_height(self):
        return self.btn_wrapper.winfo_height()

    def winfo_width(self):
        return self.btn_wrapper.winfo_width()
示例#31
0
new_item = Menu(menu, tearoff=0)
new_item.add_command(label='Открыть', command=clicked)
new_item.add_command(label='Закрыть программу', command=quit)
menu.add_cascade(label='Файл', menu=new_item)
ph = PhotoImage(file="open.png")
ph1 = PhotoImage(file="train.png")
photo = Image.open('not loaded.png')
photo = photo.resize((430, 116))
photo.save('Temp\q.png')
window.photo = PhotoImage(file='Temp\q.png')
vlabel = Label(window, image=window.photo)
vlabel.place(x=200, y=20)

selected = IntVar()
label_frame = LabelFrame(window, text='Функции активации')
label_frame.place(x=20, y=100)
Radiobutton(label_frame, text='Сигмоидная', value=1,
            variable=selected).grid(row=0, column=0, sticky=W)
Radiobutton(label_frame, text='Линейная', value=2,
            variable=selected).grid(row=1, column=0, sticky=W)
Radiobutton(label_frame, text='ReLu', value=3,
            variable=selected).grid(row=2, column=0, sticky=W)
Radiobutton(label_frame,
            text='Гиперболический тангенс',
            value=4,
            variable=selected).grid(row=3, column=0, sticky=W)
Radiobutton(label_frame, text='softmax', value=5,
            variable=selected).grid(row=4, column=0, sticky=W)
Sel = selected.get()
Selspis = ['sigmoid', 'linear', 'relu', 'tahn', 'softmax']
btn = Button(height=50, width=50, image=ph, command=openimg)