<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ko">
	<id>https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Qthread_%EC%82%AC%EC%9A%A9%EB%B2%95</id>
	<title>Qthread 사용법 - 편집 역사</title>
	<link rel="self" type="application/atom+xml" href="https://devcafe.co.kr/w/index.php?action=history&amp;feed=atom&amp;title=Qthread_%EC%82%AC%EC%9A%A9%EB%B2%95"/>
	<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Qthread_%EC%82%AC%EC%9A%A9%EB%B2%95&amp;action=history"/>
	<updated>2026-05-19T08:22:53Z</updated>
	<subtitle>이 문서의 편집 역사</subtitle>
	<generator>MediaWiki 1.42.1</generator>
	<entry>
		<id>https://devcafe.co.kr/w/index.php?title=Qthread_%EC%82%AC%EC%9A%A9%EB%B2%95&amp;diff=42&amp;oldid=prev</id>
		<title>Devcafe: 새 문서: PyQt5 -- QThread 사용하기 &amp;  thread 간 통신하기  &lt;source lang=python&gt;  from PyQt5.QtCore import * from PyQt5.QtWidgets import *   class MyMainGUI(QDialog):     def __init__(self, parent=None):         super().__init__(parent)          self.qtxt1 = QTextEdit(self)         self.btn1 = QPushButton(&quot;Start&quot;, self)         self.btn2 = QPushButton(&quot;Stop&quot;, self)         self.btn3 = QPushButton(&quot;add 100&quot;, self)         self.btn4 = QPushButton(&quot;send instance&quot;, self)          vbox...</title>
		<link rel="alternate" type="text/html" href="https://devcafe.co.kr/w/index.php?title=Qthread_%EC%82%AC%EC%9A%A9%EB%B2%95&amp;diff=42&amp;oldid=prev"/>
		<updated>2024-10-04T15:28:15Z</updated>

		<summary type="html">&lt;p&gt;새 문서: PyQt5 -- QThread 사용하기 &amp;amp;  thread 간 통신하기  &amp;lt;source lang=python&amp;gt;  from PyQt5.QtCore import * from PyQt5.QtWidgets import *   class MyMainGUI(QDialog):     def __init__(self, parent=None):         super().__init__(parent)          self.qtxt1 = QTextEdit(self)         self.btn1 = QPushButton(&amp;quot;Start&amp;quot;, self)         self.btn2 = QPushButton(&amp;quot;Stop&amp;quot;, self)         self.btn3 = QPushButton(&amp;quot;add 100&amp;quot;, self)         self.btn4 = QPushButton(&amp;quot;send instance&amp;quot;, self)          vbox...&lt;/p&gt;
&lt;p&gt;&lt;b&gt;새 문서&lt;/b&gt;&lt;/p&gt;&lt;div&gt;PyQt5 -- QThread 사용하기 &amp;amp;  thread 간 통신하기&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=python&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from PyQt5.QtCore import *&lt;br /&gt;
from PyQt5.QtWidgets import *&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class MyMainGUI(QDialog):&lt;br /&gt;
    def __init__(self, parent=None):&lt;br /&gt;
        super().__init__(parent)&lt;br /&gt;
&lt;br /&gt;
        self.qtxt1 = QTextEdit(self)&lt;br /&gt;
        self.btn1 = QPushButton(&amp;quot;Start&amp;quot;, self)&lt;br /&gt;
        self.btn2 = QPushButton(&amp;quot;Stop&amp;quot;, self)&lt;br /&gt;
        self.btn3 = QPushButton(&amp;quot;add 100&amp;quot;, self)&lt;br /&gt;
        self.btn4 = QPushButton(&amp;quot;send instance&amp;quot;, self)&lt;br /&gt;
&lt;br /&gt;
        vbox = QVBoxLayout()&lt;br /&gt;
        vbox.addWidget(self.qtxt1)&lt;br /&gt;
        vbox.addWidget(self.btn1)&lt;br /&gt;
        vbox.addWidget(self.btn2)&lt;br /&gt;
        vbox.addWidget(self.btn3)&lt;br /&gt;
        vbox.addWidget(self.btn4)&lt;br /&gt;
        self.setLayout(vbox)&lt;br /&gt;
&lt;br /&gt;
        self.setGeometry(100, 50, 300, 300)&lt;br /&gt;
&lt;br /&gt;
class Test:&lt;br /&gt;
    def __init__(self):&lt;br /&gt;
        name = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class MyMain(MyMainGUI):&lt;br /&gt;
    add_sec_signal = pyqtSignal()&lt;br /&gt;
    send_instance_singal = pyqtSignal(&amp;quot;PyQt_PyObject&amp;quot;)&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, parent=None):&lt;br /&gt;
        super().__init__(parent)&lt;br /&gt;
&lt;br /&gt;
        self.btn1.clicked.connect(self.time_start)&lt;br /&gt;
        self.btn2.clicked.connect(self.time_stop)&lt;br /&gt;
        self.btn3.clicked.connect(self.add_sec)&lt;br /&gt;
        self.btn4.clicked.connect(self.send_instance)&lt;br /&gt;
&lt;br /&gt;
        self.th = Worker(parent=self)&lt;br /&gt;
        self.th.sec_changed.connect(self.time_update)  # custom signal from worker thread to main thread&lt;br /&gt;
&lt;br /&gt;
        self.add_sec_signal.connect(self.th.add_sec)   # custom signal from main thread to worker thread&lt;br /&gt;
        self.send_instance_singal.connect(self.th.recive_instance_singal)&lt;br /&gt;
        self.show()&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def time_start(self):&lt;br /&gt;
        self.th.start()&lt;br /&gt;
        self.th.working = True&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def time_stop(self):&lt;br /&gt;
        self.th.working = False&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def add_sec(self):&lt;br /&gt;
        print(&amp;quot;.... add singal emit....&amp;quot;)&lt;br /&gt;
        self.add_sec_signal.emit()&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot(str)&lt;br /&gt;
    def time_update(self, msg):&lt;br /&gt;
        self.qtxt1.append(msg)&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def send_instance(self):&lt;br /&gt;
        t1 = Test()&lt;br /&gt;
        t1.name = &amp;quot;SuperPower!!!&amp;quot;&lt;br /&gt;
        self.send_instance_singal.emit(t1)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
class Worker(QThread):&lt;br /&gt;
    sec_changed = pyqtSignal(str)&lt;br /&gt;
&lt;br /&gt;
    def __init__(self, sec=0, parent=None):&lt;br /&gt;
        super().__init__()&lt;br /&gt;
        self.main = parent&lt;br /&gt;
        self.working = True&lt;br /&gt;
        self.sec = sec&lt;br /&gt;
&lt;br /&gt;
        # self.main.add_sec_signal.connect(self.add_sec)   # 이것도 작동함. # custom signal from main thread to worker thread&lt;br /&gt;
&lt;br /&gt;
    def __del__(self):&lt;br /&gt;
        print(&amp;quot;.... end thread.....&amp;quot;)&lt;br /&gt;
        self.wait()&lt;br /&gt;
&lt;br /&gt;
    def run(self):&lt;br /&gt;
        while self.working:&lt;br /&gt;
            self.sec_changed.emit(&amp;#039;time (secs)：{}&amp;#039;.format(self.sec))&lt;br /&gt;
            self.sleep(1)&lt;br /&gt;
            self.sec += 1&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot()&lt;br /&gt;
    def add_sec(self):&lt;br /&gt;
        print(&amp;quot;add_sec....&amp;quot;)&lt;br /&gt;
        self.sec += 100&lt;br /&gt;
&lt;br /&gt;
    @pyqtSlot(&amp;quot;PyQt_PyObject&amp;quot;)&lt;br /&gt;
    def recive_instance_singal(self, inst):&lt;br /&gt;
        print(inst.name)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
if __name__ == &amp;quot;__main__&amp;quot;:&lt;br /&gt;
    import sys&lt;br /&gt;
&lt;br /&gt;
    app = QApplication(sys.argv)&lt;br /&gt;
    form = MyMain()&lt;br /&gt;
    app.exec_()&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[category:python]]&lt;/div&gt;</summary>
		<author><name>Devcafe</name></author>
	</entry>
</feed>