Exemplo n.º 1
0
class ContentFrame(widgets.ScrollbarCanvasMixin, widgets.BaseFrame):
    canvas_height = 550
    canvas_width = 550

    def _init(self):

        super()._init()
        self._once_init()

    def _once_init(self):
        self.results = FilterableList()
        self.filter_kwargs = dict()
        self._queue = queue.Queue()

        self.rows = 0

    def show_results(self, results):
        """
        generate the results
        :parameter results: instance RawFrame list
        """
        for r in results:
            self.show_one_result(r)

    def show_one_result(self, result:RowFrame):

        result.grid(column=0, row=self.rows)
        self.rows += 1

    def add_new_result(self, result:ResultInfo):
        row = RowFrame(self.frame, **result.as_dict())

        # 检测当前的row是否符合过滤规则
        if FilterableList([row]).filter(**self.filter_kwargs):
            self.show_one_result(row)

        self.results.append(row)



    def test(self):
        for i in range(50):
            print(i)
            im = Image.open('gui/images_test/1.png')
            result = {
                'image_url': "http://h.nimingban.com/Public/Upload/image/2015-08-18/55d2bff64c32f.jpg",
                'text': 'the'+str(i) + '0123456789'*20,
                'link': 'http://www.baidu.com',
                'response_num':30,
            }
            m = i % 3
            if m ==0:
                result = ResultInfo(**result)
            elif m==1:
                result.pop('image_url')
                result['image_fp'] = im
                result = ResultInfo(**result)
            else:
                result.pop('image_url')
                result = ResultInfo(**result)

            self._queue.put(result)

        self._queue.put(None)

    def retrieve_result_from_engine(self):
        import time

        self.master.progressbar_start()

        while engine.is_running:
            result = engine.get_one_result()
            if result:
                self._queue.put(result)

            else:
                time.sleep(0.5)

        self._queue.put(None)
        self.master.progressbar_stop()

    def communicate_for_get_result(self):
        while True:
            try:
                result = self._queue.get_nowait()
                if result is None:
                    return

                self.add_new_result(result)
            except queue.Empty:
                break

        self.after(500, self.communicate_for_get_result)


    def do_filter(self, **kwargs):
        """
        pass nothing will clear the filter
        :param kwargs:
        :return:
        """

        self.filter_kwargs = kwargs
        results = self.results.all()

        for key, value in kwargs.items():
            results = results.filter(**{key: value})

        self.refresh_result_pannel()
        self.show_results(results)

    def clear_filter(self):
        self.do_filter()


    def refresh_result_pannel(self):
        for c in self.frame.winfo_children():
            c.grid_forget()

        self.rows = 0

    def clear(self):

        for c in self.frame.winfo_children():
            c.destroy()
        self._once_init()
Exemplo n.º 2
0
    def _once_init(self):
        self.results = FilterableList()
        self.filter_kwargs = dict()
        self._queue = queue.Queue()

        self.rows = 0