Python Tkinter发布事件

2024-04-24 18:37:09 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一些小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。你知道吗


Tags: selftkinterdownloaddefbarguierrorclass
1条回答
网友
1楼 · 发布于 2024-04-24 18:37:09

我在python for Tkinter中使用了标准的python线程模块,发现它非常好用。。你知道吗

下面是一个程序的摘录,用于从API流式传输数据。。你知道吗

希望它能给你一个开始,但它是纯粹的功能性基础。。你知道吗

对我来说,它很有魅力。。程序在没有..的情况下崩溃。。你知道吗

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()

相关问题 更多 >