代码之家  ›  专栏  ›  技术社区  ›  Arti

python tkinter发布事件

  •  0
  • Arti  · 技术社区  · 8 年前

    我有一些小的pyqt程序,我想转换成tkinter(因为商业许可证)。我想知道在qt上使用多线程有多简单:

    class DownloadFileThread(QtCore.QThread):
        download_error = QtCore.pyqtSignal(str, str)
        download_progress = QtCore.pyqtSignal(int)
        download_finished = QtCore.pyqtSignal()
    
        def run(self):
            # some code here ...
            if error:
               self.download_error.emit(
                    f'Error',
                    f'error'
                )
            elif progress:
                self.download_progress.emit(progress)
            else:
                self.download_finished.emit()
            f.close()
    
    
    # and then somewhere in GUI class:
    
    def set_progress_bar_value(self, val):
        self.progress_bar.setValue(val)
    
    self.download_file_thread.download_progress.connect(self.set_progress_bar_value)
    

    所以我有完全独立的类,它允许我连接多个小部件并基于 SIGNALS

    但是我读了很多文章和例子,仍然无法理解如何在tkinter上实现类似的东西。如何使完全独立的类将事件发布到主线程,然后GUI类应处理这些事件并更新UI。

    1 回复  |  直到 8 年前
        1
  •  1
  •   johnashu    8 年前

    def get_data():
        """Parse and dump all data."""
        fnt = font.Font(family="Courier New", size=14)
        textPad = tkinter.Frame(root)
        textPad.pack(expand=True, fill='both')
        T = tkinter.Text(textPad, font=fnt, height=29)
        scrollbar = tkinter.Scrollbar(textPad)
        .....
    
    
    
    def thread_stuff():
        t = threading.Thread(target=get_data)
        t.daemon = True
        t.start()