コード例 #1
0
    def __init__( self, master = None ):
        Frame.__init__( self, master )

        self.value_of_combo = "X"

        self.grid( )
        self.create_widgets( )

        self.download_manager = HentaiDownloadManager()
        # self.update( )

        self.download_manager.task_update_callback = self.download_update_callback
        self.download_manager.task_finish_callback = self.download_finish_callback

        self.update_ui( )
        self.load_config( )
コード例 #2
0
class MainFrame( Frame ):
    """
    MainFrame's description.
    """

    def __init__( self, master = None ):
        Frame.__init__( self, master )

        self.value_of_combo = "X"

        self.grid( )
        self.create_widgets( )

        self.download_manager = HentaiDownloadManager()
        # self.update( )

        self.download_manager.task_update_callback = self.download_update_callback
        self.download_manager.task_finish_callback = self.download_finish_callback

        self.update_ui( )
        self.load_config( )

    def load_config( self ):
        try:
            with open( cfg_file, "rb" ) as f:
                self.addr_var.set( pickle.load( f ) )
                # self.gallery_name_var.set( pickle.load( f ) )
                self.save_folder_var.set( pickle.load( f ) )
        except:
            if not os.path.isfile( cfg_file ):
                print( "File(%s) is not exits" % cfg_file )
                return False

            print( "User info file(%s) is broken!" % cfg_file )
            os.remove( cfg_file )
    def save_config( self ):
        with open( cfg_file, "wb" ) as f:
            pickle.dump( self.addr_var.get( ), f )
            # pickle.dump( self.gallery_name_var.get( ), f )
            pickle.dump( self.save_folder_var.get( ), f )
    
    def open_options( self ):
        # wdw = Toplevel()
        # wdw.geometry('+400+400')
        # e = Entry(wdw)
        # e.pack()
        # e.focus_set()
        # wdw.transient(self)
        # wdw.grab_set()
        # self.wait_window(wdw)

        options_frame = OptionsFrame( self )
        options_frame.transient(self)
        options_frame.grab_set()
        options_frame.set_callback( self.login_callback, self.logout_callback )

        user_name = self.download_manager.get_user_name()
        if user_name:
            options_frame.update_ui( {"user_name" : user_name} )
        else:
            options_frame.update_ui( {} )

        self.wait_window( options_frame )

    def create_widgets( self ):

        # gallery info group
        self.group = LabelFrame(self, text="相册信息", padx=5, pady=5)
        self.group.grid(padx=10, pady=10, sticky=W+E+N+S, columnspan=4)

        l = Label( self.group, text="相册地址" )
        l.grid( row=0, column=0 )

        self.addr_var = StringVar()
        self.addr = Entry( self.group, textvariable = self.addr_var )
        self.addr.grid( row=0, column=1, columnspan=3, sticky=W+E+N+S, padx=5, pady=3 )

        l = Label( self.group, text="相册名称" )
        l.grid( row=1, column=0 )

        self.gallery_name_var = StringVar()
        self.gallery_name = Entry( self.group, textvariable=self.gallery_name_var )
        self.gallery_name.grid( row=1, column=1, columnspan=3, sticky=W+E+N+S, padx=5, pady=3 )

        l = Label( self.group, text="保存地址" )
        l.grid( row=2, column=0 )

        self.save_folder_var = StringVar()
        self.save_folder = Entry( self.group, textvariable=self.save_folder_var )
        self.save_folder.grid( row=2, column=1, columnspan=2, sticky=W+E+N+S, padx=5, pady=3 )

        self.btn_open_dir = Button( self.group, text="打开目录", padx=10, command = self.open_dir )
        self.btn_open_dir.grid( row=2, column=3, sticky=W+E+N+S, padx=5, pady=3 )

        l = Label( self.group, text="图片数量" )
        l.grid( row=3, column=0 )

        self.pic_num_var = StringVar()
        self.pic_num = Entry( self.group, width=3, state = "disabled", textvariable=self.pic_num_var )
        self.pic_num.grid( row=3, column=1, sticky=W, padx=5 )

        self.parse_gallery = Button( self.group, text="分析相册", padx=10, command = self.start_parse )
        self.parse_gallery.grid( row=3, column=2, sticky=W+E+N+S, padx=5, pady=3 )

        self.addr_var.trace( "w", lambda name, index, mode: self.parse_gallery.config( state="normal" ) )

        self.btn_download = Button( self.group, text="开始下载", padx=10, command = self.start_download )
        self.btn_download.grid( row=3, column=3, sticky=W+E+N+S, padx=5, pady=3 )

        #self.btn_menu = Button( self, text="选项", command = lambda: self.pic_num_var.set( 1 ))
        self.btn_menu = Button( self, text="选项", command = self.open_options )
        self.btn_menu.grid( row=1, column=0 )

        l = Label( self, text="当前图片" )
        l.grid( row=1, column=1 )

        self.prg_download = ttk.Progressbar(self, orient='horizontal', mode='determinate')
        self.prg_download.grid( row=1, column=2 )
        # self.prg_download.step( 25 *2 )

        # self.lab_download = Label( self, text="尚未开始下载" )
        # self.lab_download.grid( row=1, column=3 )

    def update( self, elapse = 500 ):
        print( "update!" )
        self.after( elapse, self.update )

    def update_ui( self ):
        if not self.download_manager.is_login( ):
            self.open_options( )
            return

        # print( "update_ui", self.download_manager.task_name )
        if self.download_manager.task_name:
            self.gallery_name_var.set( self.download_manager.task_name )
            self.btn_download.config( state="normal" )
            self.parse_gallery.config( state="disabled" )

            ( cur, total ) = self.download_manager.get_progress( )
            # print( "============total", total, self.download_manager.task_status_tab )
            self.pic_num_var.set( len(self.download_manager.task_urls) )
            if total > 0:
                self.prg_download["value"] = cur
                self.prg_download["maximum"] = total
            else:
                self.prg_download["value"] = 0
        else:
            self.gallery_name_var.set( "" )
            self.btn_download.config( state="disabled" )
            self.parse_gallery.config( state="normal" )
            self.pic_num_var.set( "" )
            self.prg_download["value"] = 0

    def start_parse( self ):
        self.download_manager.parse( self.addr_var.get( ) )
        self.update_ui( )

    def start_download( self ):
        self.btn_download.config( state="disabled" )
        save_folder = os.path.join( self.save_folder_var.get( ), self.gallery_name_var.get( ) )
        self.download_manager.download( save_folder )
        self.save_config( )

    def open_dir( self ):
        import platform
        if os.path.isdir( self.save_folder_var.get() ):
            if platform.system( ) == "Windows":
                import subprocess
                subprocess.Popen( r'explorer /select,"%s"' % self.save_folder_var.get() )
    

    def login_callback( self, user_name, password ):
        return self.download_manager.login( user_name, password )
        # if self.user_session.get_cookies_from_internet( user_name, password ):
        #     pass
        # else:
        #     pass
        # print( "login", user_name, password )

    def logout_callback( self ):
        self.download_manager.logout( )

    def download_update_callback( self, cur, total ):
        self.prg_download["value"] = cur
        self.prg_download["maximum"] = total


    def download_finish_callback( self ):
        self.btn_download.config( state="normal" )
        tkinter.messagebox.showinfo( "通知", "下载完成!" )