작성
·
714
·
수정됨
1
이런 식으로 코드를 사용중입니다
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
class thread (Qthread):
def __init__(self):
super().__init__()
def run(self):
while True:
mainbot_window.fun1()
class UI (QWidget):
def __init__(self):
super().__init__()
self.inits()
self.T1 = thread()
self.T1.start()
def inits(self):
print("각종 변수 설정")
def fun1(self):
print("run code")
def main(args=None):
global mainbot_window
app = QApplication(sys.argv)
mainbot_window = UI()
mainbot_window.show()
try:
app.exec()
except KeyboardInterrupt:
pass
if __name__ == '__main__':
main()
여기서 global 변수를 사용하지 않고 싶습니다.
글로벌 변수를 사용하지 않고 Thread 에서 Qwidget 의 함수를 사용할 방법이 있을까요?
시도한것
thread 에서 pyqtsignal.emit 을 사용해서 시도해봤는데 ui가 검은 화면으로 뜬체 작동하지않습니다.
Qthread 대신 Qtimer 를 사용 =>작동은 잘되나 ui를 표시하는데 약간의 딜레이가 생깁니다. 그래서 되도록이면 Thread를 사용하고싶습니다.
답변 1
2
이렇게 하는 건 어떠신가요.
from PyQt6.QtWidgets import *
from PyQt6.QtCore import *
import sys
class thread (QThread):
def __init__(self, ui):
super().__init__()
self.ui = ui
def run(self):
while True:
# mainbot_window.fun1()
self.ui.fun1() # 추가 코드
class UI (QWidget):
def __init__(self):
super().__init__()
self.inits()
self.T1 = thread(ui=self) # 수정 코드
self.T1.start()
def inits(self):
print("각종 변수 설정")
def fun1(self):
print("run code")
def main(args=None):
# global mainbot_window
app = QApplication(sys.argv)
mainbot_window = UI()
mainbot_window.show()
try:
app.exec()
except KeyboardInterrupt:
pass
if __name__ == '__main__':
main()
감사합니다! 잘 작동됩니다.